Tor 与 VPN 有什么区别,您该选哪种?
Tor 将身份与访问目标分散给不同中继,VPN 则把完整元数据交给运营商。了解 ISP、VPN 和网站各自能看到什么,以及为何自购 VPS 不能提供匿名性。
Tor 与 VPN:您实际需要哪一种
Tor 和 VPN 都会将您的流量经由不属于您的计算机转发,但它们解决的是不同的问题。VPN(虚拟专用网络)会将您对互联网服务提供商的信任转移给一家 VPN 公司。该公司可以看到您的真实地址,以及您访问的每个目标地址。Tor 会将这种信任分散到由不同人员运行的三个中继节点,因此没有任何一个中继节点同时知道您的身份和访问目标。请先明确您要隐藏的对象,再进行选择。
如果您要隐藏的对象是您当前接入的网络,VPN 是合适的工具。如果您要隐藏的对象是网站本身,或任何能够要求某一家公司的记录提供访问权限的人,Tor 是合适的工具。本指南的其余内容将详细解释这两句话。
跟踪两种设计中的同一个请求
以一个普通请求为例:您的浏览器打开 https://news.example.com。无论采用哪种设计,TLS(传输层安全性)都会保护页面内容,因此中间人无法读取文章。关键在于元数据:谁能获知您的 IP 地址,谁能获知目标地址,以及谁能将这两条信息关联起来。隐私工具用于将这两条信息分开。VPN 将这两条信息的掌握者转移给另一方。Tor 则将它们拆分。
使用 VPN 时各方能看到什么
您的客户端会加密每个数据包,并将其发送到一个端点。从该端点开始,流量会恢复为普通流量。
- 您的 ISP(互联网服务提供商)可以看到您的线路与一个 VPN 服务器地址之间的加密数据包。它可以看到流量大小和时间。只要 DNS(域名系统)查询也经过隧道,它就看不到目标主机名。
- VPN 运营商一侧可以看到您的真实 IP 地址,另一侧可以看到每个目标地址,以及对应的时间和数据包大小。数据流的两端都会经过同一台机器。
- 目标站点可以看到 VPN 的出口地址,以及浏览器发送的所有可识别信息。
因此,VPN 不会提供匿名性。它只是将观察者从您的 ISP 转移到 VPN 提供商。当问题来自本地网络,或者 ISP 会过滤或转售其看到的信息时,这确实有帮助。但对于您访问的站点,这完全没有帮助,因为您的流量仍会从一家准确知道您身份并保存付款记录的公司,以一条流到达该站点。
“无日志”声明就是整个产品的核心,也是您无法从本地验证的部分。您可以确认隧道已建立。您可以确认 DNS 没有泄漏。但您无法确认运营商会将什么写入磁盘。这就是您接受的取舍:由您选择的一家公司持有完整的信息。
检查这个会悄悄绕过隧道的泄漏:
resolvectl status
curl -s https://ifconfig.me; echoifconfig.me输出的地址应为 VPN 出口地址。承载默认路由的链路所列出的 DNS 服务器应为隧道的解析器。如果在 192.168.1.1 仍然列出本地路由器,说明名称查询正在通过本地链路以明文传输。这是因为到该路由器的路由位于本地链路上,比隧道的默认路由更具体。您的流量是私密的,但访问站点列表并不私密。从 WireGuard 隧道泄漏的 DNS 查询介绍了修复方法。
使用 Tor 时各方能看到什么
Tor 从目录机构发布的、经过签名的中继列表(即共识)中选择 3 个中继,构建一条电路。客户端为数据添加分层加密,每个中继对应一层。每个中继移除一层,只知道下一个跳点,然后继续转发其余内容。正因为有这些加密层,路径中的任何一方都无法同时掌握这两个事实。
- 您的 ISP 只能看到发往一个 guard 中继的加密流量。由于中继地址是公开的,ISP 可以判断您正在使用 Tor,但无法知道您访问了什么。
- guard 中继可以看到您的真实 IP 地址。它无法看到目标地址,因为标识站点的那部分消息仍由发往后续中继的加密层保护。
- 中间中继只能看到一侧是 guard,另一侧是 exit。它既看不到您,也看不到目标。设置中间中继的目的,是让 guard 和 exit 永远不会直接通信。
- exit 中继可以看到目标地址,以及流量离开 Tor 网络时的内容。它看到的是中间中继的地址,而不是您的地址。使用 HTTPS 时,它可以获知主机名和连接元数据,但看不到页面内容。
- 目标站点可以看到 exit 中继的地址。该地址会出现在公开的 exit 列表中。目标站点还可以看到浏览器主动提供的其他信息。
要将您与目标站点关联起来,需要同时控制 guard 和 exit。这就是 Tor 的设计。也正因为如此,客户端会连续数月使用同一个 guard,而不是每次启动都选择新的 guard:如果不断更换入口,中继就会有更多机会反复成为您的 guard。
电路不是永久的。新的连接大约每 10 分钟切换到一条新电路,而已经建立的流会继续使用建立时所在的电路。一个长时间运行的下载和您 15 分钟后打开的标签页,通常会通过不同的 exit 发出。
三个跳点如何建立,同时不让任何中继获知其他中继
客户端不会把中继列表交给 guard。它会先与 guard 协商密钥,然后通过 guard 发送请求,要求 guard 将电路延伸到中间中继;接着再通过该跳点发送请求,将电路延伸到 exit。每个中继只会获知下一个需要与之通信的邻居,并且每个跳点都有自己的密钥,其他跳点无法看到该密钥。因此,中间中继无法通过检查内容得知 exit 的角色;即使某个中继记录它处理的所有内容,它记录到的也只是其中一个片段。
安装并验证路径:
sudo apt update && sudo apt install -y tor
systemctl status tor@default
journalctl -u tor@default -n 20
curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip日志应到达 Bootstrapped 100% (done): Done。curl 应输出 {"IsTor":true,"IP":"..."},以及一个您不认识的地址,这就是当前使用的 exit。如果 IsTor 是 false,说明请求从未经过代理。Ubuntu 打包的 Tor 可能落后于当前版本;如果需要跟踪上游版本,Tor Project 提供了自己的 apt 软件源。
该命令中有一个容易忽略的问题。--socks5 会让 curl 自行解析主机名,然后通过代理发送解析出的地址,因此您使用的常规解析器会获知访问过的每个名称。--socks5-hostname 会将名称发送给 Tor,并让 exit 负责解析。使用的是同一条隧道,但泄露情况完全不同。Tor Browser 和 torsocks 可以正确处理这一点。手动配置的工具通常不能。
Tor 只承载 TCP 流。它无法承载 UDP,因此 ping 1.1.1.1 不会经过 Tor,基于 UDP 的 VPN 协议也无法在 Tor 内部运行。任何忽略代理设置的程序,都会使用常规路由和常规地址,且不会发出任何警告。因此,系统范围的 Tor 通常通过独立主机上的透明代理实现,而不是通过环境变量实现。
信任实际集中在哪里
VPN 会集中信任。一家公司掌握您的身份、账单记录和完整的流量模式,而您的保护取决于它承诺不保留日志。只要这一承诺有效,这种设计就简洁、快速且易于理解。如果承诺因传票、数据泄露或谎言而失效,所有流量的保护都会同时完全失效。
Tor 会分散信任。3 个大多互不相识的参与方分别持有一部分信息,而单独的一部分信息价值很低。该设计不要求任何一方保持诚信即可运行,但要求其中足够多的参与方彼此独立。为此,您需要接受较低的速度、仅支持 TCP,以及这样一个网络:其中某些中继节点确实由想要监控您的人员运行。Tor 对恶意中继节点的应对方式是:单个中继节点永远不够。
VPN 适用的场景
- 您不信任当前网络:酒店、机场、会议厅或房东提供的路由器。网络运营方只能看到加密隧道,看不到其他内容。
- 您希望访问自己的计算机,或通过由您控制的固定地址访问外部网络。
- 您需要高速连接和 UDP:视频通话、游戏、大文件传输、备份。
- 您希望使用不会触发网站额外验证的稳定地址。整个互联网的大部分网站都会封锁 Tor 出口节点,或要求完成 CAPTCHA 验证。
以上场景说明了为什么应当在 VPS 上运行自己的 VPN,而不是购买订阅服务;而自行配置的WireGuard 服务器可以提供一个隧道,其日志记录策略由您自己拥有的配置文件决定。如果您还希望在同一隧道之上使用设备到设备的密钥管理,请阅读纯 WireGuard 与 Tailscale 的区别。这些工具都非常适合处理上述场景,但都无法解决下一节中的问题。
Tor 适用的场景
- 威胁模型包括目标网站,或任何能够要求单家公司提供记录的人员。
- 您正在阅读或发布某些内容;如果这些活动被追溯到您的网络线路,可能会对您造成不利影响。
- 您需要 onion service:流量始终留在网络内部,不经过出口中继,并且服务器地址保持隐藏。
- 您可以接受页面加载缓慢、CAPTCHA,以及偶尔出现的
403 Forbidden。
请使用 Tor Browser,不要将日常浏览器指向 9050 端口。浏览器是这层保护的一半,后下下个章节会解释原因。
为什么您租用的 VPS 在匿名性方面不如商业 VPN
这是人们经常弄反的一点。您租用的 VPS 是一份登记了您姓名的租约。注册邮箱、银行卡、账单和支持工单,都与该 IP 地址一起保存在同一家公司的数据库中。无需攻破任何系统,就能将这个地址关联到您。相关信息本来就已记录在案,出于日常账务原因被保存,并且任何能够以法律手段要求提供商答复的人都可以获取。
第二个问题是共享用户群。商业 VPN 的出口地址会在同一时间由许多客户共享,因此仅凭该地址无法指向某一个人。您的 VPS 地址只属于您。今天和下个月,从该地址发出的每个请求都是您发出的。由于该地址不会轮换,目标方即使完全不使用 cookie,也可以跨数月建立您的行为画像。
这并不意味着自托管 VPN 没有价值。它非常适合在您无法控制的网络上加密流量,也适合从任何位置访问您自己的服务。它只是匿名工具,而将其作为匿名工具使用才是问题所在。若要了解您的提供商在 VPS 本机上实际能够或无法看到哪些内容,请阅读 VPS 托管实际有多安全。
Tor 和 VPN 都无法解决的问题
- 浏览器指纹。您的用户代理、屏幕尺寸、时区、已安装字体、语言和 canvas 渲染结果会组合成一个通常具有唯一性的值,并且会随您使用的每个 IP 地址一起被识别。Tor Browser 通过让所有用户呈现相同特征,并按固定步长调整窗口大小来应对这一问题。通过 SOCKS 代理连接的普通浏览器仍会保留自身的指纹和 Cookie。
- 登录。只要您登录了一个知道您姓名的账户,网络层面的匿名性就不再重要。在家中登录一次,再通过 Tor 登录同一个账户,两个会话就会被关联起来。
- 终端本身仍会记录的任何内容:您输入的内容、购买的商品以及搜索内容。
- 端到端关联。能够同时监控您的网络线路和出口节点的人,可以根据时间和数据包流量进行对应,从而匹配通信两端。Tor 明确表示,它无法防御能够同时看到两端的攻击者。
可以同时使用 Tor 和 VPN 吗?
VPN over Tor 指先连接 VPN,再在 VPN 内运行 Tor。这样,您的 ISP 只能看到 VPN,而 guard relay 看到的是 VPN 的地址,而不是您的地址。但您也将一家掌握您姓名和银行卡信息的公司置于一个旨在避免此类关联的系统之前。只有在一种情况下,这样做才值得:您的网络环境会因使用 Tor 而带来风险,且您没有更好的选择。
Tor over VPN 指流量离开 Tor 网络后再进入 VPN 账户。这种方式更难配置,通常也更差。该账户关联了您的付款记录,因此您把稳定身份绑定到了刚才仍保持匿名的流量上。
如果您只是想向 ISP 隐藏 Tor 的使用情况,受支持的方案是使用 bridge:它是一个不在公开共识中的入口点,再配合 obfs4 或 Snowflake 等可插拔传输,使流量难以被分类。Tor Browser 自带这两种传输方式,而且不需要将您的姓名提供给第三方公司。
FAQ
Tor 只是免费的 VPN 吗?
不是。VPN 会将流量发送到由一家企业运营的一台服务器,该企业可以看到您的真实地址和每个目标地址,因此它只是用您选择的 VPN 提供商替代了 ISP。Tor 会将流量发送到由不同人员运营的 3 个中继节点。入口中继可以看到您,但看不到网站;出口中继可以看到网站,但看不到您。Tor 还仅支持 TCP,速度明显更慢,并且会被许多网站屏蔽或要求额外验证,因此不能直接替代 VPN 的日常用途。
我的 ISP 能知道我在使用 Tor 吗?
默认情况下可以。中继地址会发布在公共共识中,因此您的提供商可以看到您正在连接已知的入口中继。它无法看到您访问了哪些网站。要隐藏 Tor 的使用本身,Tor Browser 提供了使用可插拔传输的网桥,例如 obfs4 或 Snowflake。网桥会通过不在公共列表中的入口点连接。将 VPN 放在 Tor 前面也可以向 ISP 隐藏 Tor 的使用,但 VPN 运营商会知道这一事实。
在自己的 VPS 上运行 VPN 能让我匿名吗?
不能。服务器以您的名义租用,并使用您的银行卡付款,因此提供商的账单记录已经将该地址与您关联起来;只要向提供商提出请求,就可以调取这些记录。该地址也仅由您使用,因此所有从该地址发出的流量都属于同一个人,并且只要您继续保留服务器,就始终可以关联。自托管 VPN 是防止本地网络窥探的有效隐私工具,但对于任何可以向您的提供商提出查询的人来说,它不是可靠的匿名工具。
为什么使用 Tor 时,网站会屏蔽我或显示 CAPTCHA?
因为出口中继地址是公开的,并且由大量用户共享,任何一个用户发起的滥用行为都会影响您借用的地址。内容分发网络会降低这些地址的信誉评分,并返回验证挑战、一个 403 Forbidden 或拒绝提交的注册表单。这不是您本地可以解决的问题。建立新的电路会为您分配不同的出口节点,新节点有时具有更好的信誉。
使用 VPN 后,我仍然会泄露 DNS 查询吗?
可能,而且这种情况很常见。如果使用全隧道,但未为隧道接口设置解析器,客户端会继续使用从本地网络获取的解析器。由于到该解析器的路由位于本地链路上,它会优先于隧道的默认路由。这样,DNS 查询会以明文发出,而其他流量仍会加密。运行 resolvectl status,确认承载默认路由的链路所列出的 DNS 服务器是隧道的解析器,而不是本地路由器。