我在路由器中安装了一个 TPROXY 服务器,将流量转发到 SOCKS5 服务器。
路由器的地址是 192.168.1.1,我的 PC 的地址是 192.168.1.33。此外,我在 PC 端有一个本地网桥“virbr0”,它将流量转发到虚拟机,网关地址为 192.168.11.1,对等地址为 192.168.11.2。
在PC端:
ip rule add fwmark 1088 table 100
ip route add local default dev virbr0 table 100
iptables -t mangle -A PREROUTING -i virbr0 -p tcp -j TPROXY -s 192.168.11.2 --on-ip 192.168.0.1 --on-port 1088 --tproxy-mark 1088
当我尝试在虚拟机端(192.168.11.2)卷曲任何 IP 时,我会遇到超时,查看 Wireshark 日志,任何数据包都会从我的电脑转发到路由器。
当我将“--on-ip”的地址更改为 127.0.0.1 并在本地运行 TPROXY 服务器并监听 127.0.0.1:1088 时,一切正常。
如何让 iptables 中的 TPROXY 选项“看到”路由器的外部地址(192.168.1.1)并进行连接?
附言:我不知道 TPROXY 是否设计用于在发送数据包时与非本地地址一起工作,但是我在 Google 上搜索了很多,我可以看到 TPROXY 使用非本地地址的示例,但是当我尝试重现这些示例时,什么都不起作用。