先分清是不是 DNS 的问题

「打不开网站」这句话盖住了太多种故障,DNS 只是其中一层。先看症状对不对得上,能省掉大半瞎折腾。

  • 一个境外站点解析出 127.0.0.10.0.0.0,或者明显不属于这家服务的地址:典型的污染或劫持。
  • 第一次打开卡好几秒,之后就正常:解析在超时重试,某一级 DNS 没回应。
  • 部分域名打不开,但手上有 IP 时直接访问 IP 能通:链路是好的,断在解析这一步。
  • 代理开着,某几个站仍然打不开:可能解析发生在代理之外,也可能跟 DNS 无关。
合作推荐订阅链接从哪来?本站合作机场注册即送 1GB 香港高速体验流量,可直接一键导入。获取高速节点

拿两个 DNS 问同一个域名

最快的判断是同一个域名问两次:一次走系统当前的 DNS,一次指定公共 DNS,看两边差多少。

nslookup www.example.com
nslookup www.example.com 8.8.8.8
dig +short www.example.com @1.1.1.1

一边给出能打开的地址、另一边是 127.0.0.1 或完全不相干的段,基本可以认定默认那条链路上的解析被动过手脚。提醒一句:明文 53 端口问 8.8.8.8 也可能被中途伪造,这个对照说明两边「不一样」,不保证第二个结果是真的。

两边结果一致但都慢,问题多半不在解析内容而在链路。nslookup 超时后会自己重试,命令要等好几秒才吐结果就是信号。

开了 Fake-IP,你查到的地址本来就是假的

配置里 dns.enhanced-modefake-ip 的话,系统查到的就是内核当场编的占位地址,落在 fake-ip-range 指定的 198.18.0.0/16 段。看到 198.18.x.x 不是污染,真正的解析在节点那一端。

所以这时在系统里跑 nslookup 意义有限,问到的还是占位地址,ping 它同样没有参考价值。要看真实结果,去连接列表看那条连接的目标域名和出口,或临时切回 redir-host 再查。

缓存、浏览器 DoH,和「解析对了还是打不开」

  1. 改完 DNS 配置先清缓存。Windows 用 ipconfig /flushdns;macOS 是 mDNSResponder 那一套,命令随版本变过几次;Linux 看你跑的是 systemd-resolved 还是 dnsmasq。不清缓存,测的还是旧记录。
  2. 浏览器自带的 DoH 会绕过系统 DNS。Chrome 的「使用安全 DNS」、Firefox 的 DNS over HTTPS,排查期间先关掉,否则命令行看到的和浏览器用的不是一回事。
  3. 客户端自己也有缓存。改完 nameservernameserver-policy 要重载配置,顺手把旧连接断掉。

最后一种情况值得单独拎出来:nslookup 给的 IP 看着完全正常,浏览器还是打不开。解析已经过了,接下来该查这条连接命中哪条规则、走哪个出口、节点通不通。继续在 DNS 上改不会有结果。

排查期间别同时动三样东西。清一次缓存、只改一处、再测一次。否则最后通了你也说不清是哪一下起的作用,下次照样卡在同一个地方。