我在使用连接的同一台 Linux 机器上运行代理客户端。在配置中,我可以告诉它使用 tproxy 到端口 2500。代理在端口 443 上运行,使用 TLS(尽管这部分由代理接管管理)
因此我需要使用 iptables 或 nftables 将所有数据包路由到代理。但我也需要标记它们,以免造成循环。
我最初的尝试没有成功,好像我的 UDP 数据包没有通过(我位于 NAT 后面,但我不知道这是不是问题,因为我无论如何都在使用代理)。我想知道它如何更好地工作,以便我可以自己调试它。
这是我的尝试:
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
#Setup a chain DIVERT to mark packets
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
#Use DIVERT to prevent existing connections going through TPROXY twice:
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT
#Mark all other (new) packets and use TPROXY to pass into xray
iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 2500
iptables -t mangle -A PREROUTING -p udp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 2500
#disable rp_filter and enable ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.wlp38s0.rp_filter=0
数据包只是按照我的规则传递,就像它们不存在一样