· 網路接管 · 約 10 分鐘

V2Ray DNS 分流設定教學:國內外網域分開解析與防污染

說明 dns 區段的 servers、domains 與 expectIPs,示範國內網域使用本地 DNS、海外網域透過遠端 DNS 解析,並整理防污染設定要點。

本文重點

本文適合已能連線至節點、需要調整 DNS 分流的使用者。先確認網域是由應用程式、作業系統或核心解析,再透過國內網域優先規則與遠端 DoH 設定分配查詢,最後查看記錄驗證解析路徑。以下範例是設定片段,須合併至現有設定;它不會自動接管系統 DNS,也無法取代可用的代理出口。

一、DNS 分流與連線分流有何不同

DNS 分流決定「向哪個解析器查詢網域」,連線分流則決定「網站連線使用哪個出口」。兩者彼此相關,卻不是同一項規則。將國內網站設為直連,不代表該網站一定使用國內 DNS;將某個 DNS 位址設為經代理連線,也不代表網站連線會自動經過代理。

網域進入核心 比對解析規則 向解析器查詢 篩選 IP 位址結果 選擇連線出口

這個流程說明需要由核心解析時的常見情況,不代表每個請求都會經過所有步驟。若瀏覽器先透過自己的安全 DNS 取得 IP,再將 IP 傳給代理,核心可能完全收不到原始 DNS 查詢。反過來,應用程式將網域交給 SOCKS 代理後,網域也可能繼續傳到代理伺服器,由伺服器端完成解析。

二、servers、domains 與 expectIPs 的用途

dns.servers 是解析伺服器清單,清單項目可以是單純的位址,也可以是附有網域比對條件的物件。物件中的 domains 用來優先選擇符合條件的伺服器;expectIPs 用來檢查回傳位址是否符合預期。後者不是連線路由規則,也不能證明解析結果真實無誤。

欄位本文設定值實際用途
servers國內 UDP DNS 與遠端 DoH定義核心可使用的解析器。
address223.5.5.5此範例以一般 IP 位址進行 UDP DNS 查詢。
domainsgeosite:cn網域符合指定集合時,優先使用此伺服器;需有相應的網域資料檔。
expectIPsgeoip:cn依 IP 位址集合篩選結果;若不符合,這次結果可能遭拒,並觸發後續嘗試。
skipFallbacktrue此伺服器不會參與一般的備援查詢,但仍可由符合條件的網域規則選用。
queryStrategyUseIPv4本文只查詢 IPv4 位址,方便先排除 IPv6 路徑帶來的變因。

geosite:cn 是資料集中的網域分類,不等同於所有以 .cn 結尾的網域;geoip:cn 也取決於使用的 IP 位址資料庫。跨地區 CDN、企業專線及資料庫更新都可能影響判斷。因此,不能只因「國內網域回傳境外 IP」就判定遭到污染。

結論:先確認分類,再縮小 IP 位址篩選範圍

若某個國內網站加入 expectIPs 後開始解析失敗,先暫時移除限制並比較回傳位址。確認是正常的 CDN 調度後,再為該網域單獨設定解析器;不要反覆更換節點來掩蓋分類問題。

三、國內優先與遠端 DoH 設定範例

以下採用「國內分類優先使用國內 DNS,其餘查詢使用遠端 DoH」的基本架構。第一個項目使用公共 DNS 解析器,並非家用路由器位址;若需解析電信業者內網網域,請另外指定實際的內網 DNS。第二個項目使用 IP 格式的 DoH 位址,避免額外解析 DoH 伺服器名稱。

{
  "dns": {
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ],
        "expectIPs": [
          "geoip:cn"
        ],
        "skipFallback": true
      },
      "https://1.1.1.1/dns-query"
    ]
  }
}

這不是完整的 config.json。請將 dns 物件合併至原有的頂層設定,不要在同一個 JSON 物件中重複加入同名鍵。若已有 DNS 設定,請修改現有區段,不要直接前後貼上兩段設定。JSON 也不能直接加入說明用註解。

  1. 確認使用的 V2Fly 或 Xray 核心支援這些欄位,並查看目前核心的啟動記錄。客戶端名稱與核心版本是不同概念。
  2. 確認核心能讀取包含 cn 分類的網域與 IP 位址資料庫;若資料缺失,請先排除載入錯誤。
  3. 保留現有的 inbounds、outbounds,再合併 DNS 設定、重新載入設定,並檢查錯誤記錄。
  4. 先用少數已知網域進行測試,再逐步擴大比對範圍。若網路確實需要 IPv6,請先確認雙堆疊連線正常,再調整查詢策略。

四、讓 DNS 查詢使用正確的連線出口

設定 DoH 位址只代表指定查詢協定,並不代表網路出口。使用一般 https:// 格式的內建 DoH 查詢時,連線會受到核心路由影響;若預設出口為直連,遠端 DoH 仍可能直接連線。不要將它與繞過一般路由的本機解析格式混用,也別把「已加密」等同於「已經透過代理」。

53
範例國內 DNS 的 UDP 目標連接埠
443
範例 DoH 的 HTTPS 目標連接埠
10808
以下測試假設的本機 SOCKS 連接埠

以下路由片段假設已有名為 direct 與 proxy 的出口標籤。請將標籤替換成現有設定中的實際 tag,或先設定相應出口。範例以指定 IP 和連接埠限制 DNS 連線,避免將這些位址的所有流量都納入同一條規則。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["223.5.5.5"],
        "port": "53",
        "network": "udp",
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["1.1.1.1"],
        "port": "443",
        "network": "tcp",
        "outboundTag": "proxy"
      }
    ]
  }
}

將這兩條規則合併至原有的 routing.rules,並放在可能提前命中的廣泛規則之前。路由會依序比對;若前面的規則已命中,後續 DNS 專用規則就不會生效。這段設定只安排解析器連線,不負責完整的網站流量分流。

五、在 v2rayN 與 Android 客戶端驗證

v2rayN 的一般節點設定通常由客戶端產生。直接修改執行目錄中的暫存設定,切換節點或重新啟動後可能會被覆蓋。請使用目前版本提供的 DNS 設定或自訂設定入口,儲存後檢查實際產生的設定。v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心;客戶端本身的遠端 DNS、VPN 與路由選項,不一定能直接對應原生 JSON 欄位。

  1. 記錄基準狀態:儲存原始設定,記下目前使用的節點、本機監聽連接埠、系統 DNS 與瀏覽器安全 DNS 狀態。每次只變更一項解析設定。
  2. 確認入口:以下指令假設本機有 127.0.0.1:10808 SOCKS 入口。若客戶端顯示不同連接埠,請先修改指令;不要將測試連接埠視為所有版本的預設值。
  3. 比較解析路徑:分別測試由應用程式在本機解析,以及將網域交由代理處理的請求。若結果不同,表示需要進一步確認解析發生的位置。
  4. 檢查記錄:暫時將 log.loglevel 設為 info,並依請求時間比對 DNS 與出口記錄。不同核心的記錄細節有所差異,必要時可短暫切換至 debug,完成後請恢復原本的記錄層級。
curl --socks5 127.0.0.1:10808 -I https://www.qq.com
curl --socks5-hostname 127.0.0.1:10808 -I https://www.qq.com
nslookup www.qq.com 223.5.5.5

第一個指令通常由 curl 在本機解析網站網域;第二個指令會將網域交給 SOCKS 代理,後續解析位置取決於核心路由與出口。因此,第二個指令成功並不能單獨證明使用了本機內建 DNS。第三個指令直接查詢指定的公共 DNS,只能用來比對解析器連線狀況,不能證明 dns.servers 已生效。在 Windows PowerShell 中,若遇到命令別名差異,可改用 curl.exe。

結論:透過查詢路徑驗證設定,不要只看網頁能否開啟

修改後請重新啟動相關應用程式,並等待或清除相應快取,再重新測試。若記錄中沒有預期的解析紀錄,請先確認請求是否進入核心;不要只憑網頁能開啟或延遲有所變化,就認定 DNS 分流已完成。

六、DNS 防污染與常見問題

防污染的重點在於查詢傳輸、解析器可信度、解析結果的使用位置與備援策略。DoH 能保護客戶端與 DoH 解析器之間的傳輸,但不會自動修正錯誤分類、無法連線的代理出口或應用程式自帶的解析功能。expectIPs 只是限制 IP 位址範圍,不能取代加密傳輸,也無法辨識所有錯誤答案。

設定 expectIPs 後,國內網站反而無法開啟,該怎麼辦?

先暫時移除該伺服器的 expectIPs,重新載入後查詢同一個網域。若回傳的是正常的境外 CDN 位址,應調整該網域的解析策略或檢查 IP 位址資料庫,而不是強制將所有結果限定為國內位址。

設定遠端 DoH 後,為什麼還會看到本地 DNS 請求?

先確認請求是由哪個程序送出。瀏覽器、系統服務及未使用代理的應用程式仍可能自行解析;代理節點的網域也可能需要先行解析。請檢查系統 DNS、瀏覽器安全 DNS 與客戶端 DNS 接管設定,不要只修改 dns 區段。

網頁載入很慢,是 DNS 伺服器不夠多嗎?

先分辨延遲是來自 DNS 解析、TCP 連線建立,還是 TLS 交握。以一個國內優先解析器和一個可連線的遠端 DoH 作為基準,檢查逾時與備援記錄。堆疊多個無法連線的解析器可能拉長等待時間,也可能讓查詢分散到更多伺服器。

修改 JSON 後,切換節點為什麼又恢復原狀?

通常是客戶端重新產生了執行設定。請回到客戶端支援的 DNS 設定或自訂設定入口儲存,並在切換節點後核對產生的結果。訂閱會更新節點資料,不代表手動修改的暫存設定也會自動儲存。

只使用 IPv4 可以長期使用嗎?

UseIPv4 適合用來先排除雙堆疊造成的干擾,但會停用 IPv6 位址查詢。若所在網路與代理出口都能穩定連線至 IPv6,可測試 UseIP,再分別檢查 IPv4、IPv6 路由與應用程式行為。

最後請確認並記錄三項結果:網域在哪一層解析、DNS 連線從哪個出口送出,以及解析失敗時會改用哪個解析器。若要對照頂層設定的關係,可參閱設定欄位;若對代理、核心與路由概念仍有疑問,可先閱讀名詞解釋。

下載客戶端