🦄 Sync 2026-05-02 20:20:38

This commit is contained in:
github-actions[bot] committed 2026-05-02 20:20:38 +08:00
1 parent c62a32fec9
commit 8857cf219d
12 files changed
+129 -70

No files matched your search

+1 -1
View File
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-mosdns PKG_NAME:=luci-app-mosdns
PKG_VERSION:=1.7.2 PKG_VERSION:=1.7.2
PKG_RELEASE:=6 PKG_RELEASE:=7
LUCI_TITLE:=LuCI Support for mosdns LUCI_TITLE:=LuCI Support for mosdns
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
+1 -1
View File
@@ -66,7 +66,7 @@ generate_config() {
json_close_object json_close_object
# api # api
json_add_object 'api' json_add_object 'api'
json_add_string "http" "0.0.0.0:$listen_port_api" json_add_string "http" "127.0.0.1:$listen_port_api"
json_close_object json_close_object
# include # include
json_add_array "include" json_add_array "include"
+1 -1
View File
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.4.15 PKG_VERSION:=26.4.15
PKG_RELEASE:=106 PKG_RELEASE:=107
PKG_PO_VERSION:=$(PKG_VERSION) PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \ PKG_CONFIG_DEPENDS:= \
+22
View File
@@ -945,6 +945,28 @@ function parseURL(url_str)
return res return res
end end
function parseDoH(doh_str)
doh_str = trim(doh_str)
if doh_str == "" then return nil end
local url_part, ip_part
if doh_str:find(",", 1, true) then
url_part, ip_part = doh_str:match("^([^,]+),(.+)$")
else
url_part = doh_str
end
local res = parseURL(url_part)
if not res then return nil end
res.url = url_part
if ip_part and ip_part ~= "" and is_ip(ip_part) then
res.hostip = ip_part
end
return res
end
local default_file_tree = { local default_file_tree = {
x86_64 = "amd64", x86_64 = "amd64",
x86 = "386", x86 = "386",
@@ -166,7 +166,7 @@ function gen_outbound(flag, node, tag, proxy_table)
local server_port local server_port
local server_path local server_path
if dns_proto == "https" then if dns_proto == "https" then
local _a = api.parseURL(node.domain_resolver_dns_https) local _a = api.parseDoH(node.domain_resolver_dns_https)
if _a then if _a then
server_address = _a.hostname server_address = _a.hostname
server_port = _a.port or 443 server_port = _a.port or 443
@@ -1024,10 +1024,7 @@ function gen_config(var)
local remote_dns_udp_port = var["remote_dns_udp_port"] local remote_dns_udp_port = var["remote_dns_udp_port"]
local remote_dns_tcp_server = var["remote_dns_tcp_server"] local remote_dns_tcp_server = var["remote_dns_tcp_server"]
local remote_dns_tcp_port = var["remote_dns_tcp_port"] local remote_dns_tcp_port = var["remote_dns_tcp_port"]
local remote_dns_doh_url = var["remote_dns_doh_url"] local remote_dns_doh = var["remote_dns_doh"]
local remote_dns_doh_host = var["remote_dns_doh_host"]
local remote_dns_doh_ip = var["remote_dns_doh_ip"]
local remote_dns_doh_port = var["remote_dns_doh_port"]
local remote_dns_http3 = var["remote_dns_http3"] local remote_dns_http3 = var["remote_dns_http3"]
local remote_dns_client_ip = var["remote_dns_client_ip"] local remote_dns_client_ip = var["remote_dns_client_ip"]
local remote_dns_query_strategy = var["remote_dns_query_strategy"] local remote_dns_query_strategy = var["remote_dns_query_strategy"]
@@ -1762,13 +1759,15 @@ function gen_config(var)
remote_server.type = "udp" remote_server.type = "udp"
remote_server.server = remote_dns_udp_server remote_server.server = remote_dns_udp_server
remote_server.server_port = server_port remote_server.server_port = server_port
elseif remote_dns_tcp_server then elseif remote_dns_tcp_server then
local server_port = tonumber(remote_dns_tcp_port) or 53 local server_port = tonumber(remote_dns_tcp_port) or 53
remote_server.type = "tcp" remote_server.type = "tcp"
remote_server.server = remote_dns_tcp_server remote_server.server = remote_dns_tcp_server
remote_server.server_port = server_port remote_server.server_port = server_port
elseif remote_dns_doh_url then
local _a = api.parseURL(remote_dns_doh_url) elseif remote_dns_doh then
local _a = api.parseDoH(remote_dns_doh)
if _a then if _a then
remote_server.type = "https" remote_server.type = "https"
if remote_dns_http3 then if remote_dns_http3 then
@@ -1777,15 +1776,16 @@ function gen_config(var)
remote_server.server = _a.hostname remote_server.server = _a.hostname
remote_server.server_port = _a.port or 443 remote_server.server_port = _a.port or 443
remote_server.path = _a.pathname or "" remote_server.path = _a.pathname or ""
end
if api.datatypes.hostname(remote_dns_doh_host) then if api.datatypes.hostname(_a.hostname) then
if remote_dns_doh_ip and remote_dns_doh_host ~= remote_dns_doh_ip and api.is_ip(remote_dns_doh_ip) then if _a.hostip then
if not hosts_predefined then hosts_predefined = {} end if not hosts_predefined then hosts_predefined = {} end
hosts_predefined[remote_dns_doh_host] = remote_dns_doh_ip hosts_predefined[_a.hostname] = _a.hostip
remote_server_domain_resolver = "hosts" remote_server_domain_resolver = "hosts"
else else
GLOBAL.DNS_HOSTNAME[remote_dns_doh_host] = true GLOBAL.DNS_HOSTNAME[_a.hostname] = true
remote_server_domain_resolver = "direct" remote_server_domain_resolver = "direct"
end
end end
end end
end end
+17 -18
View File
@@ -408,9 +408,9 @@ function gen_outbound(flag, node, tag, proxy_table)
local config_address local config_address
local config_port local config_port
if dns_proto == "https" then if dns_proto == "https" then
local _a = api.parseURL(node.domain_resolver_dns_https) local _a = api.parseDoH(node.domain_resolver_dns_https)
if _a then if _a then
config_address = node.domain_resolver_dns_https config_address = _a.url
config_port = _a.port or 443 config_port = _a.port or 443
if _a.hostname and api.datatypes.hostname(_a.hostname) then if _a.hostname and api.datatypes.hostname(_a.hostname) then
GLOBAL.DNS_HOSTNAME[_a.hostname] = true GLOBAL.DNS_HOSTNAME[_a.hostname] = true
@@ -801,10 +801,7 @@ function gen_config(var)
local remote_dns_udp_port = var["remote_dns_udp_port"] local remote_dns_udp_port = var["remote_dns_udp_port"]
local remote_dns_tcp_server = var["remote_dns_tcp_server"] local remote_dns_tcp_server = var["remote_dns_tcp_server"]
local remote_dns_tcp_port = var["remote_dns_tcp_port"] local remote_dns_tcp_port = var["remote_dns_tcp_port"]
local remote_dns_doh_url = var["remote_dns_doh_url"] local remote_dns_doh = var["remote_dns_doh"]
local remote_dns_doh_host = var["remote_dns_doh_host"]
local remote_dns_doh_ip = var["remote_dns_doh_ip"]
local remote_dns_doh_port = var["remote_dns_doh_port"]
local remote_dns_client_ip = var["remote_dns_client_ip"] local remote_dns_client_ip = var["remote_dns_client_ip"]
local remote_dns_fake = var["remote_dns_fake"] local remote_dns_fake = var["remote_dns_fake"]
local remote_dns_query_strategy = var["remote_dns_query_strategy"] local remote_dns_query_strategy = var["remote_dns_query_strategy"]
@@ -1497,7 +1494,7 @@ function gen_config(var)
}) })
end end
if (remote_dns_udp_server and remote_dns_udp_port) or (remote_dns_tcp_server and remote_dns_tcp_port) or remote_dns_doh_url or #node_dns > 0 then if (remote_dns_udp_server and remote_dns_udp_port) or (remote_dns_tcp_server and remote_dns_tcp_port) or remote_dns_doh or #node_dns > 0 then
if not routing then if not routing then
routing = { routing = {
domainStrategy = "IPOnDemand", domainStrategy = "IPOnDemand",
@@ -1560,22 +1557,24 @@ function gen_config(var)
if remote_dns_udp_server then if remote_dns_udp_server then
_remote_dns.address = remote_dns_udp_server _remote_dns.address = remote_dns_udp_server
_remote_dns.port = tonumber(remote_dns_udp_port) or 53 _remote_dns.port = tonumber(remote_dns_udp_port) or 53
elseif remote_dns_tcp_server then elseif remote_dns_tcp_server then
_remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53 _remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53
end
local _remote_dns_host elseif remote_dns_doh then
if remote_dns_doh_url and remote_dns_doh_host then local _a = api.parseDoH(remote_dns_doh)
if api.datatypes.hostname(remote_dns_doh_host) then if _a then
if remote_dns_doh_ip and remote_dns_doh_host ~= remote_dns_doh_ip and api.is_ip(remote_dns_doh_ip) then _remote_dns.address = _a.url
dns.hosts[remote_dns_doh_host] = remote_dns_doh_ip _remote_dns.port = _a.port or 443
_remote_dns_host = remote_dns_doh_host
else if api.datatypes.hostname(_a.hostname) then
GLOBAL.DNS_HOSTNAME[remote_dns_doh_host] = true if _a.hostip then
dns.hosts[_a.hostname] = _a.hostip
else
GLOBAL.DNS_HOSTNAME[_a.hostname] = true
end
end end
end end
_remote_dns.address = remote_dns_doh_url
_remote_dns.port = tonumber(remote_dns_doh_port)
end end
if next(_remote_dns) then if next(_remote_dns) then
@@ -172,12 +172,7 @@ run_singbox() {
json_add_string "remote_dns_${_proto}_port" "${_dns_port}" json_add_string "remote_dns_${_proto}_port" "${_dns_port}"
;; ;;
doh|http3) doh|http3)
local _doh_url _doh_host _doh_port _doh_bootstrap json_add_string "remote_dns_doh" "${remote_dns_doh}"
parse_doh "$remote_dns_doh" _doh_url _doh_host _doh_port _doh_bootstrap
[ -n "$_doh_bootstrap" ] && json_add_string "remote_dns_doh_ip" "${_doh_bootstrap}"
json_add_string "remote_dns_doh_port" "${_doh_port}"
json_add_string "remote_dns_doh_url" "${_doh_url}"
json_add_string "remote_dns_doh_host" "${_doh_host}"
[ "$remote_dns_protocol" = "http3" ] && json_add_string "remote_dns_http3" "1" [ "$remote_dns_protocol" = "http3" ] && json_add_string "remote_dns_http3" "1"
;; ;;
esac esac
@@ -269,12 +264,7 @@ run_xray() {
json_add_string "remote_dns_${_proto}_port" "${_dns_port}" json_add_string "remote_dns_${_proto}_port" "${_dns_port}"
;; ;;
doh) doh)
local _doh_url _doh_host _doh_port _doh_bootstrap json_add_string "remote_dns_doh" "${remote_dns_doh}"
parse_doh "$remote_dns_doh" _doh_url _doh_host _doh_port _doh_bootstrap
[ -n "$_doh_bootstrap" ] && json_add_string "remote_dns_doh_ip" "${_doh_bootstrap}"
json_add_string "remote_dns_doh_port" "${_doh_port}"
json_add_string "remote_dns_doh_url" "${_doh_url}"
json_add_string "remote_dns_doh_host" "${_doh_host}"
;; ;;
esac esac
@@ -1351,10 +1341,6 @@ start_dns() {
local remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query") local remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query")
_args="${_args} remote_dns_doh=${remote_dns_doh}" _args="${_args} remote_dns_doh=${remote_dns_doh}"
echolog " - Sing-Box DNS(${TUN_DNS}) -> ${remote_dns_doh}" echolog " - Sing-Box DNS(${TUN_DNS}) -> ${remote_dns_doh}"
local _doh_url _doh_host _doh_port _doh_bootstrap
parse_doh "$remote_dns_doh" _doh_url _doh_host _doh_port _doh_bootstrap
[ -n "${_doh_bootstrap}" ] && REMOTE_DNS="${_doh_bootstrap}#${_doh_port}"
;; ;;
esac esac
_args="${_args} dns_socks_address=127.0.0.1 dns_socks_port=${tcp_node_socks_port}" _args="${_args} dns_socks_address=127.0.0.1 dns_socks_port=${tcp_node_socks_port}"
@@ -1390,10 +1376,6 @@ start_dns() {
local remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query") local remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query")
_args="${_args} remote_dns_doh=${remote_dns_doh}" _args="${_args} remote_dns_doh=${remote_dns_doh}"
echolog " - Xray DNS(${TUN_DNS}) -> ${remote_dns_doh}" echolog " - Xray DNS(${TUN_DNS}) -> ${remote_dns_doh}"
local _doh_url _doh_host _doh_port _doh_bootstrap
parse_doh "$remote_dns_doh" _doh_url _doh_host _doh_port _doh_bootstrap
[ -n "${_doh_bootstrap}" ] && REMOTE_DNS="${REMOTE_DNS},${_doh_bootstrap}#${_doh_port}"
;; ;;
esac esac
_args="${_args} dns_socks_address=127.0.0.1 dns_socks_port=${tcp_node_socks_port}" _args="${_args} dns_socks_address=127.0.0.1 dns_socks_port=${tcp_node_socks_port}"
+1 -1
View File
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-webdav PKG_NAME:=luci-app-webdav
PKG_VERSION:=1.0.0 PKG_VERSION:=1.0.0
PKG_RELEASE:=1 PKG_RELEASE:=2
LUCI_TITLE:=LuCI support for WebDav LUCI_TITLE:=LuCI support for WebDav
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
@@ -1,14 +1,6 @@
{ {
"admin/nas": { "admin/services/webdav": {
"title": "NAS",
"order": 44,
"action": {
"type": "firstchild"
}
},
"admin/nas/webdav": {
"title": "WebDAV", "title": "WebDAV",
"order": 90,
"action": { "action": {
"type": "view", "type": "view",
"path": "webdav" "path": "webdav"
+1 -1
View File
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=mosdns PKG_NAME:=mosdns
PKG_VERSION:=5.3.4 PKG_VERSION:=5.3.4
PKG_RELEASE:=8 PKG_RELEASE:=9
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/IrineSistiana/mosdns/tar.gz/v$(PKG_VERSION)? PKG_SOURCE_URL:=https://codeload.github.com/IrineSistiana/mosdns/tar.gz/v$(PKG_VERSION)?
@@ -0,0 +1,64 @@
From 8f9c6ca1ac8e9b5e10a5c45f3f338546424c95f1 Mon Sep 17 00:00:00 2001
From: sbwml <admin@cooluc.com>
Date: Sat, 2 May 2026 13:43:31 +0800
Subject: [PATCH] feat(adblock_set): support hosts file format blocking rules
Parse lines like "0.0.0.0 domain" and "127.0.0.1 domain" as exact-match
blocking rules, compatible with AdGuard Home hosts-style lists.
Signed-off-by: sbwml <admin@cooluc.com>
---
plugin/data_provider/adblock_set/adblock_set_test.go | 6 ++++++
plugin/data_provider/adblock_set/parser.go | 12 ++++++++++++
2 files changed, 18 insertions(+)
--- a/plugin/data_provider/adblock_set/adblock_set_test.go
+++ b/plugin/data_provider/adblock_set/adblock_set_test.go
@@ -42,6 +42,8 @@ func TestParseAndMatch(t *testing.T) {
blocked.com
domain:ntp.org
full:metrics.icloud.com
+0.0.0.0 singlehotmilf.online
+127.0.0.1 deezer.deliveryengine.adswizz.com
`
blacklist := domain.NewMixMatcher[struct{}]()
whitelist := domain.NewMixMatcher[struct{}]()
@@ -75,6 +77,10 @@ full:metrics.icloud.com
{"sub.ntp.org", true}, // matched by domain:ntp.org
{"metrics.icloud.com", true}, // matched by full:metrics.icloud.com
{"sub.metrics.icloud.com", false}, // full match only
+ {"singlehotmilf.online", true}, // hosts: 0.0.0.0
+ {"sub.singlehotmilf.online", false}, // hosts: exact match only
+ {"deezer.deliveryengine.adswizz.com", true}, // hosts: 127.0.0.1
+ {"sub.deezer.deliveryengine.adswizz.com", false}, // hosts: exact match only
}
for _, tt := range tests {
--- a/plugin/data_provider/adblock_set/parser.go
+++ b/plugin/data_provider/adblock_set/parser.go
@@ -22,6 +22,7 @@ package adblock_set
import (
"bufio"
"io"
+ "net"
"strings"
"github.com/IrineSistiana/mosdns/v5/pkg/matcher/domain"
@@ -36,6 +37,17 @@ func ParseRules(r io.Reader, blacklist,
continue
}
+ // Handle hosts file format: "0.0.0.0 domain" or "127.0.0.1 domain"
+ if fields := strings.Fields(line); len(fields) >= 2 {
+ if ip := net.ParseIP(fields[0]); ip != nil {
+ host := fields[1]
+ if host != "" && host != "localhost" {
+ _ = blacklist.Add("full:"+host, struct{}{})
+ }
+ continue
+ }
+ }
+
// Handle whitelists
isWhitelist := false
if strings.HasPrefix(line, "@@") {
+2 -2
View File
@@ -9,7 +9,7 @@ PKG_NAME:=natmapt
PKG_UPSTREAM_VERSION:=20260214 PKG_UPSTREAM_VERSION:=20260214
PKG_UPSTREAM_GITHASH:= PKG_UPSTREAM_GITHASH:=
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)$(if $(PKG_UPSTREAM_GITHASH),~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH))) PKG_VERSION:=$(PKG_UPSTREAM_VERSION)$(if $(PKG_UPSTREAM_GITHASH),~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH)))
PKG_RELEASE:=2 PKG_RELEASE:=3
SCRIPTS_VERSION:=0.2026.01.24 SCRIPTS_VERSION:=0.2026.01.24
PKG_SOURCE_SUBDIR:=$(PKG_UPSTREAM_NAME)-$(PKG_UPSTREAM_VERSION) PKG_SOURCE_SUBDIR:=$(PKG_UPSTREAM_NAME)-$(PKG_UPSTREAM_VERSION)
@@ -23,7 +23,7 @@ PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.xz
else else
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/heiher/natmap.git PKG_SOURCE_URL:=https://github.com/heiher/natmap.git
PKG_SOURCE_VERSION:=b098467e0b9e8e6cd81f6baf398f11f247bb5afb PKG_SOURCE_VERSION:=079bce1d6c5798fa6f47d364b737762dae89aafc
PKG_MIRROR_HASH:=skip PKG_MIRROR_HASH:=skip
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR)-$(PKG_SOURCE_VERSION).tar.gz PKG_SOURCE:=$(PKG_SOURCE_SUBDIR)-$(PKG_SOURCE_VERSION).tar.gz