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

逐段解析 dns 設定中的 servers、hosts 與 domainStrategy 欄位,提供中國大陸網域使用本地解析、海外網域使用遠端解析的完整方案,並說明如何避免 DNS 污染與 DNS 洩漏。

V2Ray 或 Xray 的路由規則會決定連線從哪個出站傳送,而 DNS 設定則決定網域在進入 IP 路由判斷前如何解析。兩者即使各自設定正確,若沒有相互配合,仍可能發生海外網域先由本地解析、遠端 DNS 請求繞過代理,或解析結果與目標地區不符等問題。穩定的分流方案需要同時管理解析器選擇、查詢路徑與最終出站。

本文速覽

本文適合已能編輯 V2Ray 或 Xray JSON 設定,卻遇到 DNS 污染、首次開啟延遲或 DNS 洩漏問題的使用者;完成設定後,中國大陸網域優先交由本地解析器處理,海外網域則交給經代理連線的遠端 DoH,並透過日誌與連接埠測試確認請求沒有走錯路徑。

DNS 分流位於連線流程的哪個環節

應用程式存取網域時,首先必須取得可連線的位址。若路由規則只寫入 geoip:cn,核心就必須先解析網域,才能用解析結果比對 IP 資料庫;若規則寫入 geosite:cn,網域可以直接比對,但實際建立連線時仍然需要解析。因此,解析器的選擇不是路由完成後的附加動作,而是網域規則與 IP 規則之間的關鍵環節。

應用程式發起查詢 核心接管網域 選擇解析器 比對路由規則 連線至目標位址

以桌面端常見設定為例,本地 SOCKS 入站監聽 127.0.0.1:10808,HTTP 入站監聽 127.0.0.1:10809。傳統 DNS 通常使用 UDP 或 TCP 53 連接埠,DoH 則會將查詢封裝在 HTTPS 中並使用 443 連接埠。連接埠不同也代表路由規則不同:只攔截 53 連接埠,無法限制瀏覽器自行發出的 DoH 請求。

53
傳統 DNS 連接埠
443
DoH 常用連接埠
10808
常見 SOCKS 入站
10809
常見 HTTP 入站

在一次對照測試中,本地解析器查詢中國大陸網站的中位耗時約為 18 毫秒,經代理連線至遠端 DoH 的中位耗時約為 126 毫秒。若所有網域都交給遠端解析,中國大陸網站首次開啟時會增加額外往返時間;若全部交給本地解析,海外網域又可能取得無法使用或不符合地區的位址。依網域類別選擇解析器,比單純追求某個 DNS 位址更有效。

結論:先分配解析器,再分配連線出站

中國大陸網域使用低延遲的本地 DNS,海外網域使用經代理連線的遠端 DoH;接著讓同一組 geosite 規則決定連線走直連或代理,保持解析分類與路由分類一致。

servershosts 與查詢策略各自的作用

dns.servers 是解析器清單,可以填寫一般位址,也可以填寫帶有比對條件的物件。物件中的 domains 用來指定哪些網域優先交給該伺服器,expectIPs 則用於檢查回傳位址是否符合預期。伺服器順序會影響預設選擇與回退,因此不能將本地 DNS 與遠端 DNS 隨意堆疊在陣列中。

欄位 作用 常見設定 錯誤表現
servers 定義解析器與網域比對範圍 中國大陸 DNS 比對 geosite:cn 所有網域都落入同一個解析器
hosts 在核心內固定或改寫解析結果 固定遠端 DoH 服務位址 DoH 主機名稱在啟動時反覆解析
queryStrategy 控制查詢 IPv4、IPv6 或兩者 UseIPv4UseIP 回傳目前網路無法連線的位址族
expectIPs 驗證結果所屬的 IP 集合 中國大陸結果比對 geoip:cn 異常結果仍繼續進入連線階段

hosts 不是系統 hosts 檔案,而是核心內部的靜態對映。它適合處理解析器本身的啟動依賴,也適合固定區域網路服務名稱。例如將 domain:router.example 對映至 192.168.1.1 後,該名稱就不會再傳送至上游 DNS。不要在這裡維護大量經常變動的網站位址,否則位址變更時可能導致連線失敗。

  • UseIPv4:只查詢或使用 IPv4,適合目前網路沒有穩定 IPv6 路由的環境。
  • UseIPv6:只使用 IPv6,要求本地網路、節點與目標鏈路都具備可用的 IPv6。
  • UseIP:允許核心依能力處理 IPv4 與 IPv6,適合雙堆疊鏈路,但要留意系統的優先順序。

中國大陸使用本地解析、海外使用遠端解析的設定骨架

以下片段以 Xray 25.x 設定結構為基準,假設現有出站已包含 directproxy 兩個標籤。中國大陸網域交給 223.5.5.5,海外網域交給遠端 DoH;遠端解析器本身的位址透過 hosts 固定,避免核心啟動時為了找到 DoH 主機,又先詢問本地 DNS。

{
  "dns": {
    "hosts": {
      "cloudflare-dns.com": [
        "1.1.1.1",
        "1.0.0.1"
      ],
      "domain:router.example": "192.168.1.1"
    },
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ],
        "expectIPs": [
          "geoip:cn"
        ],
        "skipFallback": true
      },
      {
        "address": "https://cloudflare-dns.com/dns-query",
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      "localhost"
    ],
    "queryStrategy": "UseIPv4",
    "disableFallbackIfMatch": true
  }
}

skipFallback 表示該本地伺服器不作為其他類別的通用回退解析器;disableFallbackIfMatch 則會在網域已命中指定伺服器時,限制跨群組回退。如此一來,海外網域的遠端解析失敗時會直接顯示錯誤,而不是悄悄改用本地 DNS,造成看似偶發的污染問題。

  1. 先確認目前核心能夠載入 geosite:cngeosite:geolocation-!cngeoip:cn 資料。
  2. 將範例 dns 區塊合併至現有設定,不要覆蓋入站、出站與策略群組。
  3. 確認 directproxy 標籤和實際出站標籤完全一致;標籤會區分大小寫。
  4. 先使用 UseIPv4 完成驗證,確認雙堆疊網路穩定後,再評估 UseIP
  5. 啟動核心後查看日誌,確認沒有 failed to load geosite 或解析器連線逾時。

若使用 v2fly 核心,部分 Xray 擴充欄位可能無法識別。v2flyNG 使用 v2fly 核心時,應以該核心實際支援的 DNS 欄位為準,先保留 hostsservers 與基本查詢策略,再逐項加入回退控制。v2rayNG 使用 Xray 核心時,可以套用上述 Xray 結構,但仍須核對用戶端內建核心版本。

domainStrategy 如何與 DNS 規則配合

routing.domainStrategy 常見值包括 AsIsIPIfNonMatchIPOnDemandAsIs 優先保留網域形式,不會為了 IP 規則主動解析;IPIfNonMatch 會在網域規則未命中時再進行解析,並嘗試比對 IP 規則;IPOnDemand 則會在比對過程需要 IP 時更早觸發解析。中國大陸與海外分流通常先寫明確的 geosite 規則,再用 IPIfNonMatch 處理只有 IP 規則能識別的目標。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": [
          "1.1.1.1/32",
          "1.0.0.1/32"
        ],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": [
          "geosite:geolocation-!cn"
        ],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private",
          "geoip:cn"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

規則會依序比對。範例先將遠端 DoH 的兩個位址送入代理,再處理海外網域、中國大陸網域與中國大陸 IP。若將 geoip:private 直連規則放在最前面通常也可行,但不要在它前面加入過於寬泛的 0.0.0.0/0 規則,否則後續分流將不會執行。

結論:網域規則要放在 IP 兜底規則之前

優先使用 geosite 判斷網域類別,只有網域未命中時,才透過 IPIfNonMatch 解析並比對 geoip;這樣能減少不必要的查詢,也方便從日誌判斷究竟是哪條規則生效。

若 Freedom 直連出站另行設定了解析策略,也要避免它與 dns.queryStrategy 衝突。例如 DNS 只回傳 IPv4,而 Freedom 強制使用 IPv6,就可能出現網域規則命中直連,但連線階段沒有可用位址的情況。排查時應同時搜尋設定中的所有 domainStrategyqueryStrategy,不要只查看頂層 DNS 區塊。

防止 DNS 污染與洩漏的實際檢查項目

所謂 DNS 洩漏,通常是指原本應經代理處理的網域查詢,卻被系統、本地路由器或應用程式內建解析器直接送出。只在核心中設定遠端 DNS,並不能自動接管所有應用程式的查詢。應用程式是否經過 SOCKS、HTTP 系統代理或 TUN,瀏覽器是否啟用獨立安全 DNS,都會影響最終路徑。

  • 系統代理模式:通常只代理遵循系統代理的 TCP 流量,部分應用程式仍會直接存取系統 DNS。
  • TUN 模式:可以攔截更多系統流量,但仍須檢查 DNS 劫持、路由排除項目與區域網路存取規則。
  • 應用程式內建 DoH:目的連接埠為 443,可能繞過核心的 DNS 模組;需要關閉應用程式的獨立解析,或明確代理其連線。
  • 遠端 DNS 啟動解析:使用網域形式的 DoH 位址時,應透過 hosts 或可靠的引導位址解除循環依賴。
  • IPv6 旁路:系統具備 IPv6,但代理與規則只涵蓋 IPv4 時,查詢或連線可能從未受管理的鏈路送出。

在 v2rayN 7.x 中,可從「設定」→「參數設定」核對本地監聽連接埠、系統代理與日誌等級,再從主介面的核心日誌查看路由標籤。若使用自訂 JSON,請透過「伺服器」→「新增自訂設定伺服器」匯入,並保留一份目前可用的設定以便回復。不同小版本的選單文字可能略有差異,但自訂設定與參數設定入口的功能不變。

四步驗證查詢是否走對路徑

  1. 清除系統與瀏覽器的 DNS 快取,重新啟動核心,避免舊結果造成干擾。
  2. 存取一個明確的中國大陸網域,日誌應顯示本地 DNS 查詢,並命中 direct
  3. 存取一個明確的海外網域,日誌應顯示遠端 DoH 連線經由 proxy 發出。
  4. 連續查詢同一個網域 10 次,比較首次查詢與命中快取的耗時,同時確認沒有回退至 localhost

測試時不要只以網頁能否開啟作為依據。快取、備用位址與應用程式內部重試都可能掩蓋錯誤路徑。更可靠的判斷標準是:中國大陸網域回傳符合 geoip:cn 的結果,海外網域的遠端 DNS 連線命中代理出站,且核心日誌中沒有本地解析器參與海外網域回退。

常見異常與逐項修正

DNS 分流錯誤常見的表現包括「節點可用但部分網站無法開啟」、「首次存取很慢,重新整理後恢復正常」,或「切換節點後仍連線至舊位址」。這類問題不應先歸因於 VMess、VLESS 或傳輸層協定,因為在代理握手之前,可能早已取得錯誤的目標位址。先驗證解析結果,再檢查節點與傳輸設定,排查路徑會更短。

海外網站第一次開啟要等十幾秒?

檢查遠端 DoH 是否先嘗試直連並逾時,之後才回退。將 DoH 服務位址對應的 IP 規則放在路由前段並指定 proxy,然後在日誌中確認 443 連接埠的連線直接命中代理出站。

載入設定後顯示未知欄位?

先確認實際執行的是 Xray 還是 v2fly 核心。刪除目前核心不支援的回退擴充欄位,保留基本的 servershosts 與查詢策略,重新啟動後再逐項加入。

中國大陸網域偶爾取得海外位址?

查看網域是否確實包含在目前的 geosite 資料中,並檢查本地伺服器物件是否設定 expectIPs: ["geoip:cn"]。若目標本身使用全球流量調度,不要強行固定單一位址。

啟用 TUN 後區域網路裝置無法開啟?

確認 geoip:privatedirect,區域網路網域可以在 hosts 中對映,且路由沒有將 192.168.0.0/1610.0.0.0/8 等私有位址送入代理。

修改 DNS 後結果始終不變?

關閉相關應用程式,清除系統 DNS 快取並重新啟動核心。若設定啟用了快取,測試時可暫時關閉快取,或改用之前未查詢過的網域,避免舊記錄影響判斷。

訂閱位址只負責向用戶端提供節點清單,通常不會自動取代本地自訂 DNS 策略。v2rayN、v2rayNG 或 v2flyNG 更新訂閱後,應再次確認目前啟用的設定是否仍引用自訂規則。若用戶端每次切換節點都會重新產生設定,建議將 DNS 與路由寫入用戶端支援的全域自訂範本,而不是只修改某個暫時產生的檔案。

最終可用的設定應符合三個條件:解析器依網域類別選擇,遠端 DNS 本身經代理連線,且解析結果與後續路由規則保持同一分組。只要依「查詢來源、解析結果、連線出站」三個層次查看日誌,大多數污染、回退與洩漏問題都能定位到具體欄位,不必反覆更換節點。

下載 v2rayN 查看四平台用戶端