我使用了iptables
基于示例规则集的规则集https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy,Linux 部分,本地重定向 通过Tor
,将 Tor 设置为透明代理。
我以为我已经理解了该规则集,但有一点我根本不明白:TCP 段仅在设置 SYN 标志时重定向到 Tor 侦听的端口。
例如我想去参观http://www.example.com
。我的浏览器执行 DNS 请求,获取相应的 IP 地址并向该地址发送 TCP 段,并设置 SYN 标志。
根据规则集,该段被重定向到 Tor 端口,因此 Tor 充当代理,将 IP 数据包路由到http://www.example.com
网站服务器,并将答案从网站服务器传递回我的浏览器。我的浏览器收到一个数据包,其中源 IP 是来自服务器的 IP,并且 ACK 标志设置在 TCP 有效负载中,对吗?
因此,我的浏览器将不再设置 SYN 标志的下一个 TCP 段发送到 www.example.com 的 IP 地址。
但是,由于未设置 SYN 标志,NAT 表中没有相应的规则。因此,它不应被重定向或随后在输出表中被接受。
尽管如此,一切都运转良好。我错过了什么?
答案1
处理第一个数据包之后的数据包的规则ACK
是:
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
它本质上意味着:让属于已建立会话或与已建立会话相关的所有数据包通过。来自您的机器的、在初始数据包之后的所有数据包SYN
(假设有对此的有效回复)都是已建立会话的一部分,因此它们将通过。
(RELATED
用于像 FTP 这样的协议,如果您启用了该模块,其中“正常”会话可能涉及多个 TCP 会话。)
请注意,由于您也设置了到 Tor 的 DNS 重定向,并使用这是不正确的,只有一些后缀映射到该本地范围(默认情况AutomapHostsOnResolve
,您的浏览器(和其他软件)将看到的 IP 地址不是 www.example.com 的 IP 地址,而是您指定的范围内的虚拟地址 ( 10.192.0.0/10
)。.exit
下.onion
)。
答案2
以下摘录自开头第 5 章,控制 NAT 的内容在本 NAT 指南从2002年开始。
_____ _____
/ \ / \
PREROUTING -->[Routing ]----------------->POSTROUTING----->
\D-NAT/ [Decision] \S-NAT/
| ^
| |
--------> Local Process ------
”在上述每一点,当数据包通过时,我们都会查找它与哪个连接相关联。如果是新连接,我们会在 NAT 表中查找相应的链,看看如何处理它。它给出的答案将适用于该连接上所有未来的数据包。”