From 42846bd15f247034c2bee69ed23e8d4f55d03e99 Mon Sep 17 00:00:00 2001 From: action Date: Fri, 11 Sep 2026 16:29:42 +0800 Subject: [PATCH] update 2026-09-11 16:29:42 --- clashoo/Makefile | 10 ++++----- .../root/usr/share/passwall/iptables.sh | 14 +++++++----- .../root/usr/share/passwall/nftables.sh | 22 +++++++++++++------ .../root/usr/share/passwall/tasks.sh | 8 +++---- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/clashoo/Makefile b/clashoo/Makefile index ee112b7b..c7e4529d 100644 --- a/clashoo/Makefile +++ b/clashoo/Makefile @@ -1,18 +1,18 @@ include $(TOPDIR)/rules.mk PKG_NAME:=clashoo -PKG_SHORT_SHA:=4aa9cc1 -PKG_COMMIT_DATE:=2026.09.10 +PKG_SHORT_SHA:=dca26db +PKG_COMMIT_DATE:=2026.09.11 PKG_VERSION:=$(PKG_COMMIT_DATE)~$(PKG_SHORT_SHA) -PKG_RELEASE:=2 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA).tar.gz PKG_SOURCE_SUBDIR:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-alpha-$(PKG_SHORT_SHA) PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-clashoo/releases/download/mihomo-src -PKG_SOURCE_VERSION:=4aa9cc17fc91feb60d406bd273206ddb7d43f431 -PKG_HASH:=c9ad80f837c520a6b9269d33f45ea16a30a9cc5c68828287b25a488b351b8b2f +PKG_SOURCE_VERSION:=dca26db017bcde90071f3e16f97b12fafbccfa31 +PKG_HASH:=593e53b3aeb52bbd3f49ddf4ae7773ce340bf2e984a9d5634a6385fa3041b5a2 PKG_BUILD_VERSION:=alpha-$(PKG_SHORT_SHA) PKG_LICENSE:=GPL3.0+ diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index af52ec30..cdd28154 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -417,7 +417,7 @@ load_acl() { [ "$_ipv4" != "1" ] && $ip6t_n -A PSW_DNS $(comment "$remarks") -p udp ${_ipt_source} --dport 53 -j REDIRECT --to-ports ${dns_redirect} 2>/dev/null $ipt_n -A PSW_DNS $(comment "$remarks") -p tcp ${_ipt_source} --dport 53 -j REDIRECT --to-ports ${dns_redirect} [ "$_ipv4" != "1" ] && $ip6t_n -A PSW_DNS $(comment "$remarks") -p tcp ${_ipt_source} --dport 53 -j REDIRECT --to-ports ${dns_redirect} 2>/dev/null - [ -z "$(get_cache_var "ACL_${sid}_default")" ] && echolog " - ${msg}与全局配置不同节点,DNS 重定向到专用 DNS 服务器 [${dns_redirect}]。" + [ -z "$(get_cache_var "ACL_${sid}_default")" ] && echolog " - ${msg}节点不同于全局配置,DNS 重定向到专用服务器[${dns_redirect}]。" fi [ -n "$tcp_port" ] || [ -n "$udp_port" ] && { @@ -785,8 +785,8 @@ filter_server_port() { local address="$1" local port=$(echo "$2" | tr '-' ':' | tr -d ' ') local stream=$(echo "$3" | tr 'A-Z' 'a-z') - local ipt_tmp="$ipt_n" _is_tproxy _ipt_cmd _ver multi_ports p ports - [ "$(config_n_get @global_forwarding[0] tcp_proxy_way redirect)" = "tproxy" ] && _is_tproxy="TPROXY" + local _is_tproxy="$4" + local ipt_tmp="$ipt_n" _ipt_cmd _ver multi_ports p ports [ "$stream" = "udp" ] && _is_tproxy="TPROXY" [ -n "$_is_tproxy" ] && ipt_tmp="$ipt_m" for _ver in 4 6; do @@ -813,7 +813,7 @@ filter_server_port() { } filter_node() { - local node="$1" stream="$2" + local node="$1" stream="$2" _is_tproxy="$3" [ -z "$node" ] && return 1 local address=$(config_n_get "$node" address) local port=$(config_n_get "$node" port) @@ -822,13 +822,15 @@ filter_node() { [ -z "$address" ] && return 1 echo "$address" | grep -Eq "$EXCLUDE_VPSIP" && return 1 [ -z "$port" ] && return 1 - filter_server_port "$address" "$port" "$stream" + filter_server_port "$address" "$port" "$stream" "$_is_tproxy" } filter_direct_node_list() { [ ! -s "$TMP_PATH/direct_node_list" ] && return + local _is_tproxy + [ "$(config_n_get @global_forwarding[0] tcp_proxy_way redirect)" = "tproxy" ] && _is_tproxy="TPROXY" awk '!seen[$0]++' "$TMP_PATH/direct_node_list" | while read -r _node_id; do - filter_node "$_node_id" TCP + filter_node "$_node_id" TCP "$_is_tproxy" filter_node "$_node_id" UDP unset _node_id done diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh index 4e69e59d..dd65e2c2 100755 --- a/luci-app-passwall/root/usr/share/passwall/nftables.sh +++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh @@ -478,7 +478,7 @@ load_acl() { #nft "add rule $NFTABLE_NAME PSW_DNS ip protocol tcp ${_ipt_source} tcp dport 53 counter redirect to :${dns_redirect} comment \"$remarks\"" nft "add rule $NFTABLE_NAME PSW_DNS meta l4proto udp ${_ipt_source} udp dport 53 counter redirect to :${dns_redirect} comment \"$remarks\"" nft "add rule $NFTABLE_NAME PSW_DNS meta l4proto tcp ${_ipt_source} tcp dport 53 counter redirect to :${dns_redirect} comment \"$remarks\"" - [ -z "$(get_cache_var "ACL_${sid}_default")" ] && echolog " - ${msg}与全局配置不同节点,DNS 重定向到专用 DNS 服务器 [${dns_redirect}]。" + [ -z "$(get_cache_var "ACL_${sid}_default")" ] && echolog " - ${msg}节点不同于全局配置,DNS 重定向到专用服务器[${dns_redirect}]。" fi [ -n "$tcp_port" ] || [ -n "$udp_port" ] && { @@ -857,9 +857,9 @@ filter_server_port() { local address="$1" local port=$(echo "$2" | tr ':' '-' | tr -d ' ') local stream=$(echo "$3" | tr 'A-Z' 'a-z') - local _ip_type _port_expr _ver _is_tproxy + local _is_tproxy="$4" + local _ip_type _port_expr _ver local _nft_output_chain="PSW_OUTPUT_NAT" - [ "$(config_n_get @global_forwarding[0] tcp_proxy_way redirect)" = "tproxy" ] && _is_tproxy="TPROXY" [ "$stream" = "udp" ] && _is_tproxy="TPROXY" [ -n "$_is_tproxy" ] && _nft_output_chain="PSW_OUTPUT_MANGLE" case "$port" in @@ -875,7 +875,7 @@ filter_server_port() { } filter_node() { - local node="$1" stream="$2" + local node="$1" stream="$2" _is_tproxy="$3" [ -z "$node" ] && return 1 local address=$(config_n_get "$node" address) local port=$(config_n_get "$node" port) @@ -884,13 +884,15 @@ filter_node() { [ -z "$address" ] && return 1 echo "$address" | grep -Eq "$EXCLUDE_VPSIP" && return 1 [ -z "$port" ] && return 1 - filter_server_port "$address" "$port" "$stream" + filter_server_port "$address" "$port" "$stream" "$_is_tproxy" } filter_direct_node_list() { [ ! -s "$TMP_PATH/direct_node_list" ] && return + local _is_tproxy + [ "$(config_n_get @global_forwarding[0] tcp_proxy_way redirect)" = "tproxy" ] && _is_tproxy="TPROXY" awk '!seen[$0]++' "$TMP_PATH/direct_node_list" | while read -r _node_id; do - filter_node "$_node_id" TCP + filter_node "$_node_id" TCP "$_is_tproxy" filter_node "$_node_id" UDP unset _node_id done @@ -908,16 +910,22 @@ add_script_mwan3() { } } +MWAN3_RULE_ARGS="-m connmark --mark ${FWMARK}/0xffffffff -j RETURN" + mwan3_stop() { + nft list chain ip mangle mwan3_hook >/dev/null 2>&1 || return 0 local handles=$(nft -a list chain ip mangle mwan3_hook 2>/dev/null | grep "${FWMARK}" | awk -F '# handle ' '{print$2}') for handle in $handles; do nft delete rule ip mangle mwan3_hook handle ${handle} 2>/dev/null done + while iptables -w 5 -t mangle -D mwan3_hook ${MWAN3_RULE_ARGS} >/dev/null 2>&1; do :; done } mwan3_start() { + nft list chain ip mangle mwan3_hook >/dev/null 2>&1 || return 0 mwan3_stop - nft list chain ip mangle mwan3_hook >/dev/null 2>&1 && nft insert rule ip mangle mwan3_hook ct mark ${FWMARK} counter return >/dev/null 2>&1 + iptables -w 5 -t mangle -I mwan3_hook 1 ${MWAN3_RULE_ARGS} >/dev/null 2>&1 || \ + logger -t passwall "mwan3: failed to add ${FWMARK} exemption rule to mangle/mwan3_hook" } update_wan_sets() { diff --git a/luci-app-passwall/root/usr/share/passwall/tasks.sh b/luci-app-passwall/root/usr/share/passwall/tasks.sh index d9adbbe4..7042c95d 100755 --- a/luci-app-passwall/root/usr/share/passwall/tasks.sh +++ b/luci-app-passwall/root/usr/share/passwall/tasks.sh @@ -40,10 +40,11 @@ do mkdir -p $TMP_SUB_PATH for item in $(uci show ${CONFIG} | grep "=subscribe_list" | cut -d '.' -sf 2 | cut -d '=' -sf 1); do sub_update_week_mode=$(config_n_get $item update_week_mode) - if [ -n "$sub_update_week_mode" ]; then - remark=$(config_n_get $item remark) + if [ -n "$sub_update_week_mode" ] && [ "$sub_update_week_mode" = "8" ]; then sub_update_interval_mode=$(config_n_get $item update_interval_mode) - echo "$item" >> $TMP_SUB_PATH/${sub_update_week_mode}_${sub_update_interval_mode} + [ -n "$sub_update_interval_mode" ] && { + echo "$item" >> $TMP_SUB_PATH/${sub_update_week_mode}_${sub_update_interval_mode} + } fi done @@ -56,7 +57,6 @@ do [ "$sub_update_week_mode" = "8" ] && { [ "$(expr "$CFG_UPDATE_INT" % "$sub_update_interval_mode")" -eq 0 ] && { lua $APP_PATH/subscribe.lua start $cfgids cron > /dev/null 2>&1 & } } - done rm -rf $TMP_SUB_PATH }