「能上网」和「解析没外泄」是两回事。代理连着,DNS 却还在问运营商,这种情况非常常见。
三分钟自测
- 浏览器打开 dnsleaktest.com 或 browserleaks.com/dns 跑一次测试。结果里列出的服务器如果是你宽带运营商的名字,那就是泄漏了。
- Connections 页面看域名列:显示的是完整域名而不是一串裸 IP,说明解析发生在 Clash 内部,这是好现象,页面用法见 Connections 页面详解。
- 命令行
nslookup www.example.com查到的是本机网卡的 DNS,它不经过系统代理,所以这一条只在 TUN 模式下有参考价值。
fake-ip 模式下的正常现象
fake-ip 模式里浏览器拿到的是 198.18.x.x 这类保留地址,真正的解析在建立连接时才由出口那头完成。所以测试站可能一个「DNS 服务器」都列不出来,或者列出的是节点所在地的解析器——这都正常,机制见 fake-ip 与 redir-host 模式详解。
泄漏了怎么堵
- 只开了系统代理没开 TUN:浏览器以外的程序自己解析,这是设计如此,不是 bug。要全局接管就得上 TUN。
dns.enable是 false:内核根本没接管 DNS,把它打开。- nameserver 里写着运营商的 DNS:换成加密 DNS 或公共 DNS,别用宽带自动下发的那个。
- 浏览器自己开了安全 DNS:Chrome 和 Firefox 的 DoH 会绕过系统设置自行解析。测试站显示的服务器是 Cloudflare 或 Google 而你从没配过,多半就是它。
顺带一提:只是想确认代理本身有没有生效,有更简单的办法,见 开启系统代理与验证代理是否生效。