From 2b18407aea6d36380718a1aeee6447e1bc05bb0e Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Sun, 10 Mar 2024 02:38:27 +0800 Subject: [PATCH] luci: optimise --- .../model/cbi/passwall/client/acl_config.lua | 54 ++++++++++--------- .../model/cbi/passwall/client/global.lua | 2 +- .../luasrc/view/passwall/global/proxy.htm | 2 +- .../root/usr/share/passwall/app.sh | 16 +++--- .../root/usr/share/passwall/iptables.sh | 16 ++++-- .../root/usr/share/passwall/nftables.sh | 18 ++++--- 6 files changed, 63 insertions(+), 45 deletions(-) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua index f0e536619..eb310ebf7 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua @@ -151,25 +151,30 @@ o.validate = port_validate ---- UDP No Redir Ports local UDP_NO_REDIR_PORTS = uci:get(appname, "@global_forwarding[0]", "udp_no_redir_ports") -o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports")) +o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports"), + "" .. translate( + "Fill in the ports you don't want to be forwarded by the agent, with the highest priority.") .. + "") o.default = "default" o:value("disable", translate("No patterns are used")) o:value("default", translate("Use global config") .. "(" .. UDP_NO_REDIR_PORTS .. ")") o:value("1:65535", translate("All")) o.validate = port_validate ---local TCP_NODE = uci:get(appname, "@global[0]", "tcp_node") -tcp_node = s:option(ListValue, "tcp_node", "" .. translate("TCP Node") .. "") -tcp_node.default = "nil" -tcp_node:value("nil", translate("Close")) ---tcp_node:value("default", translate("Use global config") .. "(" .. TCP_NODE .. ")") +o = s:option(Flag, "use_global_config", translatef("Use global config")) +o.default = "0" +o.rmempty = false + +tcp_node = s:option(ListValue, "tcp_node", "" .. translate("TCP Node") .. "") +tcp_node.default = "" +tcp_node:value("", translate("Close")) +tcp_node:depends("use_global_config", false) ---local UDP_NODE = uci:get(appname, "@global[0]", "udp_node") udp_node = s:option(ListValue, "udp_node", "" .. translate("UDP Node") .. "") -udp_node.default = "nil" -udp_node:value("nil", translate("Close")) ---udp_node:value("default", translate("Use global config") .. "(" .. UDP_NODE .. ")") +udp_node.default = "" +udp_node:value("", translate("Close")) udp_node:value("tcp", translate("Same as the tcp node")) +udp_node:depends({ tcp_node = "", ['!reverse'] = true }) for k, v in pairs(nodes_table) do tcp_node:value(v.id, v["remark"]) @@ -184,7 +189,7 @@ o:value("disable", translate("No patterns are used")) o:value("default", translate("Default")) o.validate = port_validate o:value("default", translate("Use global config") .. "(" .. TCP_PROXY_DROP_PORTS .. ")") -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) ---- UDP Proxy Drop Ports local UDP_PROXY_DROP_PORTS = uci:get(appname, "@global_forwarding[0]", "udp_proxy_drop_ports") @@ -194,7 +199,7 @@ o:value("disable", translate("No patterns are used")) o:value("default", translate("Use global config") .. "(" .. UDP_PROXY_DROP_PORTS .. ")") o:value("80,443", translate("QUIC")) o.validate = port_validate -o:depends({ udp_node = "nil", ['!reverse'] = true }) +o:depends({ udp_node = "", ['!reverse'] = true }) ---- TCP Redir Ports local TCP_REDIR_PORTS = uci:get(appname, "@global_forwarding[0]", "tcp_redir_ports") @@ -206,7 +211,7 @@ o:value("80,443", "80,443") o:value("80:65535", "80 " .. translate("or more")) o:value("1:443", "443 " .. translate("or less")) o.validate = port_validate -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) ---- UDP Redir Ports local UDP_REDIR_PORTS = uci:get(appname, "@global_forwarding[0]", "udp_redir_ports") @@ -216,24 +221,24 @@ o:value("default", translate("Use global config") .. "(" .. UDP_REDIR_PORTS .. " o:value("1:65535", translate("All")) o:value("53", "53") o.validate = port_validate -o:depends({ udp_node = "nil", ['!reverse'] = true }) +o:depends({ udp_node = "", ['!reverse'] = true }) o = s:option(Flag, "use_direct_list", translatef("Use %s", translate("Direct List"))) o.default = "1" -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) o = s:option(Flag, "use_proxy_list", translatef("Use %s", translate("Proxy List"))) o.default = "1" -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) o = s:option(Flag, "use_block_list", translatef("Use %s", translate("Block List"))) o.default = "1" -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) if has_gfwlist then o = s:option(Flag, "use_gfw_list", translatef("Use %s", translate("GFW List"))) o.default = "1" - o:depends({ tcp_node = "nil", ['!reverse'] = true }) + o:depends({ tcp_node = "", ['!reverse'] = true }) end if has_chnlist or has_chnroute then @@ -242,29 +247,30 @@ if has_chnlist or has_chnroute then o:value("direct", translate("Direct Connection")) o:value("proxy", translate("Proxy")) o.default = "direct" - o:depends({ tcp_node = "nil", ['!reverse'] = true }) + o:depends({ tcp_node = "", ['!reverse'] = true }) end o = s:option(ListValue, "tcp_proxy_mode", "TCP " .. translate("Proxy Mode")) o:value("disable", translate("No Proxy")) o:value("proxy", translate("Proxy")) -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) o = s:option(ListValue, "udp_proxy_mode", "UDP " .. translate("Proxy Mode")) o:value("disable", translate("No Proxy")) o:value("proxy", translate("Proxy")) -o:depends({ udp_node = "nil", ['!reverse'] = true }) +o:depends({ udp_node = "", ['!reverse'] = true }) -o = s:option(DummyValue, "", " ") +o = s:option(DummyValue, "switch_mode", " ") o.template = appname .. "/global/proxy" +o:depends({ tcp_node = "", ['!reverse'] = true }) o = s:option(Flag, "filter_proxy_ipv6", translate("Filter Proxy Host IPv6"), translate("Experimental feature.")) o.default = "0" -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) ---- DNS Forward Mode o = s:option(ListValue, "dns_mode", translate("Filter Mode")) -o:depends({ tcp_node = "nil", ['!reverse'] = true }) +o:depends({ tcp_node = "", ['!reverse'] = true }) if api.is_finded("dns2socks") then o:value("dns2socks", "dns2socks") end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua index b39e66c3c..0584117b2 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -449,7 +449,7 @@ udp_proxy_mode:value("disable", translate("No Proxy")) udp_proxy_mode:value("proxy", translate("Proxy")) udp_proxy_mode.default = "proxy" -o = s:taboption("Proxy", DummyValue, "", " ") +o = s:taboption("Proxy", DummyValue, "switch_mode", " ") o.template = appname .. "/global/proxy" o = s:taboption("Proxy", Flag, "localhost_proxy", translate("Localhost Proxy"), translate("When selected, localhost can transparent proxy.")) diff --git a/luci-app-passwall/luasrc/view/passwall/global/proxy.htm b/luci-app-passwall/luasrc/view/passwall/global/proxy.htm index ccdcc3dd0..7271331de 100644 --- a/luci-app-passwall/luasrc/view/passwall/global/proxy.htm +++ b/luci-app-passwall/luasrc/view/passwall/global/proxy.htm @@ -1,4 +1,4 @@ -
+
" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh index 452c8c309..57c538831 100755 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/luci-app-passwall/root/usr/share/passwall/app.sh @@ -1344,8 +1344,6 @@ acl_app() { dnsmasq_port=11400 chinadns_port=11500 for item in $items; do - local enabled sid remarks sources tcp_proxy_mode udp_proxy_mode tcp_node udp_node filter_proxy_ipv6 dns_mode remote_dns v2ray_dns_mode remote_dns_doh dns_client_ip - local _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port config_file _extra_param sid=$(uci -q show "${CONFIG}.${item}" | grep "=acl_rule" | awk -F '=' '{print $1}' | awk -F '.' '{print $2}') eval $(uci -q show "${CONFIG}.${item}" | cut -d'.' -sf 3-) [ "$enabled" = "1" ] || continue @@ -1370,8 +1368,9 @@ acl_app() { mkdir -p $TMP_ACL_PATH/$sid echo -e "${rule_list}" | sed '/^$/d' > $TMP_ACL_PATH/$sid/rule_list - tcp_node=${tcp_node:-default} - udp_node=${udp_node:-default} + use_global_config=${use_global_config} + tcp_node=${tcp_node:-nil} + udp_node=${udp_node:-nil} use_direct_list=${use_direct_list:-1} use_proxy_list=${use_proxy_list:-1} use_block_list=${use_block_list:-1} @@ -1387,8 +1386,11 @@ acl_app() { [ "$dns_mode" = "sing-box" ] && { [ "$v2ray_dns_mode" = "doh" ] && remote_dns=${remote_dns_doh:-https://1.1.1.1/dns-query} } - [ "$tcp_proxy_mode" = "default" ] && tcp_proxy_mode=$TCP_PROXY_MODE - [ "$udp_proxy_mode" = "default" ] && udp_proxy_mode=$UDP_PROXY_MODE + + [ "${use_global_config}" = "1" ] & { + tcp_node="default" + udp_node="default" + } [ "$tcp_node" != "nil" ] && { if [ "$tcp_node" = "default" ]; then @@ -1569,7 +1571,7 @@ acl_app() { udp_flag=1 } [ -n "$redirect_dns_port" ] && echo "${redirect_dns_port}" > $TMP_ACL_PATH/$sid/var_redirect_dns_port - unset enabled sid remarks sources tcp_proxy_mode udp_proxy_mode tcp_node udp_node filter_proxy_ipv6 dns_mode remote_dns v2ray_dns_mode remote_dns_doh dns_client_ip + unset enabled sid remarks sources use_global_config tcp_node udp_node use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode filter_proxy_ipv6 dns_mode remote_dns v2ray_dns_mode remote_dns_doh dns_client_ip unset _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port config_file _extra_param unset _china_ng_listen _china_ng_chn _china_ng_gfw _gfwlist_file _chnlist_file _china_ng_log_file _no_ipv6_rules _china_ng_extra_param unset redirect_dns_port diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index bcc1e4b9c..08a62150c 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -186,12 +186,13 @@ load_acl() { tcp_no_redir_ports=${tcp_no_redir_ports:-default} udp_no_redir_ports=${udp_no_redir_ports:-default} + use_global_config=${use_global_config:-0} tcp_proxy_drop_ports=${tcp_proxy_drop_ports:-default} udp_proxy_drop_ports=${udp_proxy_drop_ports:-default} tcp_redir_ports=${tcp_redir_ports:-default} udp_redir_ports=${udp_redir_ports:-default} - tcp_node=${tcp_node:-default} - udp_node=${udp_node:-default} + tcp_node=${tcp_node:-nil} + udp_node=${udp_node:-nil} use_direct_list=${use_direct_list:-1} use_proxy_list=${use_proxy_list:-1} use_block_list=${use_block_list:-1} @@ -206,6 +207,11 @@ load_acl() { [ "$tcp_redir_ports" = "default" ] && tcp_redir_ports=$TCP_REDIR_PORTS [ "$udp_redir_ports" = "default" ] && udp_redir_ports=$UDP_REDIR_PORTS + [ "${use_global_config}" = "1" ] & { + tcp_node="default" + udp_node="default" + } + tcp_node_remark=$(config_n_get $TCP_NODE remarks) udp_node_remark=$(config_n_get $UDP_NODE remarks) [ -s "${TMP_ACL_PATH}/${sid}/var_tcp_node" ] && tcp_node=$(cat ${TMP_ACL_PATH}/${sid}/var_tcp_node) @@ -243,11 +249,11 @@ load_acl() { [ "$tcp_no_redir_ports" != "disable" ] && { if [ "$tcp_no_redir_ports" != "1:65535" ]; then - #结束时return,无需多余的规则。 $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p tcp -m multiport --dport $tcp_no_redir_ports -j RETURN 2>/dev/null $ipt_tmp -A PSW $(comment "$remarks") ${_ipt_source} -p tcp -m multiport --dport $tcp_no_redir_ports -j RETURN echolog " - ${msg}不代理TCP端口[${tcp_no_redir_ports}]" else + #结束时会return,无需加多余的规则。 unset tcp_port echolog " - ${msg}不代理所有TCP端口" fi @@ -255,11 +261,11 @@ load_acl() { [ "$udp_no_redir_ports" != "disable" ] && { if [ "$udp_no_redir_ports" != "1:65535" ]; then - #结束时return,无需多余的规则。 $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -m multiport --dport $udp_no_redir_ports -j RETURN 2>/dev/null $ipt_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -m multiport --dport $udp_no_redir_ports -j RETURN echolog " - ${msg}不代理UDP端口[${udp_no_redir_ports}]" else + #结束时会return,无需加多余的规则。 unset udp_port echolog " - ${msg}不代理所有UDP端口" fi @@ -399,7 +405,7 @@ load_acl() { $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -j RETURN 2>/dev/null $ipt_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -j RETURN done - unset enabled sid remarks sources use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode tcp_no_redir_ports udp_no_redir_ports tcp_proxy_drop_ports udp_proxy_drop_ports tcp_redir_ports udp_redir_ports tcp_node udp_node + unset enabled sid remarks sources use_global_config use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode tcp_no_redir_ports udp_no_redir_ports tcp_proxy_drop_ports udp_proxy_drop_ports tcp_redir_ports udp_redir_ports tcp_node udp_node unset _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port tcp_node_remark udp_node_remark unset ipt_tmp msg msg2 done diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh index 125d4cb9a..375309ba2 100755 --- a/luci-app-passwall/root/usr/share/passwall/nftables.sh +++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh @@ -221,12 +221,13 @@ load_acl() { tcp_no_redir_ports=${tcp_no_redir_ports:-default} udp_no_redir_ports=${udp_no_redir_ports:-default} + use_global_config=${use_global_config:-0} tcp_proxy_drop_ports=${tcp_proxy_drop_ports:-default} udp_proxy_drop_ports=${udp_proxy_drop_ports:-default} tcp_redir_ports=${tcp_redir_ports:-default} udp_redir_ports=${udp_redir_ports:-default} - tcp_node=${tcp_node:-default} - udp_node=${udp_node:-default} + tcp_node=${tcp_node:-nil} + udp_node=${udp_node:-nil} use_direct_list=${use_direct_list:-1} use_proxy_list=${use_proxy_list:-1} use_block_list=${use_block_list:-1} @@ -240,8 +241,11 @@ load_acl() { [ "$udp_proxy_drop_ports" = "default" ] && udp_proxy_drop_ports=$UDP_PROXY_DROP_PORTS [ "$tcp_redir_ports" = "default" ] && tcp_redir_ports=$TCP_REDIR_PORTS [ "$udp_redir_ports" = "default" ] && udp_redir_ports=$UDP_REDIR_PORTS - [ "$tcp_no_redir_ports" = "1:65535" ] && tcp_proxy_mode="disable" - [ "$udp_no_redir_ports" = "1:65535" ] && udp_proxy_mode="disable" + + [ "${use_global_config}" = "1" ] & { + tcp_node="default" + udp_node="default" + } tcp_node_remark=$(config_n_get $TCP_NODE remarks) udp_node_remark=$(config_n_get $UDP_NODE remarks) @@ -277,11 +281,11 @@ load_acl() { [ "$tcp_no_redir_ports" != "disable" ] && { if [ "$tcp_no_redir_ports" != "1:65535" ]; then - #结束时return,无需多余的规则。 nft "add rule inet fw4 $nft_prerouting_chain ${_ipt_source} ip protocol tcp $(factor $tcp_no_redir_ports "tcp dport") counter return comment \"$remarks\"" nft "add rule inet fw4 PSW_MANGLE_V6 ${_ipt_source} meta l4proto tcp $(factor $tcp_no_redir_ports "tcp dport") counter return comment \"$remarks\"" echolog " - ${msg}不代理TCP端口[${tcp_no_redir_ports}]" else + #结束时会return,无需加多余的规则。 unset tcp_port echolog " - ${msg}不代理所有TCP端口" fi @@ -289,11 +293,11 @@ load_acl() { [ "$udp_no_redir_ports" != "disable" ] && { if [ "$udp_no_redir_ports" != "1:65535" ]; then - #结束时return,无需多余的规则。 nft "add rule inet fw4 PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return comment \"$remarks\"" nft "add rule inet fw4 PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return comment \"$remarks\"" 2>/dev/null echolog " - ${msg}不代理UDP端口[${udp_no_redir_ports}]" else + #结束时会return,无需加多余的规则。 unset udp_port echolog " - ${msg}不代理所有UDP端口" fi @@ -438,7 +442,7 @@ load_acl() { nft "add rule inet fw4 PSW_MANGLE ip protocol udp ${_ipt_source} counter return comment \"$remarks\"" nft "add rule inet fw4 PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} counter return comment \"$remarks\"" 2>/dev/null done - unset enabled sid remarks sources use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode tcp_no_redir_ports udp_no_redir_ports tcp_proxy_drop_ports udp_proxy_drop_ports tcp_redir_ports udp_redir_ports tcp_node udp_node + unset enabled sid remarks sources use_global_config use_direct_list use_proxy_list use_block_list use_gfw_list chn_list tcp_proxy_mode udp_proxy_mode tcp_no_redir_ports udp_no_redir_ports tcp_proxy_drop_ports udp_proxy_drop_ports tcp_redir_ports udp_redir_ports tcp_node udp_node unset _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port tcp_node_remark udp_node_remark unset msg msg2 done