先分清是不是 DNS 的問題
「打不開網站」這句話蓋住了太多種故障,DNS 只是其中一層。先看症狀對不對得上,能省掉大半瞎折騰。
- 一個境外站台解析出
127.0.0.1、0.0.0.0,或明顯不屬於這家服務的位址:典型的污染或劫持。 - 第一次打開卡好幾秒,之後就正常:解析在逾時重試,某一級 DNS 沒回應。
- 部分網域打不開,但手上有 IP 時直接連 IP 能通:線路是好的,斷在解析這一步。
- 代理開著,某幾個站仍然打不開:可能解析發生在代理之外,也可能跟 DNS 無關。
拿兩個 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-mode 是 fake-ip 的話,系統查到的就是核心當場編的佔位位址,落在 fake-ip-range 指定的 198.18.0.0/16 網段。看到 198.18.x.x 不是污染,真正的解析在節點那一端。
所以這時在系統裡跑 nslookup 意義有限,問到的還是佔位位址,ping 它同樣沒有參考價值。要看真實結果,去連線列表看那條連線的目標網域與出口,或暫時切回 redir-host 再查。
快取、瀏覽器 DoH,和「解析對了還是打不開」
- 改完 DNS 設定先清快取。Windows 用
ipconfig /flushdns;macOS 是 mDNSResponder 那一套,指令隨版本改過幾次;Linux 看你跑的是 systemd-resolved 還是 dnsmasq。不清快取,測的還是舊紀錄。 - 瀏覽器自帶的 DoH 會繞過系統 DNS。Chrome 的「使用安全 DNS」、Firefox 的 DNS over HTTPS,排查期間先關掉,否則命令列看到的和瀏覽器用的不是一回事。
- 用戶端自己也有快取。改完
nameserver或nameserver-policy要重新載入設定,順手把舊連線斷掉。
最後一種情況值得單獨拎出來:nslookup 給的 IP 看起來完全正常,瀏覽器還是打不開。解析已經過了,接下來該查這條連線命中哪條規則、走哪個出口、節點通不通。繼續在 DNS 上改不會有結果。
排查期間別同時動三樣東西。清一次快取、只改一處、再測一次。否則最後通了你也說不清是哪一下起的作用,下次照樣卡在同一個地方。