🌐 Tor 中的 DNS 是怎么工作的,为什么试图“优化”它反而会破坏匿名性?

你真的了解 DNS 是什么吗?哪怕你觉得懂,还是建议看完下面这段解释。

DNS 是什么?

简单来说:
当你访问 torproject.org,背后其实是访问了 116.202.120.166 这个 IP 地址,域名只是为了方便人类记忆。DNS 就是把 “人类能读懂的地址” 转换成 “机器能识别的 IP 地址” 的系统。

这些域名-IP 对应表存储在全球分布的 DNS 服务器 上。大多数人使用的 DNS 服务器由 ISP(运营商)决定,也可以自行指定,比如用 Google 的 8.8.8.8。

实际结构更复杂,还涉及 NS/CDN 等中间层,但为简化理解,我们把功能都归类到 DNS 上。


:compass: Tor 中 DNS 是如何工作的?

当你使用 Tor 浏览网页时,不是你自己选择 DNS 服务器,而是由 Tor 网络的 出口节点(Exit Node) 选择。这意味着:

  • 每次构建新的 Tor 路由链条时,出口节点都会更换,DNS 服务器也可能不同;
  • 你无法控制出口节点使用哪个 DNS;
  • Tor Project 也无法控制出口节点的 DNS 设置。

例如:2018 年 Tor Project 发现 24% 的 DNS 请求都发到了 Google 的服务器,后来又演变为 Cloudflare 和 Google 一起占了 31%。这引发了“去中心化”和隐私上的担忧。


:police_car_light: 什么是 DNS 泄露?它如何导致你被识别(去匿名化)?

DNS 泄露是指:本该通过 Tor 网络发出的 DNS 请求,却绕过 Tor,直接通过本地网络发出

危害非常大:

国家机构可以通过以下方式追踪你:

  1. 监控 DNS 请求记录,得知你在某个时间访问了某些网站;
  2. 比对同一时间段访问同一网站的 DNS 请求记录,找出是谁发起的请求;
  3. 多次重复这个过程,逐步缩小范围,最终可能锁定你的真实身份。

:magnifying_glass_tilted_left: 如何检测 DNS 是否泄露?

你可以访问:https://www.dnsleaktest.com

如果测试结果显示的 DNS 服务器不在你的国家或地区,通常说明没有 DNS 泄露。建议多次更换 Tor 路由链条重新测试,结果应有所变化。


:hammer_and_wrench: 如何避免 DNS 泄露?

第一条:别乱配置 Tor!

最常见的错误:用普通浏览器 + socks5 手动设置 Tor 代理。这样不仅可能导致 DNS 泄露,还可能泄露浏览器指纹、系统信息等。

正确做法:

  • 使用官方的 Tor Browser
  • 或者更高级的:使用 Whonix(一套设计用于匿名通信的系统)

:warning: 程序通过 socks5 代理也可能泄露 DNS

许多程序(如 XMPP 聊天客户端、FTP 工具等)即使设置了 socks5 代理,也不一定把 DNS 请求通过 Tor 发送,导致泄露。

如何安全使用这类程序?

  • 简单方案:使用 torsocks 命令,例如:
torsocks curl https://example.com

torsocks 可以自动接管程序的网络流量,强制走 Tor。

  • 推荐方案:使用 Whonix Workstation 运行程序,它通过 Gateway 强制所有流量走 Tor,防止任何泄露。

:thinking: 那为什么我不能自己设定 DNS,比如用 DoH(DNS over HTTPS)?

Tor 不允许你自己设置 DNS,就是怕你“作死”。

原因如下:

  • 如果你设定了自己的 DNS(比如 Google 的 DoH),那么你的行为就和大多数 Tor 用户不一样,容易暴露身份特征;
  • 出口节点仍然有能力忽略你的 DNS 查询,返回伪造 IP;
  • 你失去了 “每次更换 DNS” 的匿名特性,反而变得更集中、更容易追踪;
  • DNS 缓存开启(比如 UseDNSCache)也会造成“伪造 IP 依然有效”的问题,即便换了路由链条仍会命中假地址。

总结一句话:你越折腾,匿名性越差。


:shield: 如何验证自己系统中是否误用了 DNS 缓存?

执行以下命令检查配置文件是否存在相关缓存设置:

sudo egrep -inR --color 'DNSCache|CacheDNS|CacheIPv.DNS|UseIPv.Cache' /etc/tor/tor* /etc/torrc.d/ /usr/local/etc/torrc.d/ ~/.torrc*

如果什么也没输出,就说明没问题;如果有设置了 CacheDNS/UseDNSCache 等字段,把它们删除即可。


:white_check_mark: 总结:Tor 中正确的 DNS 使用姿势

行为 是否推荐
使用官方 Tor Browser :white_check_mark: 推荐
使用 Whonix + Firefox/Tor Browser :white_check_mark: 强烈推荐
使用 socks5 配合其他浏览器 :cross_mark: 不推荐
在浏览器中启用 DoH :cross_mark: 不推荐(Tor 中)
系统开启 DNS 缓存 :cross_mark: 不推荐
自行设定 DNS 服务器 :cross_mark: 不推荐
使用 torsocks 启动应用程序 :white_check_mark: 建议

:firecracker: 最后:真正破坏匿名性的不是 Tor,而是用户自己的误操作!

结论可能让人意外:Tor 本身的设计其实非常合理,真正造成匿名性破坏的,是我们自己“优化”、“改进”时犯下的错误。