Clash 已連接但網頁打不開:從系統代理到 DNS 的逐項排查清單
代理顯示已連接卻無法上網,依序檢查:系統代理是否生效、埠是否被佔用、節點是否可用、DNS 是否被污染、規則是否誤匹配,每一項都給出驗證指令與復原方式。
客戶端介面顯示「已連接」,狀態燈是綠色,節點延遲數字也正常,但瀏覽器打開任何網頁都是轉圈或報錯——這是使用 Clash 過程中最常見的一類問題,原因往往不在節點本身,而在流量從系統到客戶端再到出口這條鏈路上的某一環。以下按出現機率從高到低排列五個檢查點,每個點都給出可以直接執行的驗證指令,不用瞎猜。
第一步:確認系統代理確實生效
客戶端顯示「已連接」只代表核心程序在運行、監聽埠已開啟,不代表系統流量真的走了這個埠。很多情況下使用者開啟了 Clash 自帶的「設為系統代理」開關,但系統層級的代理設定被其他軟體覆蓋,或者瀏覽器用了獨立的代理設定,導致流量根本沒進 Clash。
- Windows:打開「設定 → 網路和網際網路 → 代理伺服器」,確認「使用設定腳本」或「手動設定代理伺服器」裡的位址與埠跟客戶端裡顯示的一致。
- macOS:打開「系統設定 → 網路 → 進階 → 代理伺服器」,檢查「網頁代理伺服器(HTTP)」與「安全網頁代理伺服器(HTTPS)」是否指向 127.0.0.1 與客戶端埠。
- 瀏覽器另外設定了代理外掛(如 SwitchyOmega)時,系統代理再怎麼改都不會影響該瀏覽器,需要在外掛裡同步核對。
如果使用 TUN 模式,系統代理這一步可以忽略——TUN 是在網卡層接管全部流量,不依賴 HTTP/SOCKS 代理設定,但要確認 TUN 已經在客戶端裡真正開啟,而不是設定檔寫了卻沒啟用。
第二步:排查埠佔用與衝突
Clash 預設監聽 7890(HTTP/SOCKS 混合埠)與 9090(外部控制埠)。如果本機同時跑著其他代理軟體、虛擬機網路元件或者上一次沒有正常退出的 Clash 程序,埠可能被佔用,客戶端表面上顯示運行正常,實際監聽卻失敗。
netstat -ano | findstr 7890
lsof -i :7890
如果查到埠被非 Clash 程序佔用,先結束佔用該埠的程序,或把 Clash 的監聽埠改成其他數值(如 7891),再重啟客戶端。同時留意工作管理器 / 活動監視器裡是否殘留了多個 clash / mihomo 背景程序,重複程序之間會互相干擾。
第三步:驗證節點本身是否可用
節點延遲測出來是幾十毫秒,不代表節點真的能連通目標網站——測速工具通常只測到落地伺服器的 TCP 握手,不代表出口 IP 沒被目標網站封鎖,或者該節點的出站頻寬已經耗盡。逐一排除的方法:
- 在客戶端節點列表裡切換到另一個不同地區/不同協定的節點,重新造訪同一個網址,判斷問題是否只出現在目前節點上。
- 打開客戶端的連線紀錄或流量面板,觀察目前的存取是否真的經過了選中的節點,還是被某條規則分流到了「DIRECT」直連。
- 用命令列直接測試出站連通性,排除瀏覽器快取、DNS 快取等干擾因素:
curl -x http://127.0.0.1:7890 -I https://www.google.com --max-time 8
如果這條指令回傳 HTTP/2 200 或類似的正常狀態碼,說明代理鏈路本身沒問題,瀏覽器打不開網頁可能是瀏覽器自身的快取、擴充功能或 HTTP/3 協定相容性問題,可以嘗試無痕視窗或換一個瀏覽器驗證。
第四步:檢查 DNS 是否被污染或劫持
代理鏈路正常但特定網站打不開、或者能連上卻載入出錯誤的內容,大概率是 DNS 環節出了問題。中國大陸網路環境下,走系統預設 DNS 解析網域時經常拿到被污染的錯誤 IP,即使流量已經交給 Clash 處理,如果網域解析這一步沒有走代理內建的 DNS 模組,後續請求依然會連到錯誤位址。
建議在設定檔裡開啟 dns 模組並啟用 fake-ip 或 enhanced-mode: fake-ip,同時把 nameserver 指向可信的加密 DNS(如 DoH/DoT 位址),讓網域解析也經過代理判斷,而不是依賴本機系統 DNS。
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://doh.example-provider.com/dns-query
fallback:
- tls://1.1.1.1:853
驗證 DNS 是否解析正常,可以直接在命令列裡比對走代理前後的解析結果:
nslookup www.example.com
nslookup www.example.com 198.18.0.2
如果兩次回傳的 IP 明顯不同,或者其中一個直接逾時,說明本機預設 DNS 與代理內建 DNS 之間存在分歧,應以代理內建 DNS 的解析結果為準,並確認系統網路設定裡沒有強制指定電信業者 DNS 覆蓋掉代理設定。
第五步:排查規則是否把流量分錯了
Clash 的核心工作方式是按規則把每一條連線分流到不同策略群組,如果規則集設定不當,完全可能出現「代理已連接、部分網站能開、部分網站打不開」的局面——問題網站被某條規則誤判成了「應該走直連」,而本地網路恰好又無法直連到該位址。
- 打開客戶端的規則/紀錄面板,存取打不開的網址,查看該連線實際匹配到了哪一條規則、落到了哪個策略群組。
- 如果顯示走的是 DIRECT 而不是代理節點,檢查規則集(如 GeoSite、GeoIP 分類)是否把該網域或 IP 段錯誤地歸到了「中國大陸節點」或「直連」分類下。
- 規則集本身可能是過時版本,長期不更新會導致新增網域段沒被正確收錄,建議定期在設定裡刷新規則集來源或更換維護活躍的規則儲存庫。
不要一遇到問題就把 mode 從 rule 改成 global 長期使用——全域模式能暫時驗證問題是否出在規則層,但會讓所有流量(包括本地內網存取)都走代理出口,排查完成後應該改回規則模式。
五步走完還沒解決怎麼辦
依上述順序逐項排查後,絕大多數「已連接但無法上網」的情況都能定位到具體環節。如果全部檢查都通過,流量、DNS、規則都顯示正常,但網頁依然打不開,可以進一步確認以下兩點:本地防火牆或安全軟體是否對 Clash 程序設定了單獨的網路限制;訂閱節點是否暫時下線,可嘗試重新匯入訂閱連結強制刷新一次節點列表。多數情況下,先重啟客戶端程序再依上述順序複查一遍,問題會在某一步顯現出來。