V2Ray DNS 設定詳解:中國大陸與海外分流解析及防污染實務

從網域查詢、上游選擇到路由出站,釐清 V2Ray DNS 分流的完整流程,並提供可直接檢查的 DoH 設定與污染排查方法。

本文速覽

本文適合已能匯入訂閱,卻遇到部分網站解析異常、首次連線緩慢或中國大陸網站繞路的使用者。重點是區分 DNS 解析線路與代理流量線路,設定中國大陸網域使用本地上游、海外網域使用 DoH,再透過日誌、解析結果與路由規則定位問題。

先搞懂 DNS 與路由的兩次選擇

存取網域時,客戶端通常要先取得 IP 位址,接著才會向該 IP 建立 TCP 或 UDP 連線。DNS 決定「網域解析成哪個位址」,路由規則決定「連線從哪個出站送出」。這兩次選擇彼此相關,卻不是同一件事。只設定網域分流規則,不代表 DNS 查詢一定會經過相同線路。

V2Ray 或 Xray 設定中的 dns 物件負責選擇上游解析器、快取結果與限制查詢策略;routing 物件則負責比對網域、IP、連接埠、協定與入站標籤。若應用程式已在本機完成解析,核心收到的可能只有目標 IP,此時僅包含網域的規則未必能命中。

應用程式請求網域選擇 DNS 上游回傳目標 IP比對路由規則選擇出站連線

系統代理與 TUN 模式也會影響連線流程。瀏覽器透過 SOCKS 或 HTTP 代理提交網域時,核心通常仍能看到原始網域;TUN 模式則需要客戶端接管系統流量與 DNS 請求。v2rayN、v2rayNG 和 v2flyNG 的介面選項不同,但判斷原則相同:先確認查詢由誰發起,再確認查詢經過哪條線路。

53
傳統 DNS 常用連接埠
443
DoH 常用連接埠
A / AAAA
主要位址記錄類型
2 次
解析與出站分別決策

中國大陸與海外分流解析為何有用

中國大陸服務常使用依地區調度的 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 的位址時,核心可以嘗試後續解析器。若某個中國大陸網站本來就使用海外位址,條件過嚴反而會造成重複查詢,此時應為該網域增加更精確的例外,而不是直接刪除所有檢查。

一份易讀的分流 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 與網域比對的處理方式,再調整兜底順序,避免憑感覺交換陣列位置。

  1. 先備份目前可連線的設定,不要直接在唯一設定上反覆覆寫。
  2. 先只加入一個中國大陸 DNS 上游,測試常用中國大陸網站是否能正常解析與開啟。
  3. 接著加入 DoH 上游,測試先前異常的海外網域,並觀察核心日誌中的查詢錯誤。
  4. 最後加入 expectIPs、IPv4 策略與 hosts 規則,每次只修改一項。
  5. 完成後重新啟動核心或重新載入設定,避免舊連線與 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:cngeoip: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 上游完成測試,再加入備用解析器,日誌會更容易理解。

測試時應選擇三類目標:一個穩定的中國大陸 CDN 網域、一個需要代理存取的海外網域,以及一個區域網路名稱。連續測試首次存取與第二次存取,可以區分首次解析耗時與快取後的連線耗時。若首次慢、後續快,重點查看 DNS 與握手;若每次都慢,則繼續檢查路由、節點延遲與封包遺失。

解析污染與連線異常的排查順序

所謂解析污染,常見表現包括回傳與目標服務無關的位址、同一網域在不同解析路徑取得明顯衝突的結果,或解析成功但連線立即遭重設。不能只憑「網頁打不開」就斷定是 DNS 問題,因為節點失效、系統代理未啟用、路由錯誤分流與 IPv6 無法連線都會產生相似現象。

排查應從最短流程開始。先確認核心啟動成功,再確認網域是否解析,接著確認結果是否合理,最後檢查目標連線使用了哪個出站。v2rayN 日誌若顯示設定欄位錯誤,應先修正 JSON;若顯示 DNS timeout,再檢查上游;若已取得 IP 但連線失敗,則轉向檢查路由與節點。

連線成功,但只有部分網域打不開怎麼辦?

分別記錄異常網域與正常網域,在日誌中確認目標是網域還是 IP。若只有 IP,檢查應用程式是否在代理之外提前解析;若有網域但命中直連,檢查 geosite 分類與規則順序。

換成 DoH 後所有查詢都逾時怎麼辦?

先恢復一個可用的傳統 DNS 兜底,再確認 DoH 位址的 443 連接埠能否透過目前出站連線。使用網域形式的 DoH 位址時,還要保留能完成引導解析的上游。

為什麼中國大陸網站被分到代理線路?

檢查路由規則是否由上到下先命中了更寬泛的代理規則。將區域網路、geosite:cngeoip:cn 規則放在兜底代理規則之前,並重新載入設定。

啟用 IPv6 後首次開啟網站很慢?

暫時將 queryStrategy 改為 UseIPv4 進行對照。如果等待時間消失,繼續檢查本地網路、直連出站與代理節點是否都有可用的 IPv6 路徑。

訂閱更新後自訂 DNS 消失了?

訂閱伺服器設定與客戶端全域 DNS 設定,可能由不同位置管理。更新前記錄「設定」→「參數設定」中的核心選項,並確認自訂設定是否被訂閱產生的設定覆蓋。

還可以進行一次最小化對照:暫時只保留一個確認可用的節點、一個 DNS 上游與最基本的直連規則。若最小設定正常,再逐項恢復廣告過濾、複雜網域集合、多個上游與自訂 hosts。一次加入一項,比反覆清空所有設定更容易找出衝突來源。

穩定設定的收尾檢查

完成 DNS 分流後,不應只看某個網站能否開啟。還要檢查中國大陸 CDN 是否直連、海外網域是否使用預期解析器、DoH 連線是否發生循環依賴,以及核心重新啟動後設定能否正常載入。訂閱更新、客戶端升級或規則庫更新後,也應再次進行關鍵網域測試。

桌面端檢查

客戶端
v2rayN
選單入口
設定 → 參數設定
系統代理
確認已啟用
日誌目標
DNS 與 routing

修改自訂 JSON 後重新載入核心,再進行首次存取測試。

Android 端檢查

客戶端
v2rayNG / v2flyNG
連線方式
VpnService
省電策略
允許背景執行
重新載入方式
中斷後重新連線

確認系統沒有中止背景連線,再判斷 DNS 是否持續逾時。

最終可用的方案通常並不複雜:中國大陸網域交給低延遲的本地解析器,海外網域交給穩定的 DoH,讓上游選擇與路由出站保持一致,再用日誌驗證每個步驟。遇到異常時依照「核心啟動、DNS 查詢、回傳位址、規則命中、出站連線」的順序檢查,會比不斷更換節點或解析器更快找出原因。

下載客戶端 查看 Windows、macOS、Android、Linux 版本