给定一个具有以下 netfilter 规则的主机(路由器),以便将传入的 TCP 数据包重定向到它的 tor 代理服务:
-A PREROUTING -p tcp --syn -j REDIRECT --to-ports 9040
还给定第二台主机(客户端)配置为使用 tor 路由器作为网关:
sudo ip route add 1.2.3.4 via ${TOR_ROUTER_IP}
现在,当我建立到 1.2.3.4 的 TCP 连接 (HTTP) 时,它会在“TCP_NODELAY set”处挂起一段时间,然后最终超时:
curl -v https://1.2.3.4
* Trying 1.2.3.4...
* TCP_NODELAY set
当我运行这个命令时,我可以看到路由器上的相应计数器不断增加,使用以下命令:
iptables -t nat -L -v -n
这证实了开头提到的规则实际上得到了应用。但是,显然没有响应返回给客户端(curl 命令)。
因此,我怀疑 iptables 规则中存在错误。但是那个错误是什么,如何解决?
(旁注:我怀疑它是否相关,但路由器实际上是一个 docker 容器。)
更新:这是netstat -tulpen
路由器上的输出:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9040 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9050 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.11:36045 0.0.0.0:* LISTEN -
udp 0 0 127.0.0.11:45140 0.0.0.0:* -
udp 0 0 0.0.0.0:5353 0.0.0.0:* -