luci-app-passwall: sync upstream

last commit: a3a8977ff9
This commit is contained in:
gitea-action 2025-04-28 12:30:23 +08:00
parent e674faa722
commit cedddee5bc

View File

@ -9,6 +9,7 @@ local split = api.split
local local_version = api.get_app_version("sing-box") local local_version = api.get_app_version("sing-box")
local version_ge_1_11_0 = api.compare_versions(local_version:match("[^v]+"), ">=", "1.11.0") local version_ge_1_11_0 = api.compare_versions(local_version:match("[^v]+"), ">=", "1.11.0")
local version_ge_1_12_0 = api.compare_versions(local_version:match("[^v]+"), ">=", "1.12.0")
local geosite_all_tag = {} local geosite_all_tag = {}
local geoip_all_tag = {} local geoip_all_tag = {}
@ -126,6 +127,18 @@ function gen_outbound(flag, node, tag, proxy_table)
detour = node.detour, detour = node.detour,
} }
if version_ge_1_12_0 then
--https://sing-box.sagernet.org/migration/#migrate-outbound-domain-strategy-option-to-domain-resolver
result.domain_strategy = nil
if node.domain_strategy then
local domain_resolver = {
server = "direct",
strategy = node.domain_strategy
}
result.domain_resolver = domain_resolver
end
end
local tls = nil local tls = nil
if node.tls == "1" then if node.tls == "1" then
local alpn = nil local alpn = nil
@ -841,6 +854,7 @@ function gen_config(var)
local direct_dns_tcp_server = var["-direct_dns_tcp_server"] local direct_dns_tcp_server = var["-direct_dns_tcp_server"]
local direct_dns_dot_server = var["-direct_dns_dot_server"] local direct_dns_dot_server = var["-direct_dns_dot_server"]
local direct_dns_query_strategy = var["-direct_dns_query_strategy"] local direct_dns_query_strategy = var["-direct_dns_query_strategy"]
local remote_dns_server = var["-remote_dns_server"]
local remote_dns_port = var["-remote_dns_port"] local remote_dns_port = var["-remote_dns_port"]
local remote_dns_udp_server = var["-remote_dns_udp_server"] local remote_dns_udp_server = var["-remote_dns_udp_server"]
local remote_dns_tcp_server = var["-remote_dns_tcp_server"] local remote_dns_tcp_server = var["-remote_dns_tcp_server"]
@ -1420,10 +1434,12 @@ function gen_config(var)
fakeip = nil, fakeip = nil,
} }
if not version_ge_1_12_0 then --Migrate to new DNS server formats
table.insert(dns.servers, { table.insert(dns.servers, {
tag = "block", tag = "block",
address = "rcode://success", address = "rcode://success",
}) })
end
if dns_socks_address and dns_socks_port then if dns_socks_address and dns_socks_port then
default_outTag = "dns_socks_out" default_outTag = "dns_socks_out"
@ -1444,7 +1460,11 @@ function gen_config(var)
remote_strategy = "ipv6_only" remote_strategy = "ipv6_only"
end end
local remote_server = { local remote_server = {}
local fakedns_tag = "remote_fakeip"
if not version_ge_1_12_0 then --Migrate to new DNS server formats
remote_server = {
tag = "remote", tag = "remote",
address_strategy = "prefer_ipv4", address_strategy = "prefer_ipv4",
strategy = remote_strategy, strategy = remote_strategy,
@ -1470,7 +1490,6 @@ function gen_config(var)
table.insert(dns.servers, remote_server) table.insert(dns.servers, remote_server)
end end
local fakedns_tag = "remote_fakeip"
if remote_dns_fake then if remote_dns_fake then
dns.fakeip = { dns.fakeip = {
enabled = true, enabled = true,
@ -1493,8 +1512,66 @@ function gen_config(var)
path = api.CACHE_PATH .. "/singbox_" .. flag .. ".db" path = api.CACHE_PATH .. "/singbox_" .. flag .. ".db"
} }
end end
else -- Migrate to 1.12 DNS
remote_server = {
tag = "remote",
domain_strategy = remote_strategy,
domain_resolver = "direct",
detour = default_outTag,
}
if remote_dns_udp_server then
local server_port = tonumber(remote_dns_port) or 53
remote_server.type = "udp"
remote_server.server = remote_dns_udp_server
remote_server.server_port = server_port
end
if remote_dns_tcp_server then
local server_port = tonumber(remote_dns_port) or 53
remote_server.type = "tcp"
remote_server.server = remote_dns_server
remote_server.server_port = server_port
end
if remote_dns_doh_url and remote_dns_doh_host then
local server_port = tonumber(remote_dns_port) or 443
remote_server.type = "https"
remote_server.server = remote_dns_doh_host
remote_server.server_port = server_port
end
if remote_server.server then
table.insert(dns.servers, remote_server)
end
if remote_dns_fake then
table.insert(dns.servers, {
tag = fakedns_tag,
type = "fakeip",
inet4_range = "198.18.0.0/15",
inet6_range = "fc00::/18",
})
if not experimental then
experimental = {}
end
experimental.cache_file = {
enabled = true,
store_fakeip = true,
path = api.CACHE_PATH .. "/singbox_" .. flag .. ".db"
}
end
end
local direct_strategy = "prefer_ipv6"
if direct_dns_udp_server or direct_dns_tcp_server or direct_dns_dot_server then if direct_dns_udp_server or direct_dns_tcp_server or direct_dns_dot_server then
if direct_dns_query_strategy == "UseIPv4" then
direct_strategy = "ipv4_only"
elseif direct_dns_query_strategy == "UseIPv6" then
direct_strategy = "ipv6_only"
end
local domain = {} local domain = {}
local nodes_domain_text = sys.exec('uci show passwall | grep ".address=" | cut -d "\'" -f 2 | grep "[a-zA-Z]$" | sort -u') local nodes_domain_text = sys.exec('uci show passwall | grep ".address=" | cut -d "\'" -f 2 | grep "[a-zA-Z]$" | sort -u')
string.gsub(nodes_domain_text, '[^' .. "\r\n" .. ']+', function(w) string.gsub(nodes_domain_text, '[^' .. "\r\n" .. ']+', function(w)
@ -1503,17 +1580,12 @@ function gen_config(var)
if #domain > 0 then if #domain > 0 then
table.insert(dns_domain_rules, 1, { table.insert(dns_domain_rules, 1, {
outboundTag = "direct", outboundTag = "direct",
domain = domain domain = domain,
strategy = version_ge_1_12_0 and direct_strategy or nil
}) })
end end
local direct_strategy = "prefer_ipv6" if not version_ge_1_12_0 then --Migrate to new DNS server formats
if direct_dns_query_strategy == "UseIPv4" then
direct_strategy = "ipv4_only"
elseif direct_dns_query_strategy == "UseIPv6" then
direct_strategy = "ipv6_only"
end
local direct_dns_server, port local direct_dns_server, port
if direct_dns_udp_server then if direct_dns_udp_server then
port = tonumber(direct_dns_port) or 53 port = tonumber(direct_dns_port) or 53
@ -1537,6 +1609,32 @@ function gen_config(var)
strategy = direct_strategy, strategy = direct_strategy,
detour = "direct", detour = "direct",
}) })
else -- Migrate to 1.12 DNS
local direct_dns_server, port, type
if direct_dns_udp_server then
port = tonumber(direct_dns_port) or 53
direct_dns_server = direct_dns_udp_server
type = "udp"
elseif direct_dns_tcp_server then
port = tonumber(direct_dns_port) or 53
direct_dns_server = direct_dns_tcp_server
type = "tcp"
elseif direct_dns_dot_server then
port = tonumber(direct_dns_port) or 853
direct_dns_server = direct_dns_dot_server
type = "tls"
end
table.insert(dns.servers, {
tag = "direct",
type = type,
server = direct_dns_server,
server_port = port,
domain_strategy = direct_strategy,
detour = "direct",
})
end
end end
local default_dns_flag = "remote" local default_dns_flag = "remote"
@ -1561,6 +1659,9 @@ function gen_config(var)
end end
end end
dns.final = default_dns_flag dns.final = default_dns_flag
if version_ge_1_12_0 then -- Migrate to 1.12 DNS
dns.strategy = (default_dns_flag == "direct") and direct_strategy or remote_strategy
end
--按分流顺序DNS --按分流顺序DNS
if dns_domain_rules and #dns_domain_rules > 0 then if dns_domain_rules and #dns_domain_rules > 0 then
@ -1574,15 +1675,24 @@ function gen_config(var)
domain_regex = (value.domain_regex and #value.domain_regex > 0) and value.domain_regex or nil, domain_regex = (value.domain_regex and #value.domain_regex > 0) and value.domain_regex or nil,
rule_set = (value.rule_set and #value.rule_set > 0) and value.rule_set or nil, --适配srs rule_set = (value.rule_set and #value.rule_set > 0) and value.rule_set or nil, --适配srs
disable_cache = false, disable_cache = false,
strategy = (version_ge_1_12_0 and value.outboundTag == "direct") and direct_strategy or nil --Migrate to 1.12 DNS
} }
if version_ge_1_12_0 and value.outboundTag == "block" then --Migrate to 1.12 DNS
dns_rule.action = "predefined"
dns_rule.rcode = "NOERROR"
dns_rule.server = nil
dns_rule.disable_cache = nil
end
if value.outboundTag ~= "block" and value.outboundTag ~= "direct" then if value.outboundTag ~= "block" and value.outboundTag ~= "direct" then
dns_rule.server = "remote" dns_rule.server = "remote"
if value.outboundTag ~= COMMON.default_outbound_tag and remote_server.address then dns_rule.strategy = version_ge_1_12_0 and remote_strategy or nil --Migrate to 1.12 DNS
local remote_dns_server = api.clone(remote_server) dns_rule.client_subnet = (version_ge_1_12_0 and remote_dns_client_ip and remote_dns_client_ip ~= "") and remote_dns_client_ip or nil --Migrate to 1.12 DNS
remote_dns_server.tag = value.outboundTag if value.outboundTag ~= COMMON.default_outbound_tag and (remote_server.address or remote_server.server) then
remote_dns_server.detour = value.outboundTag local remote_shunt_server = api.clone(remote_server)
table.insert(dns.servers, remote_dns_server) remote_shunt_server.tag = value.outboundTag
dns_rule.server = remote_dns_server.tag remote_shunt_server.detour = value.outboundTag
table.insert(dns.servers, remote_shunt_server)
dns_rule.server = remote_shunt_server.tag
end end
if remote_dns_fake then if remote_dns_fake then
local fakedns_dns_rule = api.clone(dns_rule) local fakedns_dns_rule = api.clone(dns_rule)
@ -1638,12 +1748,23 @@ function gen_config(var)
--实验性 --实验性
experimental = experimental, experimental = experimental,
} }
table.insert(outbounds, {
local direct_outbound = {
type = "direct", type = "direct",
tag = "direct", tag = "direct",
routing_mark = 255, routing_mark = 255,
domain_strategy = "prefer_ipv6", }
}) if not version_ge_1_12_0 then --Migrate to 1.12 DNS
direct_outbound.domain_strategy = "prefer_ipv6"
else
local domain_resolver = {
server = "direct",
strategy = "prefer_ipv6"
}
direct_outbound.domain_resolver = domain_resolver
end
table.insert(outbounds,direct_outbound)
table.insert(outbounds, { table.insert(outbounds, {
type = "block", type = "block",
tag = "block" tag = "block"