適合已有自用連線設定,正在排查網域解析問題或想調整解析方式的讀者。先用系統 DNS 建立可用基準;需要指定解析伺服器時,再修改 dns-server;需要加密 DNS 查詢時,確認 DoH 網址及其連線狀況。每次只修改一項,並分別驗證網域存取與連線狀態。
先釐清 DNS、規則比對與連線出口
DNS 會將網域名稱轉換成可供連線使用的位址。Shadowrocket 的一次存取也可能先比對規則,再依規則選擇連線出口。因此,網頁無法開啟不一定是 DNS 問題:網域解析成功後,所選服務的連線仍可能失敗;反過來說,某些規則需要位址資訊,解析結果也可能影響比對。
在 Home 查看目前連線狀態與 Global Routing。Proxy 表示流量統一經由所選連線,Direct 表示直接連線,Config 會依目前設定中的規則處理,Scene 則依情境設定運作。調整 DNS 前,先記下目前狀態;若同時切換狀態並修改解析設定,就難以判斷是哪項變更影響存取結果。
規則也要依類型檢視。DOMAIN-SUFFIX 依網域後綴比對,IP-CIDR 依位址範圍比對,GEOIP 涉及位址歸屬判斷,FINAL 則處理前面未比對成功的請求。解析方式無法取代規則;例如將 dns-server 改成另一個位址,不會自動把 FINAL,DIRECT 改成代理出口。
三種方式各自解決什麼問題
系統 DNS 適合作為第一輪排查的基準。它沿用裝置目前網路環境提供的解析設定,不必額外手動維護伺服器位址。從 Wi-Fi 切換到行動網路後,使用的上游解析環境可能隨之改變;如果特定網域只有在某一種網路下無法開啟,建議分別記錄兩種網路的測試結果。
系統 DNS 與自訂 DNS
- 系統 DNS
- 先沿用目前網路的解析方式
- 自訂 DNS
- 在 Config 指定可連線的解析伺服器位址
- 先檢查什麼
- 同一網域在 Wi-Fi 與行動網路下的結果是否一致
若要穩定重現問題,請固定測試網路與 Global Routing。
DNS over HTTPS
- 傳輸方式
- 透過 HTTPS 將 DNS 查詢傳送至 DoH 伺服器
- 位址
- 使用伺服器提供的完整 HTTPS URL
- 先檢查什麼
- 目前網路能否連線至該 URL
DoH 加密的是對應 DNS 查詢的傳輸,不代表所有連線的出口都會改變。
自訂 DNS 適合需要明確指定解析伺服器,或比較不同上游解析結果的情況。傳統 DNS 通常使用 53 埠;DoH 則透過 HTTPS 連線,通常使用 443 埠。埠號不同只代表傳輸方式不同,不能單憑埠號判斷網域是否能成功解析。
選擇順序:先建立基準,再逐步增加變數
首次排查時,先用系統 DNS 測試同一網域;只有需要固定上游解析伺服器時,才填寫 dns-server。選用 DoH 時,也要另外確認 DoH 伺服器是否連線正常,不能直接把解析失敗歸因於連線規則錯誤。
在 Config 設定 dns-server 與 DoH
先在 Config 找到目前使用的設定檔,確認它是現正啟用的設定,再編輯其中的 [General] 區段。修改前先保留原有文字,尤其要保留既有規則與其他設定。不同設定檔來源可能會覆寫手動修改;若設定檔來自使用者已有的訂閱,更新後應再次檢查這個區段。
- 在 Home 確認目前設定檔名稱與 Global Routing,並記下一個可重複測試的網域。
- 開啟 Config,編輯對應設定檔的 [General];先只調整 DNS 相關行,不要同時修改 Rule 內容。
- 儲存後回到 Home,在相同網路與相同路由狀態下重新測試存取;若仍失敗,還原原值並確認設定文字已正確儲存。
以下片段分別示範三種設定方式,應擇一使用,不要將三個範例的 dns-server 行全部加進同一個 [General] 區段。若使用系統解析,可寫成:
[General]
dns-server = system
指定解析伺服器時,請在 dns-server 填入實際可用的 DNS 位址。以下位址僅用來示範欄位格式;是否適用目前網路,應以實際連線測試為準:
[General]
dns-server = 1.1.1.1
使用 DoH 時,請在 doh-server 填入伺服器提供的完整 HTTPS 位址。以下範例中的 example.com 僅供格式示意,不能當作可用的 DoH 伺服器;實際設定時,請改用已確認可用的位址,並依照 App 內目前的欄位說明檢查格式:
[General]
doh-server = https://example.com/dns-query
修改後如何驗證與找出問題
驗證分成兩個層次。第一層檢查 DNS:目標網域在相同網路下是否解析出可存取的結果。第二層檢查連線:取得位址後,請求是否依預期規則前往正確出口。只測試一個網頁無法區分這兩個層次,因為瀏覽器快取、網站本身狀態及既有連線都可能影響觀察結果。
- 記下修改前的網路類型、Global Routing、所選設定檔與目標網域;在 Home 執行 Connectivity Test,記錄一次連線狀態作為基準。
- 儲存一項 DNS 變更,中斷連線後再重新連線。先開啟先前能穩定存取的網域,再測試需要排查的網域,並分別記錄結果。
- 若兩者都無法存取,請檢查 [General] 拼寫、DNS 位址或 DoH URL 是否可連線;若只有特定網域失敗,再檢查該網域比對到的規則及服務本身。
- 還原原設定後重複測試。還原後立即恢復正常,表示新設定值得進一步排查;還原後仍然失敗,則應回頭檢查連線、網路與規則層面的變化。
檢查 IP-CIDR 或 GEOIP 相關規則時,特別留意解析結果與比對順序。規則由上而下檢查,先比對成功的規則會影響後續處理;FINAL 是備用規則,無法修正前面已比對成功的規則。檢查時不要只看 DNS 欄位,也要對照 Config 的規則區段,以及 Home 是否選用 Config 狀態。
判斷依據:重現條件必須一致
比較兩次結果時,請固定網路、設定檔、Global Routing 與測試網域,每輪只修改一項 DNS 設定。若同時切換 Wi-Fi、更新設定檔並修改規則,就無法明確判斷結果是由哪項變更造成。
常見問題與注意事項
填入 DoH 位址後,為什麼網頁反而無法開啟?
先確認 URL 是伺服器提供的完整實際位址,而不是本文中用來示意的 example.com。接著還原原 DNS 設定,測試同一網域;若還原後恢復正常,請檢查目前網路能否連線至該 DoH 伺服器,以及設定是否儲存在目前使用的 Config 中。
系統 DNS 可以存取,自訂 DNS 卻失敗,需要修改規則嗎?
先不要修改規則。保持 Home 中的 Global Routing 不變,確認 dns-server 填入的是可用位址,並在相同網路下重新測試。只有確認已取得解析結果,但連線仍不符合預期時,才檢查 DOMAIN-SUFFIX、IP-CIDR、GEOIP 與 FINAL 的比對順序。
切換 DNS 後,為什麼舊網頁看起來沒有變化?
先中斷連線再重新連線,接著發起新的存取。既有連線與快取可能仍顯示舊狀態;測試時記錄一個先前未存取過的目標,並與可穩定存取的網域比對,不要只反覆重新整理同一個頁面。
更新訂閱後,手動填寫的 dns-server 不見了?
在 Config 檢查目前啟用的設定檔及其 [General] 內容。若更新時設定檔文字遭到替換,手動修改可能會一併消失;請保留原設定記錄,再依自己的設定管理方式,決定應在哪一份設定檔中修改。
Shadowrocket 是 Apple 平台的付費 App,僅透過 App Store 提供;iPhone、iPad 是主要使用裝置,其他相容裝置與系統需求請以 App Store 頁面標示為準。App 買斷與連線服務是兩回事:本文只介紹 App 內的 DNS 設定,操作前提是使用者已經有自己的連線設定。