你连上 VPN 客户端,等隧道建立,然后打开 Tor Browser,让它构建一条链路。正是这个不起眼的顺序决定了谁能看到什么。在这个顺序里,Tor 的入口中继看到的是你 VPN 的出口地址,而你的 VPN 服务商看到的是一个公开的守卫中继。反过来做,两个观察者都会改变。两种顺序都值得走一遍,因为客户端设置会悄悄破坏人们以为已经生效的顺序,而抓住它的检查在两种情况下是同一套。

从顺序开始,而不是从产品开始

有两种安排都被叫作「VPN 配 Tor」,常见的只有第一种。在 Tor over VPN 里,Tor 启动时隧道已经建好,所以 tor 进程像发送其他出站流量一样,把自己的守卫连接送进隧道。在 VPN over Tor 里,先起来的是 Tor,VPN 会话本身穿过链路,从 Tor 出口到达服务商。

两者的区别在于最外层链路远端站的是哪个地址。每个观察者只看到上一跳,永远看不到整条路径:守卫看到的是谁连上了它,VPN 服务器看到的是谁连上了它。Tor 不会把你本地的隧道地址带到外面,协议里也没有能这么做的字段。

两种顺序里,目标网站看到的仍然是一个 Tor 出口,也没有哪种顺序改变该网站从你的登录中学到的东西。差别只限于两端。

Tor 的入口中继看到什么

入口,也就是守卫,在一个中继端口上接受普通的 TCP 连接,并开始与客户端做 TLS 握手。在 Tor over VPN 的配置里,这个连接的来源是你的 VPN 出口。在 Tor 优先的配置里,这个来源是你的机器用来接入 Tor 网络的地址,通常是你的家庭宽带。

这回答了问题的 IP 那一半,但前提是隧道确实承载了这个连接。Tor 进程用它自己的套接字到达守卫,而这个套接字不受 Tor Browser 代理设置的管辖。浏览器通过 9150 端口上的 SOCKS 与随附的 tor 进程通信,随后 tor 用内核路由表打开自己的连接。torrc 里的 Socks5Proxy 行,或者客户端传输,会改变这条路径。别的都不会。

在 Linux 上可以直接从机器上读出答案。问内核:对任意一个公网地址,它会用哪个接口;然后看已建立连接的本地地址:

ip route get 203.0.113.10
sudo ss -tnp | grep -i tor

如果路由显示 dev wg0 或 dev tun0,并且已建立连接的本地地址就是隧道地址,那么 Tor 在 VPN 里面。如果路由指的是你的物理接口,那它就在外面,客户端自己的指示灯说什么都没用。

你的 VPN 服务商能看到什么

服务商终结你的 VPN 会话,所以它看得到你连接了哪些地址。守卫中继的地址发布在公开共识里,端口也众所周知,所以匹配一个只是查表,不是深度包检测。服务商不需要攻破 Tor 就能知道某个会话是 Tor。

它看不到的是链路的其余部分。中间中继和出口在 Tor 内部选择,服务商只处理通向守卫的那一段。页面内容留在出口终止的 TLS 里,Tor 流量的域名解析也在出口完成,所以服务商那边没有任何 DNS 查询可以与目的地对应。

带 obfs4 的网桥改变的是查询,不是拓扑。网桥地址不在公开中继列表里,流量也被塑造成不像 Tor,所以只比对地址的运营方不会标记它。会话仍然来自你的 VPN 客户端,服务商仍然只看到一个端点、一个流量和一个时间表。

有能力不等于有留存政策

能观察连接的操作方并没有承诺保存它。日志是另一个决定,写在政策里,受司法辖区限制,只能用你已经信任的证据来核对。「无日志」的标签并不改变上面描述的网络角色。

账户身份通常比出口地址更重要。 如果你用邮箱地址登录,或者用银行卡付款,服务商不需要记录任何一个目的地就能把会话和你关联起来。轮换出口 IP 对此毫无作用。

在相信任何一个答案之前,先检查覆盖范围

大多数以为自己在通过 VPN 使用 Tor 的人,只做到了一部分。排除 Tor Browser 的分流、只覆盖浏览器却不覆盖 tor 服务的断网开关、隧道建立之前就启动的开机单元,以及绕过隧道的 IPv6 路径,是常见的四种。

读客户端的显示界面这四种都测不出来。能测出来的是:让 Tor Browser 保持运行,把隧道断掉,观察守卫连接是否还在物理接口上。

我检查的顺序,遇到第一处失败就停下:

  • ip route get 203.0.113.10 返回隧道设备。
  • ss -tnp | grep -i tor 显示带隧道本地地址的守卫连接。
  • ip -6 route 在隧道之外没有默认路由,或者客户端里 IPv6 是关闭的。
  • 断开 VPN 会终止或改写 tor 连接,而不是把它留在物理链路上。

哪种顺序适合你要防的对象

两种顺序都藏起一些东西,也都暴露一些东西,所以答案取决于你在意哪个观察者。

ObserverTor over VPNVPN over Tor
Your ISP or local networkSees a VPN connection, not TorSees a Tor guard connection
Your VPN providerSees Tor use, and your home addressSees a Tor exit as the client, not your home address
Tor entry relaySees the VPN exitSees your home address
Destination websiteSees a Tor exitSees a Tor exit

按列读下去,直到某一行对上你要阻止的事。如果你担心的是会记录或封锁 Tor 的本地网络或运营商,Tor over VPN 能处理。如果你担心的是 VPN 运营方知道你的家庭住址,VPN over Tor 能处理,代价是把 Tor 的使用暴露给你自己的网络,把家庭住址暴露给守卫。

两种安排都不会让两端同时失明。增加一个观察者并不会去掉另一个。Tor Project 关于把 VPN 和 Tor 一起用的说明从另一面讲了同一件事:隧道改变的是谁被信任、存在哪些故障路径,所以在没决定要藏什么之前,它不是一项可以随手加上去的升级。

先决定观察者,再选顺序,然后用 ip route get 和 ss 验证,而不是看客户端的指示灯。如果观察者是能强迫 VPN 服务商本身的人,任何顺序选择都解决不了。

相关文章