luci-app-passwall2: sync upstream

last commit: 3c2d195e54
This commit is contained in:
gitea-action 2025-04-02 19:30:22 +08:00
parent c8dcd434f1
commit 07736aecd9

View File

@ -1163,9 +1163,14 @@ function gen_config(var)
end end
if dns_listen_port then if dns_listen_port then
local rules = {} local direct_dns_tag = "dns-in-direct"
local remote_dns_tag = "dns-in-remote"
local remote_fakedns_tag = "dns-in-remote-fakedns"
local default_dns_tag = "dns-in-default"
local dns_servers = {}
local _remote_dns_proto = "tcp" local _remote_dns_proto = "tcp"
if not routing then if not routing then
routing = { routing = {
domainStrategy = "IPOnDemand", domainStrategy = "IPOnDemand",
@ -1210,7 +1215,7 @@ function gen_config(var)
local _remote_dns_ip = nil local _remote_dns_ip = nil
local _remote_dns = { local _remote_dns = {
tag = "dns-in-remote", tag = remote_dns_tag,
queryStrategy = (remote_dns_query_strategy and remote_dns_query_strategy ~= "") and remote_dns_query_strategy or "UseIPv4" queryStrategy = (remote_dns_query_strategy and remote_dns_query_strategy ~= "") and remote_dns_query_strategy or "UseIPv4"
} }
@ -1238,17 +1243,10 @@ function gen_config(var)
end end
if _remote_dns.address then if _remote_dns.address then
table.insert(dns.servers, _remote_dns) table.insert(dns_servers, {
if remote_dns_detour == "direct" then outboundTag = remote_dns_detour == "direct" and "direct" or nil,
table.insert(routing.rules, 1, { server = _remote_dns
ip = { })
_remote_dns_ip
},
port = _remote_dns.port,
network = _remote_dns_proto,
outboundTag = "direct"
})
end
end end
local _remote_fakedns = nil local _remote_fakedns = nil
@ -1271,10 +1269,12 @@ function gen_config(var)
table.insert(fakedns, fakedns6) table.insert(fakedns, fakedns6)
end end
_remote_fakedns = { _remote_fakedns = {
tag = "dns-in-remote_fakedns", tag = remote_fakedns_tag,
address = "fakedns", address = "fakedns",
} }
table.insert(dns.servers, _remote_fakedns) table.insert(dns_servers, {
server = _remote_fakedns
})
end end
local _direct_dns = nil local _direct_dns = nil
@ -1286,27 +1286,25 @@ function gen_config(var)
end) end)
if #domain > 0 then if #domain > 0 then
table.insert(dns_domain_rules, 1, { table.insert(dns_domain_rules, 1, {
shunt_rule_name = "logic-vpslist",
outboundTag = "direct", outboundTag = "direct",
domain = domain domain = domain
}) })
end end
_direct_dns = { _direct_dns = {
tag = "dns-in-direct", tag = direct_dns_tag,
address = direct_dns_udp_server, address = direct_dns_udp_server,
port = tonumber(direct_dns_udp_port) or 53, port = tonumber(direct_dns_udp_port) or 53,
queryStrategy = (direct_dns_query_strategy and direct_dns_query_strategy ~= "") and direct_dns_query_strategy or "UseIP", queryStrategy = (direct_dns_query_strategy and direct_dns_query_strategy ~= "") and direct_dns_query_strategy or "UseIP",
} }
table.insert(routing.rules, 1, {
ip = {
direct_dns_udp_server
},
port = tonumber(direct_dns_udp_port) or 53,
network = "udp",
outboundTag = "direct"
})
table.insert(dns.servers, _direct_dns) if _direct_dns.address then
table.insert(dns_servers, {
outboundTag = "direct",
server = _direct_dns
})
end
end end
if dns_listen_port then if dns_listen_port then
@ -1357,33 +1355,28 @@ function gen_config(var)
}) })
end end
local default_dns_tag = "dns-in-remote" local default_dns_tag_name = remote_dns_tag
if (not COMMON.default_balancer_tag and not COMMON.default_outbound_tag) or COMMON.default_outbound_tag == "direct" then if (not COMMON.default_balancer_tag and not COMMON.default_outbound_tag) or COMMON.default_outbound_tag == "direct" then
default_dns_tag = "dns-in-direct" default_dns_tag_name = direct_dns_tag
end end
if dns.servers and #dns.servers > 0 then if dns_servers and #dns_servers > 0 then
local dns_servers = nil -- Default DNS logic
for index, value in ipairs(dns.servers) do local default_dns_server = nil
if not dns_servers and value.tag == default_dns_tag then for index, value in ipairs(dns_servers) do
if value.tag == "dns-in-remote" and remote_dns_fake then if not default_dns_server and value.server.tag == default_dns_tag_name then
value.tag = "dns-in-default" default_dns_server = api.clone(value)
break default_dns_server.server.tag = default_dns_tag
if value.server.tag == remote_dns_tag then
default_dns_server.outboundTag = COMMON.default_outbound_tag
default_dns_server.balancerTag = COMMON.default_balancer_tag
end end
dns_servers = { table.insert(dns_servers, 1, default_dns_server)
tag = "dns-in-default",
address = value.address,
port = value.port,
queryStrategy = value.queryStrategy
}
break break
end end
end end
if dns_servers then
table.insert(dns.servers, 1, dns_servers)
end
--按分流顺序DNS -- Shunt rule DNS logic
if dns_domain_rules and #dns_domain_rules > 0 then if dns_domain_rules and #dns_domain_rules > 0 then
for index, value in ipairs(dns_domain_rules) do for index, value in ipairs(dns_domain_rules) do
if value.domain and (value.outboundTag or value.balancerTag) then if value.domain and (value.outboundTag or value.balancerTag) then
@ -1403,46 +1396,55 @@ function gen_config(var)
end end
if dns_server then if dns_server then
table.insert(dns.servers, dns_server) table.insert(dns_servers, {
table.insert(routing.rules, { outboundTag = value.outboundTag,
inboundTag = { balancerTag = value.balancerTag,
dns_server.tag server = dns_server
},
outboundTag = value.outboundTag or nil,
balancerTag = value.balancerTag or nil
}) })
end end
end end
end end
end end
for i = #dns.servers, 1, -1 do for i = #dns_servers, 1, -1 do
local v = dns.servers[i] local value = dns_servers[i]
if v.tag ~= "dns-in-default" then if value.server.tag ~= direct_dns_tag and value.server.tag ~= remote_dns_tag then
if not v.domains or #v.domains == 0 then -- DNS rule must be at the front, prevents being matched by rules.
table.remove(dns.servers, i) if (value.outboundTag or value.balancerTag) and value.server.address ~= "fakedns" then
table.insert(routing.rules, 1, {
inboundTag = {
value.server.tag
},
outboundTag = value.outboundTag,
balancerTag = value.balancerTag
})
end
if (value.server.domains and #value.server.domains > 0) or value.server.tag == default_dns_tag then
-- Only keep default DNS server or has domains DNS server.
table.insert(dns.servers, 1, value.server)
end end
end end
end end
end end
local default_rule_index = #routing.rules > 0 and #routing.rules or 1 local default_rule_index = nil
for index, value in ipairs(routing.rules) do for index, value in ipairs(routing.rules) do
if value.ruleTag == "default" then if value.ruleTag == "default" then
default_rule_index = index default_rule_index = index
break break
end end
end end
for index, value in ipairs(rules) do if default_rule_index then
local t = rules[#rules + 1 - index] local default_rule = api.clone(routing.rules[default_rule_index])
table.insert(routing.rules, default_rule_index, t) table.remove(routing.rules, default_rule_index)
table.insert(routing.rules, default_rule)
end end
local dns_hosts_len = 0 local dns_hosts_len = 0
for key, value in pairs(dns.hosts) do for key, value in pairs(dns.hosts) do
dns_hosts_len = dns_hosts_len + 1 dns_hosts_len = dns_hosts_len + 1
end end
if dns_hosts_len == 0 then if dns_hosts_len == 0 then
dns.hosts = nil dns.hosts = nil
end end