Jelajahi Sumber

自动处理非标网段,无需手动指定

zfl9 8 tahun lalu
induk
melakukan
b71f7b1367
2 mengubah file dengan 18 tambahan dan 6 penghapusan
  1. 18 0
      ss-tproxy
  2. 0 6
      ss-tproxy.conf

+ 18 - 0
ss-tproxy

@@ -585,6 +585,24 @@ esac
 }
 
 function start_rule {
+    function dec2bin {
+        for ((n = $1; n > 0; n >>= 1)); do bit="$((n & 1))$bit"; done
+        printf "%08d\n" "$bit"
+    }
+    function net2bin {
+        net=$(awk -F/ '{print $1}' <<<$1)
+        len=$(awk -F/ '{print $2}' <<<$1)
+        local IFS='.'; read -ra bytes <<<"$net"
+        for byte in "${bytes[@]}"; do result+="$(dec2bin $byte)"; done
+        echo "${result:0:len}"
+    }
+    for cidr in "${iptables_intranet[@]}"; do
+        curnet=$(net2bin $cidr)
+        for stdnet in 00001010 101011000001 1010100111111110 1100000010101000; do
+            [[ "$curnet" == "$stdnet"* ]] && continue 2
+        done
+        iptables_intranet_nonstd+=($cidr)
+    done
 case "$mode" in
 tproxy_global*|tproxy_chnroute*)
     iptables -t nat -F OUTPUT

+ 0 - 6
ss-tproxy.conf

@@ -136,9 +136,3 @@ iptables_pbr_number='100'                        # PBR 路由表号
 iptables_pbr_fwmark='0x2333/0x2333'              # PBR fwmark值
 iptables_ipset_file='/etc/tproxy/chnroute.set'   # 大陆地址段 ipset 文件
 iptables_intranet=(192.168.0.0/16)               # 内网网段,多个空格隔开
-# 如果 iptables_intranet 中含有非"标准"网段,"标准"网段为:
-# 10.0.0.0/8、169.254.0.0/16、172.16.0.0/12、192.168.0.0/16
-# 请将它们填入 iptables_intranet_nonstd 列表中,多个空格隔开
-# 注意,类似 192.168.1.0/24 网段是包含在 192.168.0.0/16 中的
-# 10/8、169.254/16、172.16/12 也是一样的道理,请不要加入列表
-iptables_intranet_nonstd=()