From 88ea417866930f01925d2ddf90bee7c28c5027bd Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Tue, 5 Mar 2024 01:31:37 +0800 Subject: [PATCH] luci: optimize && fix Signed-off-by: sbwml --- luci-app-passwall/Makefile | 2 +- luci-app-passwall/root/usr/share/passwall/app.sh | 8 ++++---- .../root/usr/share/passwall/helper_dnsmasq.sh | 2 +- .../root/usr/share/passwall/iptables.sh | 16 ++++++++++++---- .../root/usr/share/passwall/nftables.sh | 16 ++++++++++++---- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 7868fe21b..cdf1283ac 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=4.75-4 +PKG_VERSION:=4.75-5 PKG_RELEASE:= PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh index 4bd699d2d..ced71960e 100755 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/luci-app-passwall/root/usr/share/passwall/app.sh @@ -1441,9 +1441,8 @@ acl_app() { dnsmasq_port=$(get_new_port $(expr $dnsmasq_port + 1)) redirect_dns_port=$dnsmasq_port mkdir -p $TMP_ACL_PATH/$sid/dnsmasq.d - default_dnsmasq_cfgid=$(uci show dhcp.@dnsmasq[0] | awk -F '.' '{print $2}' | awk -F '=' '{print $1}'| head -1) - [ -s "/tmp/etc/dnsmasq.conf.${default_dnsmasq_cfgid}" ] && { - cp -r /tmp/etc/dnsmasq.conf.${default_dnsmasq_cfgid} $TMP_ACL_PATH/$sid/dnsmasq.conf + [ -s "/tmp/etc/dnsmasq.conf.${DEFAULT_DNSMASQ_CFGID}" ] && { + cp -r /tmp/etc/dnsmasq.conf.${DEFAULT_DNSMASQ_CFGID} $TMP_ACL_PATH/$sid/dnsmasq.conf sed -i "/ubus/d" $TMP_ACL_PATH/$sid/dnsmasq.conf sed -i "/dhcp/d" $TMP_ACL_PATH/$sid/dnsmasq.conf sed -i "/port=/d" $TMP_ACL_PATH/$sid/dnsmasq.conf @@ -1714,7 +1713,8 @@ RESOLVFILE=/tmp/resolv.conf.d/resolv.conf.auto ISP_DNS=$(cat $RESOLVFILE 2>/dev/null | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort -u | grep -v 0.0.0.0 | grep -v 127.0.0.1) ISP_DNS6=$(cat $RESOLVFILE 2>/dev/null | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | awk -F % '{print $1}' | awk -F " " '{print $2}'| sort -u | grep -v -Fx ::1 | grep -v -Fx ::) -DEFAULT_DNS=$(uci show dhcp | grep "@dnsmasq" | grep "\.server=" | awk -F '=' '{print $2}' | sed "s/'//g" | tr ' ' '\n' | grep -v "\/" | head -2 | sed ':label;N;s/\n/,/;b label') +DEFAULT_DNSMASQ_CFGID=$(uci show dhcp.@dnsmasq[0] | awk -F '.' '{print $2}' | awk -F '=' '{print $1}'| head -1) +DEFAULT_DNS=$(uci show dhcp.@dnsmasq[0] | grep "\.server=" | awk -F '=' '{print $2}' | sed "s/'//g" | tr ' ' '\n' | grep -v "\/" | head -2 | sed ':label;N;s/\n/,/;b label') [ -z "${DEFAULT_DNS}" ] && [ "$(echo $ISP_DNS | tr ' ' '\n' | wc -l)" -le 2 ] && DEFAULT_DNS=$(echo -n $ISP_DNS | tr ' ' '\n' | head -2 | tr '\n' ',') LOCAL_DNS="${DEFAULT_DNS:-119.29.29.29,223.5.5.5}" diff --git a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh index 7a97a4e18..4889b63ff 100755 --- a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh +++ b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh @@ -16,7 +16,7 @@ stretch() { } backup_servers() { - DNSMASQ_DNS=$(uci show dhcp | grep "@dnsmasq" | grep ".server=" | awk -F '=' '{print $2}' | sed "s/'//g" | tr ' ' ',') + DNSMASQ_DNS=$(uci show dhcp.@dnsmasq[0] | grep ".server=" | awk -F '=' '{print $2}' | sed "s/'//g" | tr ' ' ',') if [ -n "${DNSMASQ_DNS}" ]; then uci -q set $CONFIG.@global[0].dnsmasq_servers="${DNSMASQ_DNS}" uci commit $CONFIG diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index 5da284050..06aae44ca 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -742,16 +742,16 @@ add_firewall_rule() { [ -n "$ISP_DNS" ] && { #echolog "处理 ISP DNS 例外..." for ispip in $ISP_DNS; do - ipset -! add $IPSET_WHITELIST $ispip >/dev/null 2>&1 & - #echolog " - 追加到白名单:${ispip}" + ipset -! add $IPSET_WHITELIST $ispip + echolog " - [$?]追加ISP IPv4 DNS到白名单:${ispip}" done } [ -n "$ISP_DNS6" ] && { #echolog "处理 ISP IPv6 DNS 例外..." for ispip6 in $ISP_DNS6; do - ipset -! add $IPSET_WHITELIST6 $ispip6 >/dev/null 2>&1 & - #echolog " - 追加到白名单:${ispip6}" + ipset -! add $IPSET_WHITELIST6 $ispip6 + echolog " - [$?]追加ISP IPv6 DNS到白名单:${ispip6}" done } @@ -812,6 +812,14 @@ add_firewall_rule() { $ipt_m -N PSW_OUTPUT $ipt_m -A PSW_OUTPUT $(dst $IPSET_LANLIST) -j RETURN $ipt_m -A PSW_OUTPUT $(dst $IPSET_VPSLIST) -j RETURN + [ -n "$LOCAL_DNS" ] && { + for local_dns in $(echo $LOCAL_DNS | tr ',' ' '); do + local dns_address=$(echo $local_dns | awk -F '#' '{print $1}') + local dns_port=$(echo $local_dns | awk -F '#' '{print $2}') + $ipt_m -A PSW_OUTPUT -p udp -d ${dns_address} --dport ${dns_port:-53} -j RETURN + echolog " - [$?]追加直连DNS到iptables:${dns_address}:${dns_port:-53}" + done + } [ "${USE_DIRECT_LIST}" = "1" ] && $ipt_m -A PSW_OUTPUT $(dst $IPSET_WHITELIST) -j RETURN $ipt_m -A PSW_OUTPUT -m mark --mark 0xff -j RETURN [ "${USE_BLOCK_LIST}" = "1" ] && $ipt_m -A PSW_OUTPUT $(dst $IPSET_BLOCKLIST) -j DROP diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh index 6b8167e74..78fba3143 100755 --- a/luci-app-passwall/root/usr/share/passwall/nftables.sh +++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh @@ -780,16 +780,16 @@ add_firewall_rule() { [ -n "$ISP_DNS" ] && { #echolog "处理 ISP DNS 例外..." for ispip in $ISP_DNS; do - insert_nftset $NFTSET_WHITELIST "-1" $ispip >/dev/null 2>&1 & - #echolog " - 追加到白名单:${ispip}" + insert_nftset $NFTSET_WHITELIST "-1" $ispip + echolog " - [$?]追加ISP IPv4 DNS到白名单:${ispip}" done } [ -n "$ISP_DNS6" ] && { #echolog "处理 ISP IPv6 DNS 例外..." for ispip6 in $ISP_DNS6; do - insert_nftset $NFTSET_WHITELIST6 "-1" $ispip6 >/dev/null 2>&1 & - #echolog " - 追加到白名单:${ispip6}" + insert_nftset $NFTSET_WHITELIST6 "-1" $ispip6 + echolog " - [$?]追加ISP IPv6 DNS到白名单:${ispip6}" done } @@ -842,6 +842,14 @@ add_firewall_rule() { nft "flush chain inet fw4 PSW_OUTPUT_MANGLE" nft "add rule inet fw4 PSW_OUTPUT_MANGLE ip daddr @$NFTSET_LANLIST counter return" nft "add rule inet fw4 PSW_OUTPUT_MANGLE ip daddr @$NFTSET_VPSLIST counter return" + [ -n "$LOCAL_DNS" ] && { + for local_dns in $(echo $LOCAL_DNS | tr ',' ' '); do + local dns_address=$(echo $local_dns | awk -F '#' '{print $1}') + local dns_port=$(echo $local_dns | awk -F '#' '{print $2}') + nft "add rule inet fw4 PSW_OUTPUT_MANGLE ip protocol udp ip daddr ${dns_address} $(factor ${dns_port:-53} "udp dport") counter return" + echolog " - [$?]追加直连DNS到nftables:${dns_address}:${dns_port:-53}" + done + } [ "${USE_DIRECT_LIST}" = "1" ] && nft "add rule inet fw4 PSW_OUTPUT_MANGLE ip daddr @$NFTSET_WHITELIST counter return" nft "add rule inet fw4 PSW_OUTPUT_MANGLE meta mark 0xff counter return" [ "${USE_BLOCK_LIST}" = "1" ] && nft "add rule inet fw4 PSW_OUTPUT_MANGLE ip daddr @$NFTSET_BLOCKLIST counter drop"