2026-09-28 · 問題排查 · 約 10 分鐘

Shadowrocket DNS 解析失敗排查:連線測試正常,網頁卻打不開怎麼辦

了解連線測試與網域解析的差異、DNS 設定的用途和常見錯誤,並依序排查網頁無法開啟的原因。

本文摘要

Shadowrocket(小火箭)的測試結果顯示延遲數值,不代表目標網頁的網域已成功解析。本文假設你已有自己的服務商與訂閱,也能查看目前設定,將依序檢查網路、Global Routing、DNS、規則與連線記錄。每次只變更一項設定,使用同一個無法開啟的網址重新測試,最後辨別解析故障、連線逾時與 TLS 錯誤。

一、連線測試正常,不代表網頁請求全程正常

開啟網頁需要經過多個階段。用戶端先取得目標網域對應的位址,再依設定選擇連線路徑,接著建立傳輸連線與 TLS 工作階段,最後要求網頁內容。實際解析可能在本機進行,也可能在遠端進行;任何階段出錯,都可能讓瀏覽器一直等待。

目標網域 位址解析 路徑選擇 建立連線 網頁回應

Home 中的 Connectivity Test 只顯示所選測試方式的探測結果。探測目標、探測協定與網頁實際使用的目標不一定相同。即使測試顯示數值,也不能據此認定所有網域、連接埠和請求都能正常使用。

例如,假設一次測試顯示 80 ms,瀏覽器卻顯示找不到伺服器。這個數字只能代表該次測試的結果,不能取代失敗網域的解析結果。排查時應記下網址中的網域、錯誤訊息與發生時間,而非反覆比較延遲數字。

二、先確認 Home 與 Global Routing,再調整 DNS

先確認裝置本身能連上目前的網路。需要登入網頁認證的 Wi-Fi,應先完成網路認證。接著返回 Home,確認連線開關、目前選取的伺服器與 Global Routing。選取伺服器和成功建立連線是兩種不同狀態。

  1. 記下目前使用 Wi-Fi 或行動網路,並保留一個可重複測試的失敗網址。
  2. 在 Home 查看連線狀態。若仍顯示 Not Connected,先處理連線建立問題,不要將此時的失敗視為設定中的 DNS 故障。
  3. 前往 Home → Global Routing,記下目前的選項,尤其確認是否設為 Direct。
  4. 執行一次 Connectivity Test,記下測試方式與結果,再開啟同一個無法載入的網址。
  5. 需要比較時,先記下原本的設定,再暫時切換模式並測試一次,完成後還原;不要同時變更 DNS、伺服器與規則。
模式排查重點
Proxy用來觀察流量經由代理連線時的狀況;不代表所有 DNS 請求都必然採用相同的解析路徑。
Direct流量直接連線。若原本預期透過代理存取,應先調整模式。
Config依目前設定的規則分流;應確認失敗網域命中的規則與策略。
Scene依已設定的場景決定路由行為;應確認目前場景,不要只看選取的伺服器。

判斷方式:先切換模式比較,縮小排查範圍

若同一網路、同一伺服器下,Proxy 可以開啟網頁,但 Config 不行,下一步優先檢查規則與設定相關的解析路徑,不要立刻更換整套連線資訊。

三、DNS 設定各自控制什麼

DNS 會將網域轉換為位址。A 記錄提供 IPv4 位址,AAAA 記錄提供 IPv6 位址。取得位址只代表解析成功,不代表裝置能連上該位址。尤其取得 AAAA 記錄後仍無法連線時,應分辨「取得 IPv6 位址」與「IPv6 連線可用」這兩件事。

檢查 Settings → DNS 中的相關設定,也要確認 Config 中目前使用的設定檔。全域設定與設定檔可能共同影響實際行為;不要只查看編輯器中的某個檔案,就認定它已生效。下表說明各項概念,不代表需要將每項都手動改成自訂值。

項目用途排查重點
系統 DNS使用目前系統網路提供的解析設定。切換 Wi-Fi 與行動網路時,解析環境可能隨之改變。
自訂 DNS指定解析伺服器。伺服器位址正確,不代表目前的網路能連上該伺服器。
DNS over HTTPS透過 HTTPS 傳送 DNS 查詢。通常使用 TCP 443;服務位址、TLS 與連往服務端的路徑都必須可用。
DNS over TLS透過 TLS 傳送 DNS 查詢。通常使用 TCP 853,網路限制可能與一般 DNS 不同。
[Host]在設定檔中指定網域與位址的對應關係。舊位址可能仍在使用;應檢查失敗網域是否有手動對應。

傳統 DNS 通常使用 UDP 53,部分情況也會使用 TCP 53。加密傳輸改變的是查詢通道,無法自動修復目標網站停機、規則錯誤或位址無法連線的問題。不要只為了「加密」就填入多組來源不明的解析位址。

若要以系統 DNS 進行比較,可先備份現有設定,再於 Config 編輯用於測試的副本,確認既有的 [General] 區段中的 dns-server。以下僅示範相關欄位,並非完整設定,也不應覆寫原檔中的其他區段。

[General]
dns-server = system

若已有 [General] 區段,請修改對應欄位,不要一再新增重複區段。儲存後,確認測試副本正在使用中,再重新建立連線並測試。若目前還有手動 DNS 設定,也要一併記錄,避免將兩個變數的變化誤認為同一項結果。

四、依固定順序逐項排查

排查的目標是找出「哪一層變更後,結果跟著改變」。先保存原始設定並記錄目前選項,再依照以下順序操作。每一步都使用同一個失敗網域,避免更換測試目標而讓結果失去比較基準。

  1. 確認失敗範圍。分別開啟兩個平時能正常瀏覽的網站,再開啟無法載入的網站。記下是所有網站都失敗、只有單一網站失敗,還是只有靜態資源無法載入。
  2. 更換網路連線。條件允許時,以相同設定比較 Wi-Fi 與行動網路。若只有其中一種網路無法使用,請檢查該網路的認證狀態、DNS 是否可連線,以及是否有存取限制。
  3. 確認設定是否生效。在 Config 確認目前使用的檔案;在 Home → Global Routing 確認模式。不要將「已編輯檔案」視為「目前正在使用該檔案」。
  4. 比較解析來源。保留原值,暫時比較系統 DNS 與原本的自訂 DNS。若結果不同,接著檢查解析伺服器是否可連線,以及傳回的位址是否不同。
  5. 排除本機對應與規則。在目前的設定中搜尋失敗網域與其上層網域,同時檢查 [Host] 和 [Rule]。網域可能已先命中範圍更廣的規則。
  6. 重新建立連線後再次測試。儲存設定後,關閉再重新開啟連線,然後重新載入網頁。應用程式可能保留舊連線或快取,必要時可退出相關應用程式再重新開啟。
  7. 還原無效變更。若某個步驟沒有改善情況,請還原原本的設定,避免最後留下多項無法判斷影響的變更。

不要只用「直接在瀏覽器輸入網站 IP」來比較 DNS。HTTPS 會使用網域進行憑證驗證與網站選擇,直接連線到 IP 可能出現憑證錯誤或開啟其他網站,即使原本的 DNS 並沒有故障。

若連線會在背景自動重新建立,也應檢查 Settings → On Demand。On Demand 負責管理連線的觸發條件,不會將網域解析為位址。比較中斷連線時的結果,應記下此功能是否啟用,避免將自動重新連線後的請求誤認為直接連線的結果。

五、分辨解析錯誤、逾時與規則命中

錯誤原文比「打不開」更有助於判斷問題。以下是 Apple 網路架構可能提供的英文錯誤訊息,不保證瀏覽器或 Shadowrocket 會在每個畫面逐字顯示。若記錄中有錯誤網域與代碼,請連同原文一併記下。

錯誤訊息:A server with the specified hostname could not be found.

原因與處理方式:NSURLErrorDomain -1003 表示找不到指定的主機;先確認網域拼字,再檢查該網域的解析結果、DNS 連線狀態與本機對應。

錯誤訊息:The request timed out.

原因與處理方式:NSURLErrorDomain -1001 表示要求逾時,但不能單憑此錯誤認定 DNS 故障;依序確認解析、建立連線與伺服器回應分別停在哪個階段。

錯誤訊息:A server with the specified hostname could not be found.

原因與處理方式:若錯誤對應的是自訂加密 DNS 服務的主機名稱,問題可能出在該解析服務本身的初始解析。請記下服務位址,並改用系統 DNS 比較一次,而不是修改目標網站的規則。

錯誤訊息:An SSL error has occurred and a secure connection to the server cannot be made.

原因與處理方式:NSURLErrorDomain -1200 表示安全連線建立失敗;請確認裝置日期與時間、目標主機及憑證相關資訊,不要透過關閉憑證驗證來掩蓋問題。

在 Config 模式下,規則也會影響連線結果。規則通常由上而下檢查,命中後採用對應策略。以下以保留的示例網域說明規則順序;內容僅供閱讀,並非可直接替換使用的完整設定。

[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

判斷方式:已取得位址但仍無法連線,就繼續檢查連線階段

若記錄已顯示目標位址,之後又出現連線逾時,應優先確認命中策略、目標連接埠與連線出口。不要只因網頁無法載入,就繼續更換 DNS。

六、常見問題與排查記錄

Connectivity Test 顯示數值,為什麼 Safari 還是無法開啟網頁?

先在 Home 記下測試方式,再確認 Home → Global Routing。測試與網頁可能連線至不同目標;請以同一個失敗網址分別檢查解析結果與命中策略,不能將單一延遲數值當成所有網站都能連線的證明。

切換到行動網路就能用了,需要更改所有 DNS 嗎?

先保持設定不變,再重現一次網路差異。確認 Wi-Fi 是否需要認證,以及目前的 DNS 服務在該網路上是否可連線。只有比較後確認解析來源會影響結果,才調整相關設定。

修改 DNS 後仍顯示舊結果,該怎麼辦?

先確認 Config 使用的是已修改的設定,再重新建立連線並重新載入網頁。檢查 Settings → DNS 與設定檔中的 [Host] 是否仍有手動設定;不要連續新增多個 dns-server 欄位。

只有訂閱更新失敗,也能判定是 DNS 問題嗎?

不能。訂閱要求也可能受到連結有效性、驗證方式與伺服器回應影響。記下更新時的錯誤原文,並向自己的服務商確認現有訂閱是否仍有效;不要在排查記錄中公開完整訂閱網址。

若需要進一步協助,整理以下資訊即可。清楚描述重現條件,比提供未遮蔽的完整設定檔更有幫助;訂閱憑證、密碼、私密金鑰與完整存取權杖都應隱藏。

Shadowrocket 是閉源商業應用程式,主要適用於 iPhone 與 iPad,唯一取得管道為 App Store。購買應用程式與連線服務是兩回事,一次買斷不包含個人使用的連線服務。系統需求請以 App Store 頁面標示為準。

Shadowrocket 正版下載