diff --git a/package/lienol/luci-app-passwall/Makefile b/package/lienol/luci-app-passwall/Makefile
index c2294b0c27..727b80720e 100644
--- a/package/lienol/luci-app-passwall/Makefile
+++ b/package/lienol/luci-app-passwall/Makefile
@@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=3.9
-PKG_RELEASE:=51
-PKG_DATE:=20200903
+PKG_RELEASE:=52
+PKG_DATE:=20200905
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
@@ -16,14 +16,10 @@ include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)/config
menu "Configuration"
-
-config PACKAGE_$(PKG_NAME)_INCLUDE_ipt2socks
- bool "Include ipt2socks"
- default y
config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks
bool "Include Shadowsocks"
- default n
+ default y
config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR
bool "Include ShadowsocksR"
@@ -35,7 +31,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server
config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray
bool "Include V2ray"
- default y
+ default y if i386||x86_64||arm||aarch64
config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus
bool "Include Trojan_Plus"
@@ -43,7 +39,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus
config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO
bool "Include Trojan_GO"
- default n
+ default y if i386||x86_64||arm||aarch64
config PACKAGE_$(PKG_NAME)_INCLUDE_Brook
bool "Include Brook"
@@ -59,11 +55,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_haproxy
config PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG
bool "Include ChinaDNS-NG"
- default y
-
-config PACKAGE_$(PKG_NAME)_INCLUDE_pdnsd
- bool "Include pdnsd"
- default y
+ default n
config PACKAGE_$(PKG_NAME)_INCLUDE_https_dns_proxy
bool "Include Https DNS Proxy(DoH)"
@@ -71,15 +63,15 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_https_dns_proxy
config PACKAGE_$(PKG_NAME)_INCLUDE_dns2socks
bool "Include dns2socks"
- default y
+ default n
config PACKAGE_$(PKG_NAME)_INCLUDE_v2ray-plugin
bool "Include v2ray-plugin (Shadowsocks plugin)"
- default n
+ default y if i386||x86_64||arm||aarch64
config PACKAGE_$(PKG_NAME)_INCLUDE_simple-obfs
bool "Include simple-obfs (Shadowsocks plugin)"
- default n
+ default y if i386||x86_64||arm||aarch64
endmenu
endef
@@ -91,7 +83,8 @@ define Package/$(PKG_NAME)
PKGARCH:=all
DEPENDS:=+libmbedtls +iptables-mod-tproxy +ip +ipset +coreutils +coreutils-base64 +coreutils-nohup +luci-lib-jsonc \
+curl +ca-certificates +resolveip +unzip +dnsmasq-full +tcping +libuci-lua \
- +PACKAGE_$(PKG_NAME)_INCLUDE_ipt2socks:ipt2socks \
+ +ipt2socks \
+ +pdnsd-alt \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-redir \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks:shadowsocks-libev-ss-local \
+PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR:shadowsocksr-libev-alt \
@@ -104,7 +97,6 @@ define Package/$(PKG_NAME)
+PACKAGE_$(PKG_NAME)_INCLUDE_kcptun:kcptun-client \
+PACKAGE_$(PKG_NAME)_INCLUDE_haproxy:haproxy \
+PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG:chinadns-ng \
- +PACKAGE_$(PKG_NAME)_INCLUDE_pdnsd:pdnsd-alt \
+PACKAGE_$(PKG_NAME)_INCLUDE_https_dns_proxy:https-dns-proxy \
+PACKAGE_$(PKG_NAME)_INCLUDE_dns2socks:dns2socks \
+PACKAGE_$(PKG_NAME)_INCLUDE_v2ray-plugin:v2ray-plugin \
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
index 008d1ca1b6..bf76046f8a 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
@@ -24,10 +24,6 @@ uci:foreach(appname, "nodes", function(e)
end)
local socks_table = {}
-socks_table[#socks_table + 1] = {
- id = "",
- remarks = "127.0.0.1:9050 - dns2sock" .. translate(" Default")
-}
uci:foreach(appname, "socks", function(s)
if s.enabled == "1" and s.node then
local id, remarks
@@ -101,6 +97,15 @@ end
s:tab("DNS", translate("DNS"))
+if api.is_finded("chinadns-ng") then
+ o = s:taboption("DNS", Flag, "chinadns_ng", translate("Use ChinaDNS-NG"), translate("When checked, forced to be set to dnsmasq upstream DNS."))
+ o.default = "0"
+
+ o = s:taboption("DNS", Flag, "fair_mode", translate("ChinaDNS-NG Fair Mode"))
+ o.default = "1"
+ o:depends("chinadns_ng", "1")
+end
+
o = s:taboption("DNS", Value, "up_china_dns", translate("Resolver For Local/WhiteList Domains") .. "(UDP)")
o.description = translate("IP:Port mode acceptable, multi value split with english comma.") .. "
" .. translate("When the selection is not the default, this DNS is forced to be set to dnsmasq upstream DNS.")
o.default = "default"
@@ -118,24 +123,18 @@ o:value("1.2.4.8", "1.2.4.8 (CNNIC DNS)")
o:value("210.2.4.8", "210.2.4.8 (CNNIC DNS)")
o:value("180.76.76.76", "180.76.76.76 (" .. translate("Baidu") .. "DNS)")
----- DoH URL
-o = s:taboption("DNS", Value, "up_china_dns_doh_url", translate("DoH request address"))
-o.default = "https://dns.alidns.com/dns-query"
-o:depends("up_china_dns", "https-dns-proxy")
-
----- DoH Bootstrap
-o = s:taboption("DNS", Value, "up_china_dns_doh_bootstrap", translate("DoH bootstrap DNS"), translate("The Bootstrap DNS server is used to resolve the IP address of the DoH resolver you specify as the upstream."))
-o.default = "223.5.5.5,223.6.6.6"
+---- DoH
+o = s:taboption("DNS", Value, "up_china_dns_doh", translate("DoH request address"))
+o.description = translate("When custom, Please follow the format strictly:") .. "
" .. "https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6
" .. "https://doh.pub/dns-query,119.29.29.29"
+o:value("https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6", "AliDNS")
+o:value("https://doh.pub/dns-query,119.29.29.29,119.28.28.28", "DNSPod")
+o.default = "https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6"
o:depends("up_china_dns", "https-dns-proxy")
---- DNS Forward Mode
-o = s:taboption("DNS", Value, "dns_mode", translate("Filter Mode"))
-o.description = translate("When the selection is chinadns-ng, forced to be set to dnsmasq upstream DNS.")
+o = s:taboption("DNS", ListValue, "dns_mode", translate("Filter Mode"))
o.rmempty = false
o:reset_values()
-if api.is_finded("chinadns-ng") then
- o:value("chinadns-ng", "ChinaDNS-NG")
-end
if api.is_finded("pdnsd") then
o:value("pdnsd", "pdnsd")
end
@@ -145,69 +144,45 @@ end
if api.is_finded("https-dns-proxy") then
o:value("https-dns-proxy", "https-dns-proxy(DoH)")
end
+o:value("udp", translatef("Requery DNS By %s", translate("UDP Node")))
o:value("nonuse", translate("No Filter"))
+o:value("custom", translate("Custom DNS"))
+
+---- Custom DNS
+o = s:taboption("DNS", Value, "custom_dns", translate("Custom DNS"))
+o.default = "127.0.0.1#5353"
+o:depends({dns_mode = "custom"})
o = s:taboption("DNS", ListValue, "up_trust_pdnsd_dns", translate("Resolver For The List Proxied"))
-- o.description = translate("You can use other resolving DNS services as trusted DNS, Example: dns2socks, dns-forwarder... 127.0.0.1#5353
Only use two at most, english comma separation, If you do not fill in the # and the following port, you are using port 53.")
-o.default = ""
-if api.is_finded("pdnsd") then
- o:value("", "pdnsd + " .. translate("Access Filtered DNS By ") .. translate("TCP Node"))
-end
-o:value("udp", translate("Access Filtered DNS By ") .. translate("UDP Node"))
-if api.is_finded("dns2socks") then
- o:value("dns2socks", "dns2socks")
-end
+o.default = "tcp"
+o:value("tcp", translatef("Requery DNS By %s", translate("TCP Node")))
+o:value("udp", translatef("Requery DNS By %s", translate("UDP Node")))
o:depends("dns_mode", "pdnsd")
-o = s:taboption("DNS", ListValue, "up_trust_chinadns_ng_dns", translate("Resolver For The List Proxied") .. "(UDP)")
-o.default = "pdnsd"
-if api.is_finded("pdnsd") then
- o:value("pdnsd", "pdnsd, " .. translate("Access Filtered DNS By ") .. translate("TCP Node"))
-end
-o:value("udp", translate("Access Filtered DNS By ") .. translate("UDP Node"))
-if api.is_finded("dns2socks") then
- o:value("dns2socks", "dns2socks")
-end
-if api.is_finded("https-dns-proxy") then
- o:value("https-dns-proxy", "https-dns-proxy(DoH)")
-end
-o:depends("dns_mode", "chinadns-ng")
-
o = s:taboption("DNS", ListValue, "up_trust_doh_dns", translate("Resolver For The List Proxied"))
-o:value("tcp", translate("Access Filtered DNS By ") .. translate("TCP Node"))
-o:value("socks", translate("Access Filtered DNS By ") .. translate("Socks Node"))
+o:value("tcp", translatef("Requery DNS By %s", translate("TCP Node")))
+o:value("socks", translatef("Requery DNS By %s", translate("Socks Node")))
o:depends("dns_mode", "https-dns-proxy")
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "https-dns-proxy"})
----- Upstream trust DNS Mode for ChinaDNS-NG
-o = s:taboption("DNS", Value, "socks_server", translate("Socks Server"), translate("Make sure socks service is available on this address if 'dns2socks' selected."))
-o.default = ""
+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
-o:depends({dns_mode = "pdnsd", up_trust_pdnsd_dns = "dns2socks"})
o:depends({dns_mode = "dns2socks"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "dns2socks"})
o:depends({dns_mode = "https-dns-proxy", up_trust_doh_dns = "socks"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "https-dns-proxy", up_trust_doh_dns = "socks"})
-o = s:taboption("DNS", Flag, "fair_mode", translate("ChinaDNS-NG Fair Mode"))
-o.default = "1"
-o:depends({dns_mode = "chinadns-ng"})
-
----- DoH URL
-o = s:taboption("DNS", Value, "doh_url", translate("DoH request address"))
-o.default = "https://dns.google/dns-query"
+---- DoH
+o = s:taboption("DNS", Value, "up_trust_doh", translate("DoH request address"))
+o.description = translate("When custom, Please follow the format strictly:") .. "
" .. "https://dns.google/dns-query,8.8.8.8,8.8.4.4
" .. "https://doh.opendns.com/dns-query,208.67.222.222"
+o:value("https://dns.adguard.com/dns-query,176.103.130.130,176.103.130.131", "AdGuard")
+o:value("https://cloudflare-dns.com/dns-query,1.1.1.1,1.0.0.1", "Cloudflare")
+o:value("https://security.cloudflare-dns.com/dns-query,1.1.1.2,1.0.0.2", "Cloudflare-Security")
+o:value("https://doh.opendns.com/dns-query,208.67.222.222,208.67.220.220", "OpenDNS")
+o:value("https://dns.google/dns-query,8.8.8.8,8.8.4.4", "Google")
+o:value("https://doh.libredns.gr/dns-query,116.202.176.26", "LibreDNS")
+o:value("https://doh.libredns.gr/ads,116.202.176.26", "LibreDNS (No Ads)")
+o:value("https://dns.quad9.net/dns-query,9.9.9.9,149.112.112.112", "Quad9-Recommended")
+o.default = "https://dns.google/dns-query,8.8.8.8,8.8.4.4"
o:depends({dns_mode = "https-dns-proxy"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "https-dns-proxy"})
-
----- DoH Bootstrap
-o = s:taboption("DNS", Value, "doh_bootstrap", translate("DoH bootstrap DNS"), translate("The Bootstrap DNS server is used to resolve the IP address of the DoH resolver you specify as the upstream."))
-o.default = "8.8.4.4"
-o:value("8.8.4.4", "8.8.4.4 (Google DNS)")
-o:value("8.8.8.8", "8.8.8.8 (Google DNS)")
-o:value("208.67.222.222", "208.67.222.222 (Open DNS)")
-o:value("208.67.220.220", "208.67.220.220 (Open DNS)")
-o:depends({dns_mode = "https-dns-proxy"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "https-dns-proxy"})
---- DNS Forward
o = s:taboption("DNS", Value, "dns_forward", translate("Filtered DNS(For Proxied Domains)"), translate("IP:Port mode acceptable, the 1st for 'dns2socks' if split with english comma."))
@@ -218,16 +193,14 @@ o:value("208.67.222.222", "208.67.222.222 (Open DNS)")
o:value("208.67.220.220", "208.67.220.220 (Open DNS)")
o:depends({dns_mode = "dns2socks"})
o:depends({dns_mode = "pdnsd"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "pdnsd"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "udp"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "dns2socks"})
+o:depends({dns_mode = "udp"})
+--[[
o = s:taboption("DNS", Flag, "dns_cache", translate("Cache Resolved"))
o.default = "1"
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "pdnsd"})
-o:depends({dns_mode = "chinadns-ng", up_trust_chinadns_ng_dns = "dns2socks"})
o:depends({dns_mode = "dns2socks"})
o:depends({dns_mode = "pdnsd"})
+]]--
o = s:taboption("DNS", Flag, "use_chnlist", translate("Use ChinaList"), translate("Only useful in non-gfwlist mode.") .. "
" .. translate("When used, the domestic DNS will be used only when the chnlist rule is hit, and the domain name that misses the rule will be resolved by remote DNS."))
o.default = "0"
diff --git a/package/lienol/luci-app-passwall/po/zh_Hans/passwall.po b/package/lienol/luci-app-passwall/po/zh_Hans/passwall.po
index 434b7c6ebb..827dcb6111 100644
--- a/package/lienol/luci-app-passwall/po/zh_Hans/passwall.po
+++ b/package/lienol/luci-app-passwall/po/zh_Hans/passwall.po
@@ -145,6 +145,9 @@ msgstr "过滤模式"
msgid "No Filter"
msgstr "不过滤"
+msgid "Custom DNS"
+msgstr "自定义DNS"
+
msgid "IP:Port mode ecceptable for specify other filtered name services."
msgstr "定义接受 IP:Port 形式的输入,以指定其它域名服务的过滤服务。"
@@ -157,8 +160,14 @@ msgstr "接受 IP:Port 形式的输入,多个以英文逗号分隔。"
msgid "When the selection is not the default, this DNS is forced to be set to dnsmasq upstream DNS."
msgstr "当选择的不是默认,则将此DNS强制设置为dnsmasq上游DNS。"
-msgid "When the selection is chinadns-ng, forced to be set to dnsmasq upstream DNS."
-msgstr "当选择的是ChinaDNS-NG,则将强制设置为dnsmasq上游DNS。"
+msgid "When custom, Please follow the format strictly:"
+msgstr "当自定义时,请严格遵循以下格式:"
+
+msgid "Use ChinaDNS-NG"
+msgstr "使用ChinaDNS-NG"
+
+msgid "When checked, forced to be set to dnsmasq upstream DNS."
+msgstr "当勾选,则将强制设置为dnsmasq上游DNS。"
msgid "Use ChinaList"
msgstr "使用chnlist"
@@ -178,8 +187,8 @@ msgstr "百度"
msgid "Resolver For The List Proxied"
msgstr "解析被代理的域名列表"
-msgid "Access Filtered DNS By"
-msgstr "由过滤DNS解析,经过"
+msgid "Requery DNS By %s"
+msgstr "通过%s请求DNS"
msgid "Forward To Socks Server"
msgstr "转发至 Socks 服务器"
@@ -190,8 +199,8 @@ msgstr "Socks服务器"
msgid "Misconfigured"
msgstr "配置不当"
-msgid "Make sure socks service is available on this address if 'dns2socks' selected."
-msgstr "如启用了 'dns2socks' 请确保此Socks服务可用。"
+msgid "Make sure socks service is available on this address."
+msgstr "请确保此Socks服务可用。"
msgid "ChinaDNS-NG Fair Mode"
msgstr "ChinaDNS-NG 公平模式"
diff --git a/package/lienol/luci-app-passwall/root/etc/config/passwall b/package/lienol/luci-app-passwall/root/etc/config/passwall
index 70f6006129..6ef6256b14 100644
--- a/package/lienol/luci-app-passwall/root/etc/config/passwall
+++ b/package/lienol/luci-app-passwall/root/etc/config/passwall
@@ -6,7 +6,7 @@ config global
option dns_mode 'pdnsd'
option up_china_dns 'default'
option dns_forward '8.8.4.4'
- option use_chnlist '1'
+ option use_chnlist '0'
option use_tcp_node_resolve_dns '1'
option tcp_proxy_mode 'chnroute'
option udp_proxy_mode 'chnroute'
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh b/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh
index 518c8f3afa..3eb6ab3bc3 100755
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/app.sh
@@ -46,7 +46,7 @@ config_t_get() {
}
get_enabled_anonymous_secs() {
- uci -q show "${CONFIG}" | grep "${1}\[.*\.enabled='1'" | cut -d'.' -sf2
+ uci -q show "${CONFIG}" | grep "${1}\[.*\.enabled='1'" | cut -d '.' -sf2
}
get_host_ip() {
@@ -282,6 +282,7 @@ load_config() {
NO_PROXY=1
}
+ CHINADNS_NG=$(config_t_get global chinadns_ng 0)
DNS_MODE=$(config_t_get global dns_mode pdnsd)
DNS_FORWARD=$(config_t_get global dns_forward 8.8.4.4:53 | sed 's/:/#/g')
DNS_CACHE=$(config_t_get global dns_cache 1)
@@ -597,7 +598,7 @@ start_crontab() {
if [ "$autoupdate" = "1" ]; then
local t="0 $dayupdate * * $weekupdate"
[ "$weekupdate" = "7" ] && t="0 $dayupdate * * *"
- echo "$t lua $APP_PATH/rule_update.lua nil log > /dev/null 2>&1 &" >>/etc/crontabs/root
+ echo "$t lua $APP_PATH/rule_update.lua log > /dev/null 2>&1 &" >>/etc/crontabs/root
echolog "配置定时任务:自动更新规则。"
fi
@@ -630,30 +631,78 @@ stop_crontab() {
start_dns() {
if [ "${LOCAL_DNS}" = "https-dns-proxy" ]; then
- up_china_dns_doh_url=$(config_t_get global up_china_dns_doh_url "https://dns.alidns.com/dns-query")
- up_china_dns_doh_bootstrap=$(config_t_get global up_china_dns_doh_bootstrap "223.5.5.5,223.6.6.6")
- ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy -a 127.0.0.1 -p "${LOCAL_DOH_PORT}" -b "${up_china_dns_doh_bootstrap}" -r "${up_china_dns_doh_url}" -4
+ _doh=$(config_t_get global up_china_dns_doh "https://dns.alidns.com/dns-query,223.5.5.5,223.6.6.6,2400:3200::1,2400:3200:baba::1")
+ _doh_url=$(echo $_doh | awk -F ',' '{print $1}')
+ _doh_bootstrap=$(echo $_doh | cut -d ',' -sf 2-)
+ ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy -a 127.0.0.1 -p "${LOCAL_DOH_PORT}" -b "${_doh_bootstrap}" -r "${_doh_url}" -4
LOCAL_DNS="127.0.0.1#${LOCAL_DOH_PORT}"
+ unset _doh _doh_url _doh_bootstrap
fi
- local dns2socks_socks_server dns2socks_forward dns2sock_cache doh_port pdnsd_port pdnsd_forward other_port up_trust_pdnsd_dns msg
- local global chnlist returnhome china_ng_chn china_ng_gfw chnlist_param gfwlist_param extra_mode up_trust_chinadns_ng_dns
- dns2socks_socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:9050) | sed "s/#/:/g")
- dns2socks_forward=$(get_first_dns DNS_FORWARD 53 | sed 's/#/:/g')
- dns2socks_listen="127.0.0.1:${DNS_PORT}"
- [ "$DNS_CACHE" == "0" ] && dns2sock_cache="/d"
- doh_port=${DNS_PORT}
- pdnsd_port=${DNS_PORT}
+ local pdnsd_forward other_port up_trust_pdnsd_dns msg
+ local global chnlist returnhome china_ng_chn china_ng_gfw chnlist_param gfwlist_param extra_mode
+ dns_listen_port=${DNS_PORT}
pdnsd_forward=${DNS_FORWARD}
- china_ng_chn="${LOCAL_DNS}"
other_port=$(expr $DNS_PORT + 1)
china_ng_gfw="127.0.0.1#${other_port}"
+ china_ng_chn="${LOCAL_DNS}"
returnhome=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "returnhome")
global=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "global")
chnlist=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "chnroute")
[ -n "${returnhome}" ] && china_ng_chn="${china_ng_gfw}" && china_ng_gfw="${LOCAL_DNS}"
sed -n 's/^ipset=\/\.\?\([^/]*\).*$/\1/p' "${RULES_PATH}/gfwlist.conf" | sort -u > "${TMP_PATH}/gfwlist.txt"
echolog "过滤服务配置:准备接管域名解析[$?]..."
+
+ [ "$CHINADNS_NG" = "1" ] && {
+ echolog " | - (chinadns-ng) 只支持2~4级的域名过滤..."
+ [ -z "${global}${chnlist}" ] && echolog " | - (chinadns-ng) 此模式下,列表外的域名查询会同时发送给本地DNS(可切换到Pdnsd + TCP节点模式解决)..."
+ [ -n "${returnhome}" ] && msg="本地" || msg="代理"
+ [ -z "${global}${chnlist}" ] && echolog " | - (chinadns-ng) 列表外域名查询的结果,不在中国IP段内(chnroute/chnroute6)时,只采信${msg} DNS 的应答..."
+ echolog " | - (chinadns-ng) 上游 DNS (${china_ng_gfw}) 有一定概率会比 DNS (${china_ng_chn}) 先返回的话(比如 DNS 的本地查询缓存),启用 '公平模式' 可以优先接受${msg} DNS 的中国IP段内(chnroute/chnroute6)的应答..."
+ if [ "$DNS_MODE" = "pdnsd" ]; then
+ msg="pdnsd"
+ elif [ "$DNS_MODE" = "dns2socks" ]; then
+ #[ -n "${global}${chnlist}" ] && TUN_DNS=${china_ng_gfw}
+ msg="dns2socks"
+ elif [ "$DNS_MODE" = "https-dns-proxy" ]; then
+ msg="https-dns-proxy(DoH)"
+ elif [ "$DNS_MODE" = "udp" ]; then
+ use_udp_node_resolve_dns=1
+ if [ -z "${returnhome}" ]; then
+ china_ng_gfw="${DNS_FORWARD}"
+ else
+ china_ng_chn="${DNS_FORWARD}"
+ fi
+ msg="udp"
+ elif [ "$DNS_MODE" = "custom" ]; then
+ custom_dns=$(config_t_get global custom_dns)
+ china_ng_gfw="$(echo ${custom_dns} | sed 's/:/#/g')"
+ msg="自定义DNS"
+ fi
+ chnlist_param=
+ [ "$USE_CHNLIST" = "1" ] && {
+ cp -a "${RULES_PATH}/chnlist" "${TMP_PATH}/chnlist"
+ if [ -z "${returnhome}" ]; then
+ cat "${RULES_PATH}/direct_host" >> "${TMP_PATH}/chnlist"
+ echolog " | - [$?](chinadns-ng) 域名白名单合并到中国域名表"
+ cat "${RULES_PATH}/proxy_host" >> "${TMP_PATH}/gfwlist.txt"
+ echolog " | - [$?](chinadns-ng) 代理域名表合并到防火墙域名表"
+ gfwlist_param="${TMP_PATH}/gfwlist.txt"
+ else
+ echolog " | - (chinadns-ng) 白名单不与中国域名表合并"
+ cat "${RULES_PATH}/proxy_host" >> "${TMP_PATH}/chnlist"
+ echolog " | - [$?](chinadns-ng) 忽略防火墙域名表,代理域名表合并到中国域名表"
+ fi
+ chnlist_param="${TMP_PATH}/chnlist"
+ chnlist_param=${chnlist_param:+-m "${chnlist_param}" -M}
+ }
+ [ "$(config_t_get global fair_mode 1)" = "1" ] && extra_mode="-f"
+ ln_start_bin "$(first_type chinadns-ng)" chinadns-ng -l "${dns_listen_port}" ${china_ng_chn:+-c "${china_ng_chn}"} ${chnlist_param} ${china_ng_gfw:+-t "${china_ng_gfw}"} ${gfwlist_param:+-g "${gfwlist_param}"} $extra_mode
+ echolog " + 过滤服务:ChinaDNS-NG(:${dns_listen_port}${extra_mode}) + ${msg}:中国域名列表:${china_ng_chn:-D114.114.114.114},防火墙域名列表:${china_ng_gfw:-D8.8.8.8}"
+ #[ -n "${global}${chnlist}" ] && [ -z "${returnhome}" ] && TUN_DNS="${china_ng_gfw}"
+ dns_listen_port=${other_port}
+ }
+
case "$DNS_MODE" in
nonuse)
echolog " - 被禁用,设置为非 '默认DNS' 并开启广告过滤可以按本插件内置的广告域名表进行过滤..."
@@ -675,11 +724,7 @@ start_dns() {
;;
pdnsd)
up_trust_pdnsd_dns=$(config_t_get global up_trust_pdnsd_dns "nil")
- if [ "$up_trust_pdnsd_dns" = "dns2socks" ]; then
- [ -n "${returnhome}" ] && pdnsd_forward=${china_ng_chn} || pdnsd_forward=${china_ng_gfw}
- dns2socks_listen=${pdnsd_forward}
- msg="dns2socks"
- elif [ "$up_trust_pdnsd_dns" = "udp" ]; then
+ if [ "$up_trust_pdnsd_dns" = "udp" ]; then
use_udp_node_resolve_dns=1
msg="UDP节点"
elif [ "${up_trust_pdnsd_dns}" = "nil" ]; then
@@ -687,82 +732,50 @@ start_dns() {
fi
echolog " - 域名解析:pdnsd + 使用(${msg})解析域名..."
;;
- chinadns-ng)
- up_trust_chinadns_ng_dns=$(config_t_get global up_trust_chinadns_ng_dns "pdnsd")
- echolog " | - (chinadns-ng) 只支持2~4级的域名过滤..."
- [ -z "${global}${chnlist}" ] && echolog " | - (chinadns-ng) 此模式下,列表外的域名查询会同时发送给本地DNS(可切换到Pdnsd + TCP节点模式解决)..."
- [ -n "${returnhome}" ] && msg="本地" || msg="代理"
- [ -z "${global}${chnlist}" ] && echolog " | - (chinadns-ng) 列表外域名查询的结果,不在中国IP段内(chnroute/chnroute6)时,只采信${msg} DNS 的应答..."
- echolog " | - (chinadns-ng) 上游 DNS (${china_ng_gfw}) 有一定概率会比 DNS (${china_ng_chn}) 先返回的话(比如 DNS 的本地查询缓存),启用 '公平模式' 可以优先接受${msg} DNS 的中国IP段内(chnroute/chnroute6)的应答..."
- if [ "$up_trust_chinadns_ng_dns" = "pdnsd" ]; then
- pdnsd_port=${other_port}
- msg="pdnsd"
- elif [ "$up_trust_chinadns_ng_dns" = "dns2socks" ]; then
- dns2socks_listen=${china_ng_gfw}
- #[ -n "${global}${chnlist}" ] && TUN_DNS="${dns2socks_listen}"
- msg="dns2socks"
- elif [ "$up_trust_chinadns_ng_dns" = "https-dns-proxy" ]; then
- doh_port=${other_port}
- msg="https-dns-proxy(DoH)"
- elif [ "$up_trust_chinadns_ng_dns" = "udp" ]; then
- use_udp_node_resolve_dns=1
- if [ -z "${returnhome}" ]; then
- china_ng_gfw=${DNS_FORWARD}
- else
- china_ng_chn="${DNS_FORWARD}"
- fi
- msg="udp"
- fi
- chnlist_param=
- [ "$USE_CHNLIST" = "1" ] && {
- cp -a "${RULES_PATH}/chnlist" "${TMP_PATH}/chnlist"
- if [ -z "${returnhome}" ]; then
- cat "${RULES_PATH}/direct_host" >> "${TMP_PATH}/chnlist"
- echolog " | - [$?](chinadns-ng) 域名白名单合并到中国域名表"
- cat "${RULES_PATH}/proxy_host" >> "${TMP_PATH}/gfwlist.txt"
- echolog " | - [$?](chinadns-ng) 代理域名表合并到防火墙域名表"
- gfwlist_param="${TMP_PATH}/gfwlist.txt"
- else
- echolog " | - (chinadns-ng) 白名单不与中国域名表合并"
- cat "${RULES_PATH}/proxy_host" >> "${TMP_PATH}/chnlist"
- echolog " | - [$?](chinadns-ng) 忽略防火墙域名表,代理域名表合并到中国域名表"
- fi
- chnlist_param="${TMP_PATH}/chnlist"
- chnlist_param=${chnlist_param:+-m "${chnlist_param}" -M}
- }
- [ "$(config_t_get global fair_mode 1)" = "1" ] && extra_mode="-f"
- ln_start_bin "$(first_type chinadns-ng)" chinadns-ng -l "${DNS_PORT}" ${china_ng_chn:+-c "${china_ng_chn}"} ${chnlist_param} ${china_ng_gfw:+-t "${china_ng_gfw}"} ${gfwlist_param:+-g "${gfwlist_param}"} $extra_mode
- echolog " + 过滤服务:ChinaDNS-NG(:${DNS_PORT}${extra_mode}) + ${msg}:中国域名列表:${china_ng_chn:-D114.114.114.114},防火墙域名列表:${china_ng_gfw:-D8.8.8.8}"
- #[ -n "${global}${chnlist}" ] && [ -z "${returnhome}" ] && TUN_DNS="${china_ng_gfw}"
+ udp)
+ use_udp_node_resolve_dns=1
+ msg="直接使用UDP节点请求DNS"
;;
- *)
- TUN_DNS="$(echo ${DNS_MODE} | sed 's/:/#/g')"
- DNS_MODE="other_dns"
- echolog " - 域名解析:指定DNS服务器(支持UDP查询)解析域名:${TUN_DNS}"
+ custom)
+ [ "$CHINADNS_NG" != "1" ] && {
+ custom_dns=$(config_t_get global custom_dns)
+ TUN_DNS="$(echo ${custom_dns} | sed 's/:/#/g')"
+ echolog " - 域名解析 直接使用UDP协议自定义DNS($TUN_DNS)解析..."
+ }
;;
esac
- if [ -n "$(echo ${DNS_MODE}${up_trust_chinadns_ng_dns} | grep pdnsd)" ]; then
- gen_pdnsd_config "${pdnsd_port}" "${pdnsd_forward}"
+ if [ -n "$(echo ${DNS_MODE} | grep pdnsd)" ]; then
+ gen_pdnsd_config "${dns_listen_port}" "${pdnsd_forward}"
ln_start_bin "$(first_type pdnsd)" pdnsd --daemon -c "${TMP_PATH}/pdnsd/pdnsd.conf" -d
fi
- if [ -n "$(echo ${DNS_MODE}${up_trust_chinadns_ng_dns} | grep 'https-dns-proxy')" ]; then
- doh_url=$(config_t_get global doh_url "https://dns.google/dns-query")
- doh_bootstrap=$(config_t_get global doh_bootstrap "8.8.4.4")
+ if [ -n "$(echo ${DNS_MODE} | grep 'https-dns-proxy')" ]; then
+ up_trust_doh=$(config_t_get global up_trust_doh "https://dns.google/dns-query,8.8.8.8,8.8.4.4")
+ _doh_url=$(echo $up_trust_doh | awk -F ',' '{print $1}')
+ _doh_bootstrap=$(echo $up_trust_doh | cut -d ',' -sf 2-)
up_trust_doh_dns=$(config_t_get global up_trust_doh_dns "tcp")
if [ "$up_trust_doh_dns" = "socks" ]; then
socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:9050) | sed "s/#/:/g")
- ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy -a 127.0.0.1 -p "${doh_port}" -b "${doh_bootstrap}" -r "${doh_url}" -4 -t socks5h://${socks_server}
+ ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy -a 127.0.0.1 -p "${dns_listen_port}" -b "${_doh_bootstrap}" -r "${_doh_url}" -4 -t socks5h://${socks_server}
elif [ "${up_trust_doh_dns}" = "tcp" ]; then
- DNS_FORWARD=${doh_bootstrap}:443
- ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy -a 127.0.0.1 -p "${doh_port}" -b "${doh_bootstrap}" -r "${doh_url}" -4
+ DNS_FORWARD=""
+ _doh_bootstrap_dns=$(echo $_doh_bootstrap | sed "s/,/ /g")
+ for _dns in $_doh_bootstrap_dns; do
+ _dns=$(echo $_dns | awk -F ':' '{print $1}'):443
+ [ -n "$DNS_FORWARD" ] && DNS_FORWARD=${DNS_FORWARD},${_dns} || DNS_FORWARD=${_dns}
+ done
+ ln_start_bin "$(first_type https-dns-proxy)" https-dns-proxy -a 127.0.0.1 -p "${dns_listen_port}" -b "${_doh_bootstrap}" -r "${_doh_url}" -4
+ unset _dns _doh_bootstrap_dns
fi
+ unset _doh_url _doh_bootstrap
fi
- if [ -n "$(echo ${DNS_MODE}${up_trust_chinadns_ng_dns}${up_trust_pdnsd_dns} | grep dns2socks)" ]; then
- dns2socks_listen=$(echo "${dns2socks_listen}" | sed 's/#/:/g')
- ln_start_bin "$(first_type dns2socks)" dns2socks "$dns2socks_socks_server" "$dns2socks_forward" "$dns2socks_listen" $dns2sock_cache
- echolog " - dns2sock(${dns2socks_listen}${dns2sock_cache}),${dns2socks_socks_server:-127.0.0.1:9050} -> ${dns2socks_forward-D46.182.19.48:53}"
- #[ "${DNS_MODE}" = "chinadns-ng" ] && [ -n "${global}${chnlist}" ] && [ -z "${returnhome}" ] && TUN_DNS=$(echo "${dns2socks_listen}" | sed 's/:/#/g')
+ if [ -n "$(echo ${DNS_MODE}${up_trust_pdnsd_dns} | grep dns2socks)" ]; then
+ local dns2socks_socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:9050) | sed "s/#/:/g")
+ local dns2socks_forward=$(get_first_dns DNS_FORWARD 53 | sed 's/#/:/g')
+ [ "$DNS_CACHE" == "0" ] && local dns2sock_cache="/d"
+ ln_start_bin "$(first_type dns2socks)" dns2socks "$dns2socks_socks_server" "$dns2socks_forward" "127.0.0.1:$dns_listen_port" $dns2sock_cache
+ echolog " - dns2sock(127.0.0.1:${dns_listen_port}${dns2sock_cache}),${dns2socks_socks_server:-127.0.0.1:9050} -> ${dns2socks_forward-D46.182.19.48:53}"
+ #[ "$CHINADNS_NG" = "1" ] && [ -n "${global}${chnlist}" ] && [ -z "${returnhome}" ] && TUN_DNS=$(echo "${dns_listen_port}" | sed 's/:/#/g')
fi
[ "${use_udp_node_resolve_dns}" = "1" ] && echolog " * 要求代理 DNS 请求,如上游 DNS 非直连地址,确保 UDP 代理打开,并且已经正确转发"
[ "${use_tcp_node_resolve_dns}" = "1" ] && echolog " * 请确认上游 DNS 支持 TCP 查询,如非直连地址,确保 TCP 代理打开,并且已经正确转发"
@@ -798,7 +811,7 @@ add_dnsmasq() {
#始终用国内DNS解析直连(白名单)列表
fwd_dns="${LOCAL_DNS}"
#如果使用Chinadns-NG直接交给Chinadns-NG处理
- [ "${DNS_MODE}" = "chinadns-ng" ] && unset fwd_dns
+ [ "$CHINADNS_NG" = "1" ] && unset fwd_dns
#如果没使用chnlist直接使用默认DNS
[ "${USE_CHNLIST}" = "0" ] && unset fwd_dns
sort -u "${RULES_PATH}/direct_host" | gen_dnsmasq_items "whitelist" "${fwd_dns}" "${TMP_DNSMASQ_PATH}/direct_host.conf"
@@ -810,7 +823,7 @@ add_dnsmasq() {
[ -n "${returnhome}" ] || [ -n "${chnlist}" ] && {
[ -n "${global}" ] && unset fwd_dns
#如果使用Chinadns-NG直接交给Chinadns-NG处理
- [ "${DNS_MODE}" = "chinadns-ng" ] && unset fwd_dns
+ [ "$CHINADNS_NG" = "1" ] && unset fwd_dns
#如果使用回国模式,设置dns为远程DNS。
[ -n "${returnhome}" ] && fwd_dns="${TUN_DNS}"
sort -u "${RULES_PATH}/chnlist" | gen_dnsmasq_items "chnroute" "${fwd_dns}" "${TMP_DNSMASQ_PATH}/chinalist_host.conf"
@@ -821,7 +834,7 @@ add_dnsmasq() {
#始终使用远程DNS解析代理(黑名单)列表
fwd_dns="${TUN_DNS}"
#如果使用Chinadns-NG直接交给Chinadns-NG处理
- [ "${DNS_MODE}" = "chinadns-ng" ] && unset fwd_dns
+ [ "$CHINADNS_NG" = "1" ] && unset fwd_dns
#如果使用chnlist直接使用默认DNS
[ "${USE_CHNLIST}" = "1" ] && unset fwd_dns
sort -u "${RULES_PATH}/proxy_host" | gen_dnsmasq_items "blacklist" "${fwd_dns}" "${TMP_DNSMASQ_PATH}/proxy_host.conf"
@@ -831,7 +844,7 @@ add_dnsmasq() {
[ -z "${returnhome}" ] && {
fwd_dns="${TUN_DNS}"
#如果使用Chinadns-NG直接交给Chinadns-NG处理
- [ "${DNS_MODE}" = "chinadns-ng" ] && unset fwd_dns
+ [ "$CHINADNS_NG" = "1" ] && unset fwd_dns
#如果使用chnlist直接使用默认DNS
[ "${USE_CHNLIST}" = "1" ] && unset fwd_dns
sort -u "${TMP_PATH}/gfwlist.txt" | gen_dnsmasq_items "gfwlist" "${fwd_dns}" "${TMP_DNSMASQ_PATH}/gfwlist.conf"
@@ -843,7 +856,7 @@ add_dnsmasq() {
[ "$(config_t_get global_subscribe subscribe_proxy 0)" = "1" ] && {
fwd_dns="${TUN_DNS}"
#如果使用Chinadns-NG直接交给Chinadns-NG处理
- [ "${DNS_MODE}" = "chinadns-ng" ] && unset fwd_dns
+ [ "$CHINADNS_NG" = "1" ] && unset fwd_dns
#如果使用chnlist直接使用默认DNS
[ "${USE_CHNLIST}" = "1" ] && unset fwd_dns
items=$(get_enabled_anonymous_secs "@subscribe_list")
@@ -865,7 +878,7 @@ add_dnsmasq() {
[ -n "${chnlist}" ] && msg="中国列表以外"
[ -n "${returnhome}" ] && msg="中国列表"
[ -n "${global}" ] && msg="全局"
- if [ "${DNS_MODE}" = "chinadns-ng" ]; then
+ if [ "$CHINADNS_NG" = "1" ]; then
#直接交给Chinadns-ng处理
servers="${TUN_DNS}" && msg="chinadns-ng"
else
@@ -1009,7 +1022,7 @@ start_haproxy() {
sort_items="${sort_items}${IFS}${lport} ${item}"
done
- items=$(echo "${sort_items}" | sort -n | cut -d' ' -sf 2)
+ items=$(echo "${sort_items}" | sort -n | cut -d ' ' -sf 2)
unset lport
local haproxy_port lbss lbort lbweight export backup
@@ -1017,7 +1030,7 @@ start_haproxy() {
for item in ${items}; do
unset haproxy_port lbort bbackup
- eval $(uci -q show "${CONFIG}.${item}" | cut -d'.' -sf 3-)
+ eval $(uci -q show "${CONFIG}.${item}" | cut -d '.' -sf 3-)
get_ip_port_from "$lbss" bip bport
[ "$lbort" = "default" ] && lbort=$bport || bport=$lbort
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh b/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh
index 9e925426d4..877beed6c6 100755
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/monitor.sh
@@ -75,7 +75,7 @@ do
done
#dns
- if [ "$dns_mode" != "nonuse" ]; then
+ if [ "$dns_mode" != "nonuse" ] && [ "$dns_mode" != "custom" ]; then
icount=$(netstat -apn | grep 7913 | wc -l)
if [ $icount = 0 ]; then
/etc/init.d/passwall restart
diff --git a/package/lienol/luci-app-passwall/root/usr/share/passwall/rule_update.lua b/package/lienol/luci-app-passwall/root/usr/share/passwall/rule_update.lua
index 600a41be89..9c6896e4b3 100644
--- a/package/lienol/luci-app-passwall/root/usr/share/passwall/rule_update.lua
+++ b/package/lienol/luci-app-passwall/root/usr/share/passwall/rule_update.lua
@@ -55,8 +55,7 @@ end
local log = function(...)
if arg1 then
- local result = os.date("%Y-%m-%d %H:%M:%S: ") ..
- table.concat({...}, " ")
+ local result = os.date("%Y-%m-%d %H:%M:%S: ") .. table.concat({...}, " ")
if arg1 == "log" then
local f, err = io.open("/var/log/passwall.log", "a")
if f and err == nil then