把 VPN、Tor 和应用代理叠在一起,感觉像是在成倍增加隐私,实际上也是在成倍增加连接可能死掉的位置。常见的结果是浏览器一直转圈,而三个工具都自称状态正常。一次性把三个设置全改掉,你就失去了唯一能判断是谁在撒谎的线索。

先按顺序画出你想要的路径,标明每个连接由哪个程序发起,以及每一步由谁来解析域名。

层次不会相加,只会相互作用

VPN 放在 Tor 前面,意味着Tor 客户端的入口连接是在隧道里走的。把 VPN 套在 Tor 后面,意思是 VPN 客户端自己的端点必须能通过 Tor 访问到,这是完全不同的要求。浏览器代理又多出一跳,操作系统对它一无所知。三种排列,三份各自独立的依赖清单。

每种排列都会改变谁能解析、谁能承载,以及谁看见第一个数据包。其中只有一种才是你真正想要的配置。

把直连路径也画进图里。备用路由、分离隧道例外或代理绕过,都可能让页面打开,却悄悄跳过了你想测的那条链路,而这种成功比失败更具误导性。

顺序决定能承载什么

Tor 通过它的 SOCKS 接口承载 TCP 流,客户端如果让代理去解析主机名,查询就会留在电路内部。UDP 在常规配置下不走这条路,所以要在 Tor 里嵌套 WireGuard 隧道,中途必须再加一个 TCP 中继。

OpenVPN 可以被强制走 TCP,所以这种排列至少还描述得清楚。它也慢得多、脆弱得多,而且它出问题时的表现跟端口被封一模一样。要把这两者区分开,花的时间会比修复其中任何一个都长。

解析是另一半。用 --socks5-hostname时代理去解析目的地,而单纯用 --socks5会先问本地解析器,把域名泄露到电路之外。这一个参数就决定了 域名查询是留在链路里,还是交给你的 ISP。

OrderWhat must resolve the endpointWhat usually breaks
VPN, then TorThe tunnel's resolverEntry guards blocked by the VPN provider's filters
Tor, then VPNThe SOCKS proxy, remotelyUDP transports, which Tor does not carry
App proxy on topThe application itselfProxy bypass rules and cached connections

定位第一处断掉的边界

按数据包经过的顺序测试每一段,用无害的请求,遇到第一个失败就停下。记下先跑了哪条命令,因为顺序本身就是证据的一部分。两条命令可以区分是电路死了还是出口死了:

curl -s --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip
curl -4 -s https://api.ipify.org; echo

第一条判断请求到底能不能通过 SOCKS 代理完成,第二条显示当前网络实际呈现的地址。如果第一条失败而第二条成功,问题就在 Tor 客户端或其之前。如果两条都成功而浏览器仍然失败,那说明应用走的是跟 shell 不同的路径。

公网 IP 页面只能描述最后一个可见出口。它没法告诉你前面经过了几跳,所以要把它和每个工具受支持的状态输出配对看,不要把单个数字当成链路图。

什么时候该停止再加层

如果你没法用一句话说清某一层贡献了什么,就把它去掉。目的不明的链路,凌晨三点没人能修;而一个说不清楚的跳,带来的隐私收益通常小于你损失的可用量。

如果某一层确实值得保留,先单独测它,再加上下一层,用同样两条命令重新确认路径。日常使用前要恢复完整链路,并且保持 TLS 校验和认证开启;为了让页面打开而接受的证书警告,是一种绕行手段,不是修复。趁记忆还新,把最终定下的顺序记下来。

把顺序写下来,包括每一层由哪个解析器作答。你能描述出来的可用链路,扛得住下一次更新;而靠反复试凑出来的可用链路,会随更新一起消失。写上日期和版本号,这样以后再出问题,可以和已知正常的状态作对比,而不是凭记忆争论。文本文件里十行字,能省掉一晚上的猜测。

相关文章