Lap*_*sio 8 routing iptables tor packet iptables-redirect
出于好奇,我正在阅读一些关于透明 TOR 代理的教程,因为从网络的角度来看,这是一个非常有趣的话题。与仅使用tun/tap接口且我完全清楚的VPN 网关相反,TOR 代理使用单个端口。所有教程都重复魔术线:
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
Run Code Online (Sandbox Code Playgroud)
哪里eth0是输入 (LAN) 接口,9040是一些 TOR 端口。问题是,从网络的角度来看,我完全不明白为什么这样的事情是有意义的。
根据我对redirect/ dst-natchains 的理解以及它在物理路由器中的工作方式,dst-natchain 需要dst-port和dst-addr BEFORE路由决定被采取并将它们更改为其他东西。例如:
dst-nat:192.168.1.2:46364 -> 88.88.88.88:80dst-nat:192.168.1.2:46364 -> 99.99.99.99:8080并且99.99.99.99:8080是 IP 数据包流通道中的进一步链所看到的(例如filter表),这就是从现在开始离开设备后数据包的样子。
现在互联网上很多人(包括在这个stackexchange上)声称与设置为接口的本地地址redirect基本相同。有鉴于此,这条规则:dst-natdst-addr
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
Run Code Online (Sandbox Code Playgroud)
显然没有意义。如果这就是它的工作方式,那么 TOR 将获取所有带有 destination 的数据包127.0.0.1:9040。对于应用程序获取数据包并以某种方式响应它的典型应用程序(例如 Web 服务器),这完全有意义,因为毕竟这样的服务器进程无论如何都是数据包的最终目的地,所以目的地地址是 localhost 是可以的。但是TOR路由器很好......一个路由器所以它必须知道数据包的原始目的地。我错过了什么吗?并DNAT不会影响什么的本地应用程序接收?或者它是REDIRECT指令的特定行为?
小智 5
看看这个答案:透明的 SOCKS 代理如何知道要使用哪个目标 IP?
引述:
iptables 会覆盖原始目标地址,但它会记住旧的地址。然后,应用程序代码可以通过请求特殊的套接字选项 来获取它SO_ORIGINAL_DST。
| 归档时间: |
|
| 查看次数: |
6377 次 |
| 最近记录: |