luci: Adjust FakeDNS logic
This commit is contained in:
parent
9ce7d88ee2
commit
7d1fb1a2ca
@ -281,19 +281,8 @@ dns_mode:value("udp", translatef("Requery DNS By %s", "UDP"))
|
|||||||
o = s:taboption("DNS", ListValue, "v2ray_dns_mode", " ")
|
o = s:taboption("DNS", ListValue, "v2ray_dns_mode", " ")
|
||||||
o:value("tcp", "TCP")
|
o:value("tcp", "TCP")
|
||||||
o:value("doh", "DoH")
|
o:value("doh", "DoH")
|
||||||
o:value("fakedns", "FakeDNS")
|
|
||||||
o:depends("dns_mode", "sing-box")
|
o:depends("dns_mode", "sing-box")
|
||||||
o:depends("dns_mode", "xray")
|
o:depends("dns_mode", "xray")
|
||||||
o.validate = function(self, value, t)
|
|
||||||
if value == "fakedns" then
|
|
||||||
local _dns_mode = dns_mode:formvalue(t)
|
|
||||||
local _tcp_node = tcp_node:formvalue(t)
|
|
||||||
if m:get(_tcp_node, "type"):lower() ~= _dns_mode then
|
|
||||||
return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
|
|
||||||
o = s:taboption("DNS", Value, "socks_server", translate("Socks Server"), translate("Make sure socks service is available on this address."))
|
o = s:taboption("DNS", Value, "socks_server", translate("Socks Server"), translate("Make sure socks service is available on this address."))
|
||||||
for k, v in pairs(socks_table) do o:value(v.id, v.remarks) end
|
for k, v in pairs(socks_table) do o:value(v.id, v.remarks) end
|
||||||
@ -345,13 +334,28 @@ o.datatype = "ipaddr"
|
|||||||
o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"})
|
o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"})
|
||||||
o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"})
|
o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"})
|
||||||
|
|
||||||
|
o = s:taboption("DNS", Flag, "remote_fakedns", "FakeDNS", translate("Use FakeDNS work in the shunt domain that proxy."))
|
||||||
|
o.default = "0"
|
||||||
|
o:depends({dns_mode = "sing-box"})
|
||||||
|
o:depends({dns_mode = "xray"})
|
||||||
|
o.validate = function(self, value, t)
|
||||||
|
if value and value == "1" then
|
||||||
|
local _dns_mode = dns_mode:formvalue(t)
|
||||||
|
local _tcp_node = tcp_node:formvalue(t)
|
||||||
|
if _dns_mode and _tcp_node and _tcp_node ~= "nil" then
|
||||||
|
if m:get(_tcp_node, "type"):lower() ~= _dns_mode then
|
||||||
|
return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
|
||||||
o = s:taboption("DNS", Flag, "dns_cache", translate("Cache Resolved"))
|
o = s:taboption("DNS", Flag, "dns_cache", translate("Cache Resolved"))
|
||||||
o.default = "1"
|
o.default = "1"
|
||||||
o:depends({dns_mode = "dns2socks"})
|
o:depends({dns_mode = "dns2socks"})
|
||||||
o:depends({dns_mode = "sing-box", v2ray_dns_mode = "tcp"})
|
o:depends({dns_mode = "sing-box", remote_fakedns = false})
|
||||||
o:depends({dns_mode = "sing-box", v2ray_dns_mode = "doh"})
|
o:depends({dns_mode = "xray", remote_fakedns = false})
|
||||||
o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"})
|
|
||||||
o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"})
|
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
|
|
||||||
if api.is_finded("chinadns-ng") then
|
if api.is_finded("chinadns-ng") then
|
||||||
@ -359,10 +363,8 @@ if api.is_finded("chinadns-ng") then
|
|||||||
o.default = "0"
|
o.default = "0"
|
||||||
o:depends({dns_mode = "dns2socks"})
|
o:depends({dns_mode = "dns2socks"})
|
||||||
o:depends({dns_mode = "dns2tcp"})
|
o:depends({dns_mode = "dns2tcp"})
|
||||||
o:depends({dns_mode = "sing-box", v2ray_dns_mode = "tcp"})
|
o:depends({dns_mode = "sing-box", remote_fakedns = false})
|
||||||
o:depends({dns_mode = "sing-box", v2ray_dns_mode = "doh"})
|
o:depends({dns_mode = "xray", remote_fakedns = false})
|
||||||
o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"})
|
|
||||||
o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"})
|
|
||||||
o:depends({dns_mode = "udp"})
|
o:depends({dns_mode = "udp"})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1101,7 +1101,6 @@ function gen_config(var)
|
|||||||
fakeip = nil,
|
fakeip = nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
if true then
|
|
||||||
local dns_tag = "remote"
|
local dns_tag = "remote"
|
||||||
|
|
||||||
local domain = {}
|
local domain = {}
|
||||||
@ -1147,8 +1146,6 @@ function gen_config(var)
|
|||||||
detour = dns_outTag,
|
detour = dns_outTag,
|
||||||
}
|
}
|
||||||
|
|
||||||
local rule_server = dns_tag
|
|
||||||
|
|
||||||
if remote_dns_udp_server then
|
if remote_dns_udp_server then
|
||||||
local server_port = tonumber(remote_dns_port) or 53
|
local server_port = tonumber(remote_dns_port) or 53
|
||||||
server.address = "udp://" .. remote_dns_udp_server .. ":" .. server_port
|
server.address = "udp://" .. remote_dns_udp_server .. ":" .. server_port
|
||||||
@ -1166,6 +1163,7 @@ function gen_config(var)
|
|||||||
table.insert(dns.servers, server)
|
table.insert(dns.servers, server)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local fakedns_tag = dns_tag .. "_fakeip"
|
||||||
if remote_dns_fake then
|
if remote_dns_fake then
|
||||||
dns.fakeip = {
|
dns.fakeip = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
@ -1173,20 +1171,12 @@ function gen_config(var)
|
|||||||
inet6_range = "fc00::/18",
|
inet6_range = "fc00::/18",
|
||||||
}
|
}
|
||||||
|
|
||||||
local fakedns_tag = dns_tag .. "_fakeip"
|
|
||||||
|
|
||||||
if not server.address then
|
|
||||||
fakedns_tag = dns_tag
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(dns.servers, {
|
table.insert(dns.servers, {
|
||||||
tag = fakedns_tag,
|
tag = fakedns_tag,
|
||||||
address = "fakeip",
|
address = "fakeip",
|
||||||
strategy = remote_strategy,
|
strategy = remote_strategy,
|
||||||
})
|
})
|
||||||
|
|
||||||
rule_server = fakedns_tag
|
|
||||||
|
|
||||||
if tags and tags:find("with_clash_api") then
|
if tags and tags:find("with_clash_api") then
|
||||||
if not experimental then
|
if not experimental then
|
||||||
experimental = {}
|
experimental = {}
|
||||||
@ -1200,9 +1190,14 @@ function gen_config(var)
|
|||||||
|
|
||||||
if remote_rule.domain or remote_rule.domain_suffix or remote_rule.domain_keyword or remote_rule.domain_regex or remote_rule.geosite then
|
if remote_rule.domain or remote_rule.domain_suffix or remote_rule.domain_keyword or remote_rule.domain_regex or remote_rule.geosite then
|
||||||
local rule = api.clone(remote_rule)
|
local rule = api.clone(remote_rule)
|
||||||
rule.server = rule_server
|
rule.server = dns_tag
|
||||||
table.insert(dns.rules, rule)
|
if remote_dns_fake then
|
||||||
|
rule.query_type = {
|
||||||
|
"A", "AAAA"
|
||||||
|
}
|
||||||
|
rule.server = fakedns_tag
|
||||||
end
|
end
|
||||||
|
table.insert(dns.rules, rule)
|
||||||
end
|
end
|
||||||
|
|
||||||
if direct_dns_udp_server then
|
if direct_dns_udp_server then
|
||||||
@ -1267,6 +1262,26 @@ function gen_config(var)
|
|||||||
address = "rcode://refused",
|
address = "rcode://refused",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local default_dns_flag = "remote"
|
||||||
|
if node_id and (tcp_redir_port or udp_redir_port) then
|
||||||
|
local node = uci:get_all(appname, node_id)
|
||||||
|
if node.protocol == "_shunt" then
|
||||||
|
if node.default_node == "_direct" then
|
||||||
|
default_dns_flag = "direct"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else default_dns_flag = "direct"
|
||||||
|
end
|
||||||
|
if default_dns_flag == "remote" then
|
||||||
|
if remote_dns_fake then
|
||||||
|
table.insert(dns.rules, {
|
||||||
|
query_type = { "A", "AAAA" },
|
||||||
|
server = fakedns_tag
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
dns.final = default_dns_flag
|
||||||
|
|
||||||
table.insert(inbounds, {
|
table.insert(inbounds, {
|
||||||
type = "direct",
|
type = "direct",
|
||||||
tag = "dns-in",
|
tag = "dns-in",
|
||||||
@ -1285,18 +1300,6 @@ function gen_config(var)
|
|||||||
},
|
},
|
||||||
outbound = "dns-out"
|
outbound = "dns-out"
|
||||||
})
|
})
|
||||||
|
|
||||||
local default_dns_flag = "remote"
|
|
||||||
if node_id and (tcp_redir_port or udp_redir_port) then
|
|
||||||
local node = uci:get_all(appname, node_id)
|
|
||||||
if node.protocol == "_shunt" then
|
|
||||||
if node.default_node == "_direct" then
|
|
||||||
default_dns_flag = "direct"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else default_dns_flag = "direct"
|
|
||||||
end
|
|
||||||
dns.final = default_dns_flag
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if inbounds or outbounds then
|
if inbounds or outbounds then
|
||||||
|
@ -999,7 +999,6 @@ function gen_config(var)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if remote_dns_fake then
|
if remote_dns_fake then
|
||||||
remote_dns_server = "1.1.1.1"
|
|
||||||
fakedns = {}
|
fakedns = {}
|
||||||
fakedns[#fakedns + 1] = {
|
fakedns[#fakedns + 1] = {
|
||||||
ipPool = "198.18.0.0/16",
|
ipPool = "198.18.0.0/16",
|
||||||
@ -1014,6 +1013,11 @@ function gen_config(var)
|
|||||||
_remote_dns.address = "fakedns"
|
_remote_dns.address = "fakedns"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if not remote_dns_server then
|
||||||
|
remote_dns_server = "1.1.1.1"
|
||||||
|
remote_dns_port = 53
|
||||||
|
end
|
||||||
|
|
||||||
table.insert(dns.servers, _remote_dns)
|
table.insert(dns.servers, _remote_dns)
|
||||||
|
|
||||||
if dns_listen_port then
|
if dns_listen_port then
|
||||||
|
@ -327,7 +327,7 @@ run_ipt2socks() {
|
|||||||
|
|
||||||
run_singbox() {
|
run_singbox() {
|
||||||
local flag type node tcp_redir_port udp_redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
local flag type node tcp_redir_port udp_redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
||||||
local dns_listen_port direct_dns_port direct_dns_udp_server remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_query_strategy dns_cache dns_socks_address dns_socks_port
|
local dns_listen_port direct_dns_port direct_dns_udp_server remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_fakedns remote_dns_query_strategy dns_cache dns_socks_address dns_socks_port
|
||||||
local loglevel log_file config_file
|
local loglevel log_file config_file
|
||||||
local _extra_param=""
|
local _extra_param=""
|
||||||
eval_set_val $@
|
eval_set_val $@
|
||||||
@ -395,10 +395,8 @@ run_singbox() {
|
|||||||
[ -n "$_doh_bootstrap" ] && _extra_param="${_extra_param} -remote_dns_server ${_doh_bootstrap}"
|
[ -n "$_doh_bootstrap" ] && _extra_param="${_extra_param} -remote_dns_server ${_doh_bootstrap}"
|
||||||
_extra_param="${_extra_param} -remote_dns_port ${_doh_port} -remote_dns_doh_url ${_doh_url} -remote_dns_doh_host ${_doh_host}"
|
_extra_param="${_extra_param} -remote_dns_port ${_doh_port} -remote_dns_doh_url ${_doh_url} -remote_dns_doh_host ${_doh_host}"
|
||||||
;;
|
;;
|
||||||
fakedns)
|
|
||||||
_extra_param="${_extra_param} -remote_dns_fake 1"
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
[ "$remote_fakedns" = "1" ] && _extra_param="${_extra_param} -remote_dns_fake 1"
|
||||||
_extra_param="${_extra_param} -tcp_proxy_way $tcp_proxy_way"
|
_extra_param="${_extra_param} -tcp_proxy_way $tcp_proxy_way"
|
||||||
lua $UTIL_SINGBOX gen_config ${_extra_param} > $config_file
|
lua $UTIL_SINGBOX gen_config ${_extra_param} > $config_file
|
||||||
ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" $log_file run -c "$config_file"
|
ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" $log_file run -c "$config_file"
|
||||||
@ -406,7 +404,7 @@ run_singbox() {
|
|||||||
|
|
||||||
run_xray() {
|
run_xray() {
|
||||||
local flag type node tcp_redir_port udp_redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
local flag type node tcp_redir_port udp_redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
||||||
local dns_listen_port remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh dns_client_ip dns_query_strategy dns_cache dns_socks_address dns_socks_port
|
local dns_listen_port remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_fakedns dns_client_ip dns_query_strategy dns_cache dns_socks_address dns_socks_port
|
||||||
local loglevel log_file config_file
|
local loglevel log_file config_file
|
||||||
local _extra_param=""
|
local _extra_param=""
|
||||||
eval_set_val $@
|
eval_set_val $@
|
||||||
@ -463,10 +461,8 @@ run_xray() {
|
|||||||
[ -n "$_doh_bootstrap" ] && _extra_param="${_extra_param} -remote_dns_server ${_doh_bootstrap}"
|
[ -n "$_doh_bootstrap" ] && _extra_param="${_extra_param} -remote_dns_server ${_doh_bootstrap}"
|
||||||
_extra_param="${_extra_param} -remote_dns_port ${_doh_port} -remote_dns_doh_url ${_doh_url} -remote_dns_doh_host ${_doh_host}"
|
_extra_param="${_extra_param} -remote_dns_port ${_doh_port} -remote_dns_doh_url ${_doh_url} -remote_dns_doh_host ${_doh_host}"
|
||||||
;;
|
;;
|
||||||
fakedns)
|
|
||||||
_extra_param="${_extra_param} -remote_dns_fake 1"
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
[ "$remote_fakedns" = "1" ] && _extra_param="${_extra_param} -remote_dns_fake 1"
|
||||||
_extra_param="${_extra_param} -tcp_proxy_way $tcp_proxy_way"
|
_extra_param="${_extra_param} -tcp_proxy_way $tcp_proxy_way"
|
||||||
_extra_param="${_extra_param} -loglevel $loglevel"
|
_extra_param="${_extra_param} -loglevel $loglevel"
|
||||||
lua $UTIL_XRAY gen_config ${_extra_param} > $config_file
|
lua $UTIL_XRAY gen_config ${_extra_param} > $config_file
|
||||||
@ -848,21 +844,25 @@ run_redir() {
|
|||||||
local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp)
|
local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp)
|
||||||
_args="${_args} remote_dns_protocol=${v2ray_dns_mode}"
|
_args="${_args} remote_dns_protocol=${v2ray_dns_mode}"
|
||||||
_args="${_args} dns_listen_port=${dns_listen_port}"
|
_args="${_args} dns_listen_port=${dns_listen_port}"
|
||||||
|
local logout=""
|
||||||
case "$v2ray_dns_mode" in
|
case "$v2ray_dns_mode" in
|
||||||
tcp)
|
tcp)
|
||||||
_args="${_args} remote_dns_tcp_server=${REMOTE_DNS}"
|
_args="${_args} remote_dns_tcp_server=${REMOTE_DNS}"
|
||||||
echolog " - 域名解析 DNS Over TCP..."
|
logout=" - 域名解析 DNS Over TCP"
|
||||||
;;
|
;;
|
||||||
doh)
|
doh)
|
||||||
remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query")
|
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 " - 域名解析 DNS Over HTTPS..."
|
logout=" - 域名解析 DNS Over HTTPS"
|
||||||
;;
|
|
||||||
fakedns)
|
|
||||||
fakedns=1
|
|
||||||
echolog " - 域名解析 Fake DNS..."
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
local remote_fakedns=$(config_t_get global remote_fakedns 0)
|
||||||
|
[ "${remote_fakedns}" = "1" ] && {
|
||||||
|
fakedns=1
|
||||||
|
_args="${_args} remote_fakedns=1"
|
||||||
|
logout="${logout} + FakeDNS"
|
||||||
|
}
|
||||||
|
echolog ${logout}
|
||||||
}
|
}
|
||||||
run_singbox flag=$_flag node=$node tcp_redir_port=$local_port config_file=$config_file log_file=$log_file ${_args}
|
run_singbox flag=$_flag node=$node tcp_redir_port=$local_port config_file=$config_file log_file=$log_file ${_args}
|
||||||
;;
|
;;
|
||||||
@ -896,21 +896,25 @@ run_redir() {
|
|||||||
local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp)
|
local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp)
|
||||||
_args="${_args} remote_dns_protocol=${v2ray_dns_mode}"
|
_args="${_args} remote_dns_protocol=${v2ray_dns_mode}"
|
||||||
_args="${_args} dns_listen_port=${dns_listen_port}"
|
_args="${_args} dns_listen_port=${dns_listen_port}"
|
||||||
|
local logout=""
|
||||||
case "$v2ray_dns_mode" in
|
case "$v2ray_dns_mode" in
|
||||||
tcp)
|
tcp)
|
||||||
_args="${_args} remote_dns_tcp_server=${REMOTE_DNS}"
|
_args="${_args} remote_dns_tcp_server=${REMOTE_DNS}"
|
||||||
echolog " - 域名解析 DNS Over TCP..."
|
logout=" - 域名解析 DNS Over TCP"
|
||||||
;;
|
;;
|
||||||
doh)
|
doh)
|
||||||
remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query")
|
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 " - 域名解析 DNS Over HTTPS..."
|
logout=" - 域名解析 DNS Over HTTPS"
|
||||||
;;
|
|
||||||
fakedns)
|
|
||||||
fakedns=1
|
|
||||||
echolog " - 域名解析 Fake DNS..."
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
local remote_fakedns=$(config_t_get global remote_fakedns 0)
|
||||||
|
[ "${remote_fakedns}" = "1" ] && {
|
||||||
|
fakedns=1
|
||||||
|
_args="${_args} remote_fakedns=1"
|
||||||
|
logout="${logout} + FakeDNS"
|
||||||
|
}
|
||||||
|
echolog ${logout}
|
||||||
}
|
}
|
||||||
run_xray flag=$_flag node=$node tcp_redir_port=$local_port config_file=$config_file log_file=$log_file ${_args}
|
run_xray flag=$_flag node=$node tcp_redir_port=$local_port config_file=$config_file log_file=$log_file ${_args}
|
||||||
;;
|
;;
|
||||||
|
Loading…
Reference in New Issue
Block a user