Shadowrocket DNS 設定教學:延遲正常但網頁打不開的排查步驟

了解 Shadowrocket DNS 設定,循序分辨 DNS 解析與連線問題,找出延遲測試正常、網頁卻打不開的原因。

本文重點

Shadowrocket(小火箭)的延遲數值,無法證明網頁存取路徑完整。已有服務商與訂閱的使用者,應先固定網路、目標網址和出站項目,再檢查 DNS 解析、Global Routing 全域路由與連線錯誤。本文依照可重現的順序,說明如何分辨解析失敗、規則選錯和出站連線失敗;每次只變更一項,避免反覆更換 DNS 掩蓋真正原因。

一、延遲正常,只代表測試涉及的環節有回應

開啟網頁需要經過網域解析、建立連線、TLS 交握和內容請求。DNS 的作用是將網域解析為 IP 位址;取得位址後,連線仍可能遭目標埠、網路路徑、憑證或伺服器狀態阻擋。延遲測試使用的目標和測試方式不同,涵蓋的環節也不同,不能只憑一個毫秒數判定網頁是否可用。

網域解析規則判定建立連線TLS 交握內容請求

這個流程用於定位問題,不表示所有請求都嚴格依照相同順序解析。網域規則可能在取得 IP 之前命中,部分出站方式也可能將網域交由遠端處理。應以目前的設定和請求記錄為準,不要假設所有網域都由同一台 DNS 伺服器解析。

二、先看懂 DNS 設定,別把埠號和解析器混為一談

先在 Config 設定中確認目前選用的設定檔,再查看其中的 DNS 設定。設定檔的 [General] 區段可以包含 dns-server;system 代表使用系統 DNS。如果設定中已填入其他解析器,修改前請先保存原值,不要直接覆蓋整個區段。

[General]
dns-server = system

這段內容只用來辨識欄位,不是完整設定,也不是要求所有網路都改成 system。系統 DNS 會受目前連線的網路影響;自訂 DNS 則需要確保相應位址和傳輸路徑可連通。加密 DNS 保護的是查詢傳輸過程,不代表目標網站一定能建立連線。

53
傳統 DNS 通常使用 UDP 或 TCP 埠 53
443
HTTPS 與 DoH 通常使用埠 443
853
DoT 通常使用 TCP 埠 853

以上數字是協定常用埠號,不是需要依序填入 Add Server 新增伺服器頁面的參數。出站伺服器的 Port 埠號必須與服務商提供的參數一致。DoH 使用 HTTPS 請求路徑,不能把只有 IP 位址的字串直接當成完整的 DoH 位址。

結論:先檢查解析結果,再決定是否更換 DNS

如果同一次請求已取得目標 IP,之後才出現連線逾時,應先檢查出站路徑與目標埠;只有在有查詢失敗、回傳異常位址或位址類型差異等證據時,才需要繼續從 DNS 方向排查。

三、用五個步驟建立可重現的排查記錄

先選一個平常可存取、目前又能穩定重現問題的網址。記錄完整網域、測試時間、連線的網路和錯誤訊息。不要同時切換網路、出站項目、DNS 和規則;否則即使頁面恢復,也無法判斷是哪個項目造成影響。

  1. 確認網路已完成連線。在可信任的網路中完成可能出現的網頁認證。分別記錄關閉和開啟連線開關後的結果;這項對照只用來判斷問題範圍,不代表所有目標在兩種狀態下都必須可用。
  2. 確認目前的出站項目。返回 Home 首頁,確認連線開關與選取的項目。如果項目來自 Subscribe 訂閱,請向你的服務商取得連結。確認訂閱狀態和項目參數;更新成功不代表伺服器一定可連線。
  3. 記錄路由模式。開啟 Home 首頁 → Global Routing 全域路由,記下目前選用的是 Config 設定、Proxy 代理、Direct 直連還是 Scene 情境。Scene 情境還需要確認生效條件,不能只憑名稱判斷實際路徑。
  4. 在相同條件下送出一次請求。前往同一個網址,檢查可用的請求記錄或日誌,查看網域、解析位址、命中規則、出站策略和錯誤訊息。未記錄的欄位應標記為未知,不要自行推測。
  5. 每次只變更一項,再重新測試。例如保留其他條件不變,比較 Config 設定與 Proxy 代理,或比較目前 DNS 與已確認可連通的解析方式。每輪都記錄結果;若沒有改善,先還原原值,再驗證下一個假設。

四、依錯誤訊息分辨解析、連線與憑證問題

以下列出的是網路日誌中常見的錯誤原文片段,不保證每個介面都會顯示這些字串。同一個問題可能顯示為瀏覽器提示、請求記錄中的簡短錯誤,或更底層的日誌。判斷時要一併確認錯誤所屬的網域:出錯的對象可能是目標網站,也可能是出站伺服器或 DNS 端點。

錯誤:no such host

原因:目前的解析程序無法取得所需的主機位址,也可能是網域拼寫錯誤。

處理方式:先核對錯誤訊息中的網域,再檢查目前 DNS 是否可連通;若出錯的是出站伺服器網域,應先處理該網域的解析問題,而不是修改目標網站規則。

錯誤:i/o timeout

原因:某次網路讀取或寫入超過等待時間,可能發生在 DNS 查詢、建立連線或後續傳輸。

處理方式:查看錯誤前面的位址和操作階段;查詢逾時時檢查解析器路徑,連線逾時時則核對出站位址、Port 埠號和目前網路。

錯誤:connection refused

原因:該連線嘗試收到拒絕回應,常見原因是目標埠沒有服務正在監聽,或網路設備主動拒絕連線。

處理方式:確認遭拒絕的是網站還是出站伺服器,並核對相應埠號;若使用的是服務商提供的出站參數,請向自己的服務商確認狀態。

錯誤:certificate has expired or is not yet valid

原因:憑證有效期限與目前時間不符,可能與裝置時間、網站憑證或出站 TLS 端點有關。

處理方式:先核對系統日期和時間,再確認錯誤所屬的網域;保留憑證驗證,不要以關閉驗證取代問題修復。

如果網站已回傳 HTTP 403 或 HTTP 404,通常表示該請求已到達某個 HTTP 服務,不應再把這項回應視為單純的 DNS 查無結果。此時應檢查目標位址是否正確、網站存取條件和伺服器狀態;若懷疑解析到錯誤的服務,再核對 DNS 回傳值。

五、解析成功後,繼續檢查規則與 IPv6 路徑

在 Config 設定模式下,請求會受到目前設定檔中規則的影響。DOMAIN-SUFFIX 網域後綴規則與 IP-CIDR 位址範圍規則適用的對象不同;GEOIP 位址歸屬規則依據 IP 判斷;FINAL 是最後的兜底規則。已有解析結果,不代表請求一定會經過預期的出站路徑。

[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY

以上只用來說明規則順序:example.com 及其子網域符合 DIRECT 直連,其餘請求則由 FINAL 使用 PROXY 代理策略兜底。這不是完整設定,也不是適用於所有使用者的建議規則。如果網域先命中前面的 REJECT 拒絕規則,通常無法透過更換 DNS 改變匹配結果。

對照現象優先檢查下一步
Proxy 可存取,Config 無法存取目前設定中的規則、策略與相關覆寫設定查看該網域命中的規則和實際出站路徑,不要直接歸因於 DNS。
同一設定在不同網路下表現不同網路認證、解析器連線狀態、UDP 與位址類型路徑保留網址和出站項目,只切換連線的網路並記錄差異。
回傳 A 與 AAAA,但部分連線逾時IPv4 與 IPv6 的實際連線狀況檢查失敗連線使用的位址類型,再進行單一變數對照。
主頁面可開啟,圖片或登入失敗資源子網域及其規則、解析與出站路徑記錄失敗資源的網域,逐一檢查,不要只測試主網站的網域。

A 記錄提供 IPv4 位址,AAAA 記錄提供 IPv6 位址。DNS 正確回傳 AAAA,不代表目前網路具備可用的 IPv6 路徑;同樣地,出現 IPv6 位址也不代表問題一定由它造成。只有在對照結果顯示與位址類型差異有關時,才檢查相關 IPv6 設定,並保留還原方式。

另一個容易忽略的環節是快取。瀏覽器、系統和中間解析器可能保留結果;變更 DNS 後重新整理一次,不一定代表重新執行了查詢。可以先重新建立連線並重新開啟頁面,再根據新的請求記錄判斷;不要一開始就清除所有瀏覽資料。

六、常見問題與還原檢查

延遲只有幾十毫秒,為什麼還要檢查出站連線?

延遲數值無法涵蓋任意網站的完整請求。返回 Home 首頁確認選取的項目,再記錄失敗網址的連線階段;測試目標可連線,但目標網站的 443 埠無法連線,這兩種情況可能同時發生。

把網址換成 IP 位址,就能確認是不是 DNS 問題嗎?

不能直接這樣判斷。HTTPS 需要透過網域進行憑證驗證和虛擬主機選擇;直接存取 IP 可能出現憑證錯誤或連到其他網站。應查看解析和連線記錄,不要把 IP 存取失敗當成 DNS 問題的結論。

換了 DNS 還是打不開,還要繼續換嗎?

先確認是否已取得位址。若取得位址後才逾時,請還原原有 DNS,繼續核對 Global Routing 全域路由、實際出站路徑與 Port 埠號;若是查詢本身逾時,再檢查解析器的傳輸路徑。

只有訂閱更新失敗、網頁正常,需要修改 DNS 嗎?

先分辨是訂閱網域解析失敗,還是 HTTP 狀態錯誤。連結請向你的服務商取得,並確認內容完整且仍有效;網頁正常不代表訂閱網址正常,但也不足以證明整體 DNS 有問題。

問題排除後,應恢復日常使用的 Config 設定與預期策略,還原原有的 On Demand 隨需連線條件,再重新測試主頁面、圖片、登入等必要資源。如果只有暫時切換到 Proxy 代理時成功,應繼續調整規則,不要把暫時對照的結果當成已找到 DNS 問題。

App Store 正版核對