From bc941cf08242e3dbd5aeb0b97cda46b41301fa5a Mon Sep 17 00:00:00 2001 From: sbwml Date: Sun, 17 Sep 2023 05:49:47 +0800 Subject: [PATCH] luci-app-passwall2: sync upstream --- .../luasrc/passwall2/util_sing-box.lua | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index 6431c3fe3..986ce2bec 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -694,6 +694,7 @@ function gen_config(var) local dns_direct_domains = {} local dns_remote_domains = {} + local dns_block_domains = {} local dns = nil local inbounds = {} local outbounds = {} @@ -1016,6 +1017,8 @@ function gen_config(var) if outboundTag == "direct" then table.insert(dns_direct_domains, w) + elseif outboundTag == "block" then + table.insert(dns_block_domains, w) else if outboundTag ~= "nil" then table.insert(dns_remote_domains, w) @@ -1248,12 +1251,44 @@ function gen_config(var) detour = "direct", }) end - + table.insert(dns.servers, { tag = "block", - address = "rcode://refused", + address = "rcode://success", }) + local block_domain = {} + local block_domain_suffix = {} + local block_domain_keyword = {} + local block_domain_regex = {} + local block_geosite = {} + for index, value in ipairs(dns_block_domains) do + if value:find("geosite:") == 1 then + table.insert(block_geosite, value:sub(1 + #"geosite:")) + elseif value:find("regexp:") == 1 then + table.insert(block_domain_regex, value:sub(1 + #"regexp:")) + elseif value:find("full:") == 1 then + table.insert(block_domain, value:sub(1 + #"full:")) + elseif value:find("domain:") == 1 then + table.insert(block_domain_keyword, value:sub(1 + #"domain:")) + else + table.insert(block_domain, value) + end + end + local block_rule = { + server = "block", + domain = #block_domain > 0 and block_domain or nil, + domain_suffix = #block_domain_suffix > 0 and block_domain_suffix or nil, + domain_keyword = #block_domain_keyword > 0 and block_domain_keyword or nil, + domain_regex = #block_domain_regex > 0 and block_domain_regex or nil, + geosite = #block_geosite > 0 and block_geosite or nil, + disable_cache = true, + } + + if block_rule.domain or block_rule.domain_suffix or block_rule.domain_keyword or block_rule.domain_regex or block_rule.geosite then + table.insert(dns.rules, block_rule) + end + local default_dns_flag = "remote" if node_id and redir_port then local node = uci:get_all(appname, node_id)