parent
f303b07d42
commit
d96a7aa06e
@ -754,6 +754,8 @@ function gen_config(var)
|
|||||||
local dns_listen_port = var["-dns_listen_port"]
|
local dns_listen_port = var["-dns_listen_port"]
|
||||||
local direct_dns_port = var["-direct_dns_port"]
|
local direct_dns_port = var["-direct_dns_port"]
|
||||||
local direct_dns_udp_server = var["-direct_dns_udp_server"]
|
local direct_dns_udp_server = var["-direct_dns_udp_server"]
|
||||||
|
local direct_dns_tcp_server = var["-direct_dns_tcp_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_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"]
|
||||||
@ -1316,7 +1318,7 @@ function gen_config(var)
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
if direct_dns_udp_server then
|
if direct_dns_udp_server or direct_dns_tcp_server or direct_dns_dot_server then
|
||||||
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)
|
||||||
@ -1336,11 +1338,25 @@ function gen_config(var)
|
|||||||
direct_strategy = "ipv6_only"
|
direct_strategy = "ipv6_only"
|
||||||
end
|
end
|
||||||
|
|
||||||
local port = tonumber(direct_dns_port) or 53
|
local direct_dns_server, port
|
||||||
|
if direct_dns_udp_server then
|
||||||
|
port = tonumber(direct_dns_port) or 53
|
||||||
|
direct_dns_server = "udp://" .. direct_dns_udp_server .. ":" .. port
|
||||||
|
elseif direct_dns_tcp_server then
|
||||||
|
port = tonumber(direct_dns_port) or 53
|
||||||
|
direct_dns_server = "tcp://" .. direct_dns_tcp_server .. ":" .. port
|
||||||
|
elseif direct_dns_dot_server then
|
||||||
|
port = tonumber(direct_dns_port) or 853
|
||||||
|
if direct_dns_dot_server:find(":") == nil then
|
||||||
|
direct_dns_server = "tls://" .. direct_dns_dot_server .. ":" .. port
|
||||||
|
else
|
||||||
|
direct_dns_server = "tls://[" .. direct_dns_dot_server .. "]:" .. port
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
table.insert(dns.servers, {
|
table.insert(dns.servers, {
|
||||||
tag = "direct",
|
tag = "direct",
|
||||||
address = "udp://" .. direct_dns_udp_server .. ":" .. port,
|
address = direct_dns_server,
|
||||||
address_strategy = "prefer_ipv6",
|
address_strategy = "prefer_ipv6",
|
||||||
strategy = direct_strategy,
|
strategy = direct_strategy,
|
||||||
detour = "direct",
|
detour = "direct",
|
||||||
|
@ -354,7 +354,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 direct_dns_tcp_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 dns_listen_port direct_dns_port direct_dns_udp_server direct_dns_tcp_server direct_dns_dot_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 server_host server_port
|
local loglevel log_file config_file server_host server_port
|
||||||
local _extra_param=""
|
local _extra_param=""
|
||||||
eval_set_val $@
|
eval_set_val $@
|
||||||
@ -395,17 +395,21 @@ run_singbox() {
|
|||||||
[ -n "$dns_listen_port" ] && _extra_param="${_extra_param} -dns_listen_port ${dns_listen_port}"
|
[ -n "$dns_listen_port" ] && _extra_param="${_extra_param} -dns_listen_port ${dns_listen_port}"
|
||||||
[ -n "$dns_cache" ] && _extra_param="${_extra_param} -dns_cache ${dns_cache}"
|
[ -n "$dns_cache" ] && _extra_param="${_extra_param} -dns_cache ${dns_cache}"
|
||||||
|
|
||||||
[ -n "$direct_dns_udp_server" ] && direct_dns_port=$(echo ${direct_dns_udp_server} | awk -F '#' '{print $2}')
|
if [ -n "$direct_dns_udp_server" ]; then
|
||||||
[ -n "$direct_dns_tcp_server" ] && direct_dns_port=$(echo ${direct_dns_tcp_server} | awk -F '#' '{print $2}')
|
direct_dns_port=$(echo ${direct_dns_udp_server} | awk -F '#' '{print $2}')
|
||||||
[ -z "$direct_dns_udp_server" ] && [ -z "$direct_dns_tcp_server" ] && {
|
_extra_param="${_extra_param} -direct_dns_udp_server $(echo ${direct_dns_udp_server} | awk -F '#' '{print $1}')"
|
||||||
|
elif [ -n "$direct_dns_tcp_server" ]; then
|
||||||
|
direct_dns_port=$(echo ${direct_dns_tcp_server} | awk -F '#' '{print $2}')
|
||||||
|
_extra_param="${_extra_param} -direct_dns_tcp_server $(echo ${direct_dns_tcp_server} | awk -F '#' '{print $1}')"
|
||||||
|
elif [ -n "$direct_dns_dot_server" ]; then
|
||||||
|
direct_dns_port=$(echo ${direct_dns_dot_server} | awk -F '#' '{print $2}')
|
||||||
|
_extra_param="${_extra_param} -direct_dns_dot_server $(echo ${direct_dns_dot_server} | awk -F '#' '{print $1}')"
|
||||||
|
else
|
||||||
local local_dns=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n1) | tr " " ",")
|
local local_dns=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n1) | tr " " ",")
|
||||||
direct_dns_udp_server=$(echo ${local_dns} | awk -F '#' '{print $1}')
|
_extra_param="${_extra_param} -direct_dns_udp_server $(echo ${local_dns} | awk -F '#' '{print $1}')"
|
||||||
direct_dns_port=$(echo ${local_dns} | awk -F '#' '{print $2}')
|
direct_dns_port=$(echo ${local_dns} | awk -F '#' '{print $2}')
|
||||||
}
|
fi
|
||||||
[ -z "$direct_dns_port" ] && direct_dns_port=53
|
_extra_param="${_extra_param} -direct_dns_port ${direct_dns_port:-53}"
|
||||||
[ -n "$direct_dns_udp_server" ] && _extra_param="${_extra_param} -direct_dns_udp_server ${direct_dns_udp_server}"
|
|
||||||
[ -n "$direct_dns_tcp_server" ] && _extra_param="${_extra_param} -direct_dns_tcp_server ${direct_dns_tcp_server}"
|
|
||||||
[ -n "$direct_dns_port" ] && _extra_param="${_extra_param} -direct_dns_port ${direct_dns_port}"
|
|
||||||
_extra_param="${_extra_param} -direct_dns_query_strategy UseIP"
|
_extra_param="${_extra_param} -direct_dns_query_strategy UseIP"
|
||||||
|
|
||||||
[ -n "$remote_dns_query_strategy" ] && _extra_param="${_extra_param} -remote_dns_query_strategy ${remote_dns_query_strategy}"
|
[ -n "$remote_dns_query_strategy" ] && _extra_param="${_extra_param} -remote_dns_query_strategy ${remote_dns_query_strategy}"
|
||||||
@ -944,8 +948,22 @@ run_redir() {
|
|||||||
[ "${DNS_CACHE}" == "0" ] && _args="${_args} dns_cache=0"
|
[ "${DNS_CACHE}" == "0" ] && _args="${_args} dns_cache=0"
|
||||||
resolve_dns_port=${dns_listen_port}
|
resolve_dns_port=${dns_listen_port}
|
||||||
_args="${_args} dns_listen_port=${resolve_dns_port}"
|
_args="${_args} dns_listen_port=${resolve_dns_port}"
|
||||||
local local_dns=$(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n1)
|
|
||||||
_args="${_args} direct_dns_udp_server=${local_dns}"
|
case "$(config_t_get global direct_dns_mode "auto")" in
|
||||||
|
udp)
|
||||||
|
_args="${_args} direct_dns_udp_server=$(config_t_get global direct_dns_udp 223.5.5.5 | sed 's/:/#/g')
|
||||||
|
;;
|
||||||
|
tcp)
|
||||||
|
_args="${_args} direct_dns_tcp_server=$(config_t_get global direct_dns_tcp 223.5.5.5 | sed 's/:/#/g')
|
||||||
|
;;
|
||||||
|
dot)
|
||||||
|
local tmp_dot_dns=$(config_t_get global direct_dns_dot "tls://dot.pub@1.12.12.12")
|
||||||
|
local tmp_dot_ip=$(echo "$tmp_dot_dns" | sed -n 's/.*:\/\/\([^@#]*@\)*\([^@#]*\).*/\2/p')
|
||||||
|
local tmp_dot_port=$(echo "$tmp_dot_dns" | sed -n 's/.*#\([0-9]\+\).*/\1/p')
|
||||||
|
_args="${_args} direct_dns_dot_server=$tmp_dot_ip#${tmp_dot_port:-853}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
_args="${_args} remote_dns_protocol=${v2ray_dns_mode}"
|
_args="${_args} remote_dns_protocol=${v2ray_dns_mode}"
|
||||||
case "$v2ray_dns_mode" in
|
case "$v2ray_dns_mode" in
|
||||||
tcp)
|
tcp)
|
||||||
@ -1339,17 +1357,20 @@ start_dns() {
|
|||||||
echolog "DNS域名解析:"
|
echolog "DNS域名解析:"
|
||||||
|
|
||||||
local china_ng_local_dns=${LOCAL_DNS}
|
local china_ng_local_dns=${LOCAL_DNS}
|
||||||
|
local sing_box_local_dns=
|
||||||
local direct_dns_mode=$(config_t_get global direct_dns_mode "auto")
|
local direct_dns_mode=$(config_t_get global direct_dns_mode "auto")
|
||||||
case "$direct_dns_mode" in
|
case "$direct_dns_mode" in
|
||||||
udp)
|
udp)
|
||||||
LOCAL_DNS=$(config_t_get global direct_dns_udp 223.5.5.5 | sed 's/:/#/g')
|
LOCAL_DNS=$(config_t_get global direct_dns_udp 223.5.5.5 | sed 's/:/#/g')
|
||||||
china_ng_local_dns=${LOCAL_DNS}
|
china_ng_local_dns=${LOCAL_DNS}
|
||||||
|
sing_box_local_dns="direct_dns_udp_server=${LOCAL_DNS}"
|
||||||
;;
|
;;
|
||||||
tcp)
|
tcp)
|
||||||
LOCAL_DNS="127.0.0.1#${dns_listen_port}"
|
LOCAL_DNS="127.0.0.1#${dns_listen_port}"
|
||||||
dns_listen_port=$(expr $dns_listen_port + 1)
|
dns_listen_port=$(expr $dns_listen_port + 1)
|
||||||
local DIRECT_DNS=$(config_t_get global direct_dns_tcp 223.5.5.5 | sed 's/:/#/g')
|
local DIRECT_DNS=$(config_t_get global direct_dns_tcp 223.5.5.5 | sed 's/:/#/g')
|
||||||
china_ng_local_dns="tcp://${DIRECT_DNS}"
|
china_ng_local_dns="tcp://${DIRECT_DNS}"
|
||||||
|
sing_box_local_dns="direct_dns_tcp_server=${DIRECT_DNS}"
|
||||||
ln_run "$(first_type dns2tcp)" dns2tcp "/dev/null" -L "${LOCAL_DNS}" -R "$(get_first_dns DIRECT_DNS 53)" -v
|
ln_run "$(first_type dns2tcp)" dns2tcp "/dev/null" -L "${LOCAL_DNS}" -R "$(get_first_dns DIRECT_DNS 53)" -v
|
||||||
echolog " - dns2tcp(${LOCAL_DNS}) -> tcp://$(get_first_dns DIRECT_DNS 53 | sed 's/#/:/g')"
|
echolog " - dns2tcp(${LOCAL_DNS}) -> tcp://$(get_first_dns DIRECT_DNS 53 | sed 's/#/:/g')"
|
||||||
echolog " * 请确保上游直连 DNS 支持 TCP 查询。"
|
echolog " * 请确保上游直连 DNS 支持 TCP 查询。"
|
||||||
@ -1364,6 +1385,10 @@ start_dns() {
|
|||||||
ln_run "$(first_type chinadns-ng)" chinadns-ng "/dev/null" -b 127.0.0.1 -l ${cdns_listen_port} -c ${DIRECT_DNS} -d chn
|
ln_run "$(first_type chinadns-ng)" chinadns-ng "/dev/null" -b 127.0.0.1 -l ${cdns_listen_port} -c ${DIRECT_DNS} -d chn
|
||||||
echolog " - ChinaDNS-NG(${LOCAL_DNS}) -> ${DIRECT_DNS}"
|
echolog " - ChinaDNS-NG(${LOCAL_DNS}) -> ${DIRECT_DNS}"
|
||||||
echolog " * 请确保上游直连 DNS 支持 DoT 查询。"
|
echolog " * 请确保上游直连 DNS 支持 DoT 查询。"
|
||||||
|
|
||||||
|
local tmp_dot_ip=$(echo "$DIRECT_DNS" | sed -n 's/.*:\/\/\([^@#]*@\)*\([^@#]*\).*/\2/p')
|
||||||
|
local tmp_dot_port=$(echo "$DIRECT_DNS" | sed -n 's/.*#\([0-9]\+\).*/\1/p')
|
||||||
|
sing_box_local_dns="direct_dns_dot_server=$tmp_dot_ip#${tmp_dot_port:-853}"
|
||||||
else
|
else
|
||||||
echolog " - 你的ChinaDNS-NG版本不支持DoT,直连DNS将使用默认地址。"
|
echolog " - 你的ChinaDNS-NG版本不支持DoT,直连DNS将使用默认地址。"
|
||||||
fi
|
fi
|
||||||
@ -1420,6 +1445,7 @@ start_dns() {
|
|||||||
;;
|
;;
|
||||||
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}"
|
||||||
|
[ -n "${sing_box_local_dns}" ] && _args="${_args} ${sing_box_local_dns}"
|
||||||
run_singbox ${_args}
|
run_singbox ${_args}
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
|
Loading…
Reference in New Issue
Block a user