Shadowrocket(小火箭)的測試結果顯示延遲數值,不代表目標網頁的網域已成功解析。本文假設你已有自己的服務商與訂閱,也能查看目前設定,將依序檢查網路、Global Routing、DNS、規則與連線記錄。每次只變更一項設定,使用同一個無法開啟的網址重新測試,最後辨別解析故障、連線逾時與 TLS 錯誤。
一、連線測試正常,不代表網頁請求全程正常
開啟網頁需要經過多個階段。用戶端先取得目標網域對應的位址,再依設定選擇連線路徑,接著建立傳輸連線與 TLS 工作階段,最後要求網頁內容。實際解析可能在本機進行,也可能在遠端進行;任何階段出錯,都可能讓瀏覽器一直等待。
Home 中的 Connectivity Test 只顯示所選測試方式的探測結果。探測目標、探測協定與網頁實際使用的目標不一定相同。即使測試顯示數值,也不能據此認定所有網域、連接埠和請求都能正常使用。
例如,假設一次測試顯示 80 ms,瀏覽器卻顯示找不到伺服器。這個數字只能代表該次測試的結果,不能取代失敗網域的解析結果。排查時應記下網址中的網域、錯誤訊息與發生時間,而非反覆比較延遲數字。
- 只有一個網站無法開啟:先檢查網域拼字、該網站的解析結果與命中規則。
- 多個不同網站都無法開啟:先檢查基本網路、連線狀態與共用設定。
- 網頁框架載入了,但圖片沒有顯示:繼續記下圖片或指令碼實際要求的網域,不能只檢查網址列中的網域。
- 直接出現 HTTP
403或502:表示已有某個 HTTP 服務傳回回應,應繼續追查回應來源,不要直接歸因於 DNS。
二、先確認 Home 與 Global Routing,再調整 DNS
先確認裝置本身能連上目前的網路。需要登入網頁認證的 Wi-Fi,應先完成網路認證。接著返回 Home,確認連線開關、目前選取的伺服器與 Global Routing。選取伺服器和成功建立連線是兩種不同狀態。
- 記下目前使用 Wi-Fi 或行動網路,並保留一個可重複測試的失敗網址。
- 在 Home 查看連線狀態。若仍顯示
Not Connected,先處理連線建立問題,不要將此時的失敗視為設定中的 DNS 故障。 - 前往 Home → Global Routing,記下目前的選項,尤其確認是否設為
Direct。 - 執行一次 Connectivity Test,記下測試方式與結果,再開啟同一個無法載入的網址。
- 需要比較時,先記下原本的設定,再暫時切換模式並測試一次,完成後還原;不要同時變更 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 設定,也要一併記錄,避免將兩個變數的變化誤認為同一項結果。
四、依固定順序逐項排查
排查的目標是找出「哪一層變更後,結果跟著改變」。先保存原始設定並記錄目前選項,再依照以下順序操作。每一步都使用同一個失敗網域,避免更換測試目標而讓結果失去比較基準。
- 確認失敗範圍。分別開啟兩個平時能正常瀏覽的網站,再開啟無法載入的網站。記下是所有網站都失敗、只有單一網站失敗,還是只有靜態資源無法載入。
- 更換網路連線。條件允許時,以相同設定比較 Wi-Fi 與行動網路。若只有其中一種網路無法使用,請檢查該網路的認證狀態、DNS 是否可連線,以及是否有存取限制。
- 確認設定是否生效。在 Config 確認目前使用的檔案;在 Home → Global Routing 確認模式。不要將「已編輯檔案」視為「目前正在使用該檔案」。
- 比較解析來源。保留原值,暫時比較系統 DNS 與原本的自訂 DNS。若結果不同,接著檢查解析伺服器是否可連線,以及傳回的位址是否不同。
- 排除本機對應與規則。在目前的設定中搜尋失敗網域與其上層網域,同時檢查
[Host]和[Rule]。網域可能已先命中範圍更廣的規則。 - 重新建立連線後再次測試。儲存設定後,關閉再重新開啟連線,然後重新載入網頁。應用程式可能保留舊連線或快取,必要時可退出相關應用程式再重新開啟。
- 還原無效變更。若某個步驟沒有改善情況,請還原原本的設定,避免最後留下多項無法判斷影響的變更。
不要只用「直接在瀏覽器輸入網站 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
DOMAIN-SUFFIX,example.com,DIRECT會比對example.com及其子網域;若它排在前面,後面的 FINAL 就不會再決定這些請求的策略。IP-CIDR會比對 IP 位址範圍。範例中的192.0.2.0/24是文件專用網段,不是應新增的目標服務。no-resolve表示不會為符合該 IP 規則的流量主動觸發網域解析,不代表後續整個請求完全不需要 DNS。GEOIP依據 IP 地理資料進行比對,不會依網站使用的語言或網域後綴判斷。FINAL,PROXY是前面規則都未命中時的預設策略;排查時也要確認 PROXY 實際使用的連線出口。
判斷方式:已取得位址但仍無法連線,就繼續檢查連線階段
若記錄已顯示目標位址,之後又出現連線逾時,應優先確認命中策略、目標連接埠與連線出口。不要只因網頁無法載入,就繼續更換 DNS。
六、常見問題與排查記錄
Connectivity Test 顯示數值,為什麼 Safari 還是無法開啟網頁?
先在 Home 記下測試方式,再確認 Home → Global Routing。測試與網頁可能連線至不同目標;請以同一個失敗網址分別檢查解析結果與命中策略,不能將單一延遲數值當成所有網站都能連線的證明。
切換到行動網路就能用了,需要更改所有 DNS 嗎?
先保持設定不變,再重現一次網路差異。確認 Wi-Fi 是否需要認證,以及目前的 DNS 服務在該網路上是否可連線。只有比較後確認解析來源會影響結果,才調整相關設定。
修改 DNS 後仍顯示舊結果,該怎麼辦?
先確認 Config 使用的是已修改的設定,再重新建立連線並重新載入網頁。檢查 Settings → DNS 與設定檔中的 [Host] 是否仍有手動設定;不要連續新增多個 dns-server 欄位。
只有訂閱更新失敗,也能判定是 DNS 問題嗎?
不能。訂閱要求也可能受到連結有效性、驗證方式與伺服器回應影響。記下更新時的錯誤原文,並向自己的服務商確認現有訂閱是否仍有效;不要在排查記錄中公開完整訂閱網址。
若需要進一步協助,整理以下資訊即可。清楚描述重現條件,比提供未遮蔽的完整設定檔更有幫助;訂閱憑證、密碼、私密金鑰與完整存取權杖都應隱藏。
- 失敗網域、發生時間,以及網頁顯示的錯誤原文。
- 裝置使用 Wi-Fi 或行動網路,以及切換網路後情況是否改變。
- Home 的連線狀態、Global Routing 選項,以及 Connectivity Test 的方式與結果。
- 目前使用的設定名稱、相關 DNS 欄位,以及是否有對應的 [Host] 對應。
- 相關規則及其順序,以及記錄中可確認的目標位址、命中策略或連線錯誤。
- 已嘗試變更的個別設定、每次測試結果,以及已還原的設定。
Shadowrocket 是閉源商業應用程式,主要適用於 iPhone 與 iPad,唯一取得管道為 App Store。購買應用程式與連線服務是兩回事,一次買斷不包含個人使用的連線服務。系統需求請以 App Store 頁面標示為準。