#!/usr/bin/env bash # 设置策略路由 # 添加路由表 100 sudo ip route add local default dev lo table 100 # 为路由表 100 设定规则 +ip rule add fwmark 1 table 100 # 创建XRAY过滤器链 iptables -t mangle -N XRAY # 代理局域网设备 iptables -t mangle -A XRAY -d 10.0.0.0/8 -j RETURN iptables -t mangle -A XRAY -d 100.64.0.0/10 -j RETURN iptables -t mangle -A XRAY -d 127.0.0.0/8 -j RETURN iptables -t mangle -A XRAY -d 169.254.0.0/16 -j RETURN iptables -t mangle -A XRAY -d 172.0.0.0/8 -j RETURN iptables -t mangle -A XRAY -d 224.0.0.0/4 -j RETURN iptables -t mangle -A XRAY -d 255.255.255.255/32 -j RETURN # 直连局域网,避免 XRAY 无法启动时无法连网关的 SSH,如果你配置的是其他网段(如 10.x.x.x 等),则修改成自己的 iptables -t mangle -A XRAY -d 192.168.233.0/24 -p tcp -j RETURN # 直连局域网,53 端口除外(因为要使用 XRAY 的 DNS) iptables -t mangle -A XRAY -d 192.168.233.0/24 -p udp ! --dport 53 -j RETURN # 给 UDP 打标记 1,转发至 12345 端口 iptables -t mangle -A XRAY -i ens3 -p udp -j TPROXY --on-port 12345 --tproxy-mark 1 # 给 TCP 打标记 1,转发至 12345 端口 iptables -t mangle -A XRAY -i ens3 -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1 # 应用规则 iptables -t mangle -A PREROUTING -j XRAY # 代理网关本机 iptables -t mangle -N XRAY_SELF iptables -t mangle -A XRAY -d 10.0.0.0/8 -j RETURN iptables -t mangle -A XRAY -d 100.64.0.0/10 -j RETURN iptables -t mangle -A XRAY -d 127.0.0.0/8 -j RETURN iptables -t mangle -A XRAY -d 169.254.0.0/16 -j RETURN iptables -t mangle -A XRAY -d 172.0.0.0/8 -j RETURN iptables -t mangle -A XRAY -d 224.0.0.0/4 -j RETURN iptables -t mangle -A XRAY -d 255.255.255.255/32 -j RETURN iptables -t mangle -A XRAY_SELF -d 192.168.233.0/24 -p tcp -j RETURN # 直连局域网 # 直连局域网,53 端口除外(因为要使用 XRAY 的 DNS) iptables -t mangle -A XRAY_SELF -d 192.168.233.0/24 -p udp ! --dport 53 -j RETURN # 除了上述的所有流量,均为进入PostRouting的流量,需要判定mark标记,然后释放 iptables -t mangle -A XRAY_SELF -m mark --mark 23 -j RETURN # 为CoreDNS开启PostRouting流量 # 请求UDP-53的流量 放行请求国内dns的请求,直接出去 iptables -t mangle -A XRAY_SELF -i ens3 -p udp --dport 53 -j RETURN # 请求DNS over TLS - 853 的流量 需要重新回到Xray中走代理 #iptables -t mangle -A XRAY_SELF -p tcp --dport 853 -j RETURN #iptables -t mangle -A XRAY_SELF -p udp --dport 853 -j RETURN # 所有其他流量,需要重路由 # 给 UDP 打标记,重路由 iptables -t mangle -A XRAY_SELF -i ens3 -p udp -j MARK --set-mark 1 # 给 TCP 打标记,重路由 iptables -t mangle -A XRAY_SELF -i ens3 -p tcp -j MARK --set-mark 1 # 应用规则 iptables -t mangle -A OUTPUT -j XRAY_SELF # 新建 DIVERT 规则,避免已有连接的包二次通过 TPROXY,理论上有一定的性能提升 iptables -t mangle -N DIVERT iptables -t mangle -A DIVERT -i ens3 -j MARK --set-mark 1 iptables -t mangle -A DIVERT -j ACCEPT iptables -t mangle -I PREROUTING -p tcp -m socket -j DIVERT