本文適合已能匯入訂閱,卻遇到部分網站解析異常、首次連線緩慢或中國大陸網站繞路的使用者。重點是區分 DNS 解析線路與代理流量線路,設定中國大陸網域使用本地上游、海外網域使用 DoH,再透過日誌、解析結果與路由規則定位問題。
先搞懂 DNS 與路由的兩次選擇
存取網域時,客戶端通常要先取得 IP 位址,接著才會向該 IP 建立 TCP 或 UDP 連線。DNS 決定「網域解析成哪個位址」,路由規則決定「連線從哪個出站送出」。這兩次選擇彼此相關,卻不是同一件事。只設定網域分流規則,不代表 DNS 查詢一定會經過相同線路。
V2Ray 或 Xray 設定中的 dns 物件負責選擇上游解析器、快取結果與限制查詢策略;routing 物件則負責比對網域、IP、連接埠、協定與入站標籤。若應用程式已在本機完成解析,核心收到的可能只有目標 IP,此時僅包含網域的規則未必能命中。
系統代理與 TUN 模式也會影響連線流程。瀏覽器透過 SOCKS 或 HTTP 代理提交網域時,核心通常仍能看到原始網域;TUN 模式則需要客戶端接管系統流量與 DNS 請求。v2rayN、v2rayNG 和 v2flyNG 的介面選項不同,但判斷原則相同:先確認查詢由誰發起,再確認查詢經過哪條線路。
中國大陸與海外分流解析為何有用
中國大陸服務常使用依地區調度的 CDN。同一個網域交給不同地區的解析器,可能會回傳不同機房的位址。中國大陸網域使用距離較近的本地上游,通常更容易取得合適的邊緣節點;海外網域交給可穩定存取的 DoH 上游,則能減少錯誤回應、查詢逾時與結果遭竄改造成的連線問題。
合理的目標不是把所有查詢都塞進同一個公共解析器,而是讓查詢線路與存取意圖一致。典型做法是用 geosite:cn 比對中國大陸網域,並用 geoip:cn 檢查回傳位址;其餘網域交給指定的 DoH 上游。規則庫需要隨客戶端或核心更新,否則新網域可能會落入兜底規則。
中國大陸網域解析
- 網域集合
- geosite:cn
- 上游位址
- 223.5.5.5
- 連接埠
- 53
- 結果範圍
- geoip:cn
優先取得適合中國大陸網路存取的 CDN 位址。
海外網域解析
- 網域集合
- geolocation-!cn
- 上游協定
- DoH
- 服務位址
- 1.1.1.1
- 連線埠
- 443
透過 HTTPS 承載查詢,並依現有路由決定連線出站。
expectIPs 是結果篩選條件,不是強制將網域映射到某個地區。中國大陸上游回傳不符合 geoip:cn 的位址時,核心可以嘗試後續解析器。若某個中國大陸網站本來就使用海外位址,條件過嚴反而會造成重複查詢,此時應為該網域增加更精確的例外,而不是直接刪除所有檢查。
- 經常存取的區域網路名稱可寫入
hosts,例如將路由器管理網域固定到192.168.1.1。 - 只有 IPv4 網路時可優先使用
UseIPv4,避免取得 AAAA 記錄後等待無法連線的 IPv6 連線逾時。 - 具備穩定 IPv6 出口後再啟用雙堆疊查詢,並分別驗證直連與代理出站是否都能存取 IPv6。
一份易讀的分流 DNS 設定
以下範例採用 Xray 常見的 DNS 欄位寫法,適合用來理解結構。不同 V2Ray 或 Xray 核心版本支援的欄位可能略有差異,匯入前應以目前客戶端產生的設定格式為準。v2rayN 可先進入「設定」→「參數設定」確認目前核心類型,再從「伺服器」→「新增自訂設定伺服器」載入完整 JSON。
{
"dns": {
"hosts": {
"domain:router.local": "192.168.1.1"
},
"queryStrategy": "UseIPv4",
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
]
},
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
},
"localhost"
]
}
}
清單順序與網域條件共同決定解析器選擇。第一項服務中國大陸網域,第二項服務明確歸類的海外網域,localhost 則作為未命中分類時的兜底。若希望所有未知網域也使用 DoH,應先確認目前核心對 fallback 與網域比對的處理方式,再調整兜底順序,避免憑感覺交換陣列位置。
- 先備份目前可連線的設定,不要直接在唯一設定上反覆覆寫。
- 先只加入一個中國大陸 DNS 上游,測試常用中國大陸網站是否能正常解析與開啟。
- 接著加入 DoH 上游,測試先前異常的海外網域,並觀察核心日誌中的查詢錯誤。
- 最後加入
expectIPs、IPv4 策略與 hosts 規則,每次只修改一項。 - 完成後重新啟動核心或重新載入設定,避免舊連線與 DNS 快取干擾結果。
DNS 分流還需要搭配路由規則
DNS 回傳正確位址,只解決了「要連到哪裡」。若要讓中國大陸連線直連、其餘連線走代理,還需要比對順序清楚的路由規則。常見結構是先處理區域網路與保留位址,再處理中國大陸網域及中國大陸 IP,最後將未命中的流量交給代理出站。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
IPIfNonMatch 表示網域規則未命中時,核心可以解析目標網域,再嘗試 IP 規則。它不是「所有網域都預先解析」的開關,也不會自動建立中國大陸與海外 DNS 上游。若設定使用 AsIs,核心傾向保留網域比對流程,只有 IP 目標才能直接命中 IP 規則。
結論:DNS 規則與流量規則必須成對檢查
將中國大陸網域交給本地上游後,還應確認 geosite:cn 與 geoip:cn 最終指向直連出站;海外網域使用 DoH 時,則要確認 DoH 的 HTTPS 連線與目標網站連線都能從預期出站建立。
| 現象 | 優先檢查 | 判斷依據 |
|---|---|---|
| 網域規則偶爾未命中 | 應用程式是否提前解析 | 日誌目標只顯示 IP,不顯示網域 |
| 中國大陸網站載入變慢 | DNS 回傳的 CDN 位址 | 位址地區與目前網路距離較遠 |
| DoH 查詢持續逾時 | 443 連接埠與出站路由 | 日誌出現連線逾時或握手失敗 |
| 連線先卡住數秒後才成功 | AAAA 記錄與 IPv6 可達性 | IPv6 嘗試失敗後回落至 IPv4 |
DoH 設定的重點不只是更換一個位址
DoH 將 DNS 訊息放入 HTTPS 請求,常用連接埠是 443。它能降低傳統明文 UDP 查詢在傳輸途中遭觀察或竄改的機率,但不能取代路由設定,也不能修正上游本身回傳的錯誤結果。上游可達性、出口路徑與快取策略仍會決定實際表現。
在 v2rayN 中調整自訂設定後,可透過「設定」→「參數設定」檢查日誌層級,並在主視窗開啟日誌區域查看核心啟動資訊。Android 端使用 v2rayNG 或 v2flyNG 時,應先在目前設定的路由與 DNS 頁面核對設定,再重新連線,讓 VpnService 工作階段載入新設定。
- 查詢逾時:先確認 DoH 位址的 443 連接埠是否能透過預期出站建立連線,再檢查是否存在網域引導解析問題。
- 循環依賴:不要讓解析 DoH 服務網域所需的 DNS 查詢,再次依賴同一個尚未建立的 DoH 連線。
- 快取尚未更新:修改上游後重新啟動核心,並重新開啟測試應用程式;瀏覽器與系統可能各自保留 DNS 快取。
- IPv6 假可用:系統取得 IPv6 位址不代表出口可達,可暫時使用
UseIPv4進行對照測試。 - 規則庫過舊:更新客戶端附帶的 geosite 與 geoip 資料後重新載入核心,再判斷網域分類是否錯誤。
結論:先確保單一 DoH 上游可用,再加入備用項目
同時填入多個狀態未知的解析器,會讓逾時、回退與快取結果相互交織。先用一個明確可達的 443 上游完成測試,再加入備用解析器,日誌會更容易理解。
測試時應選擇三類目標:一個穩定的中國大陸 CDN 網域、一個需要代理存取的海外網域,以及一個區域網路名稱。連續測試首次存取與第二次存取,可以區分首次解析耗時與快取後的連線耗時。若首次慢、後續快,重點查看 DNS 與握手;若每次都慢,則繼續檢查路由、節點延遲與封包遺失。
解析污染與連線異常的排查順序
所謂解析污染,常見表現包括回傳與目標服務無關的位址、同一網域在不同解析路徑取得明顯衝突的結果,或解析成功但連線立即遭重設。不能只憑「網頁打不開」就斷定是 DNS 問題,因為節點失效、系統代理未啟用、路由錯誤分流與 IPv6 無法連線都會產生相似現象。
排查應從最短流程開始。先確認核心啟動成功,再確認網域是否解析,接著確認結果是否合理,最後檢查目標連線使用了哪個出站。v2rayN 日誌若顯示設定欄位錯誤,應先修正 JSON;若顯示 DNS timeout,再檢查上游;若已取得 IP 但連線失敗,則轉向檢查路由與節點。
連線成功,但只有部分網域打不開怎麼辦?
分別記錄異常網域與正常網域,在日誌中確認目標是網域還是 IP。若只有 IP,檢查應用程式是否在代理之外提前解析;若有網域但命中直連,檢查 geosite 分類與規則順序。
換成 DoH 後所有查詢都逾時怎麼辦?
先恢復一個可用的傳統 DNS 兜底,再確認 DoH 位址的 443 連接埠能否透過目前出站連線。使用網域形式的 DoH 位址時,還要保留能完成引導解析的上游。
為什麼中國大陸網站被分到代理線路?
檢查路由規則是否由上到下先命中了更寬泛的代理規則。將區域網路、geosite:cn 與 geoip:cn 規則放在兜底代理規則之前,並重新載入設定。
啟用 IPv6 後首次開啟網站很慢?
暫時將 queryStrategy 改為 UseIPv4 進行對照。如果等待時間消失,繼續檢查本地網路、直連出站與代理節點是否都有可用的 IPv6 路徑。
訂閱更新後自訂 DNS 消失了?
訂閱伺服器設定與客戶端全域 DNS 設定,可能由不同位置管理。更新前記錄「設定」→「參數設定」中的核心選項,並確認自訂設定是否被訂閱產生的設定覆蓋。
還可以進行一次最小化對照:暫時只保留一個確認可用的節點、一個 DNS 上游與最基本的直連規則。若最小設定正常,再逐項恢復廣告過濾、複雜網域集合、多個上游與自訂 hosts。一次加入一項,比反覆清空所有設定更容易找出衝突來源。
穩定設定的收尾檢查
完成 DNS 分流後,不應只看某個網站能否開啟。還要檢查中國大陸 CDN 是否直連、海外網域是否使用預期解析器、DoH 連線是否發生循環依賴,以及核心重新啟動後設定能否正常載入。訂閱更新、客戶端升級或規則庫更新後,也應再次進行關鍵網域測試。
桌面端檢查
- 客戶端
- v2rayN
- 選單入口
- 設定 → 參數設定
- 系統代理
- 確認已啟用
- 日誌目標
- DNS 與 routing
修改自訂 JSON 後重新載入核心,再進行首次存取測試。
Android 端檢查
- 客戶端
- v2rayNG / v2flyNG
- 連線方式
- VpnService
- 省電策略
- 允許背景執行
- 重新載入方式
- 中斷後重新連線
確認系統沒有中止背景連線,再判斷 DNS 是否持續逾時。
- 核心啟動日誌沒有未知欄位、格式錯誤或連接埠被占用的提示。
- 中國大陸網域由指定的本地上游解析,回傳位址符合預期地區。
- 海外網域的 DoH 查詢可透過預期出站存取 443 連接埠。
- 區域網路與保留位址優先直連,不會落入代理兜底規則。
- 目前網路沒有 IPv6 時,不讓 AAAA 連線反覆等待逾時。
- 訂閱更新與規則庫更新後,自訂 DNS 與路由設定仍然存在。
最終可用的方案通常並不複雜:中國大陸網域交給低延遲的本地解析器,海外網域交給穩定的 DoH,讓上游選擇與路由出站保持一致,再用日誌驗證每個步驟。遇到異常時依照「核心啟動、DNS 查詢、回傳位址、規則命中、出站連線」的順序檢查,會比不斷更換節點或解析器更快找出原因。