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

說明 dns 設定中的伺服器分組、domain 比對與 expectIPs 用法,建立中國大陸網域使用本地解析、其他網域使用遠端解析的分流方案,並介紹防污染的關鍵設定。

先釐清 DNS 解析與流量路由

V2Ray 設定中的 DNS 與路由是兩個連續但不同的環節。DNS 負責將網域解析為位址,路由則決定連線交給哪個出站。解析結果正確,不代表流量一定會經過代理;流量符合代理規則,也不代表先前的網域解析一定經由遠端伺服器。排查分流問題時,需要分開觀察這兩個步驟。

當應用程式將網域目標提交給 V2Ray 時,路由模組可以直接依據網域規則判斷出站。如果規則還需要判斷目標位址,或建立出站連線前必須取得位址,內建 DNS 模組才會參與解析。設定中的 routing.domainStrategy 會影響這個流程。常見值包括 AsIsIPIfNonMatchIPOnDemand,不同核心版本的支援範圍與實際行為應以目前版本文件為準。

  • AsIs:優先保留網域,不為了比對 IP 路由規則而主動解析。
  • IPIfNonMatch:網域規則未命中時,再解析位址並繼續檢查 IP 規則。
  • IPOnDemand:路由判斷需要位址時較早觸發解析,設定不當可能增加查詢量。

對大多數「中國大陸直連、其他流量走代理」的設定而言,IPIfNonMatch 是較容易理解的起點。先讓 geosite 網域規則生效,未命中的目標再透過 DNS 取得位址,最後交由 geoip 規則判斷。如此既能保留網域分流能力,也能處理只適合依位址判斷的連線。

dns 設定中的核心欄位

dns.servers 是整個設定的入口。陣列中的項目可以是伺服器位址,也可以是帶有比對條件的物件。物件形式可設定 addressportdomainsexpectIPs。實際支援的欄位會隨 V2Ray、Xray 及用戶端內建核心版本而變動,遷移設定時不要只看用戶端的介面版本。

欄位 作用 設定重點
servers 定義可使用的 DNS 伺服器及比對條件 含有 domains 的伺服器會優先處理對應網域,其餘網域則由預設伺服器處理
hosts 為指定網域提供靜態對應或網域映射 適合固定入口與啟動解析,不適合維護大量動態位址
queryStrategy 控制查詢 IPv4、IPv6 或兩類位址 應與本地網路及出站的可連線能力一致
clientIp 向支援相關機制的解析服務提供用戶端網段資訊 涉及位置判斷與隱私,不了解用途時不應任意填寫
disableCache 控制內建 DNS 快取 長期關閉會增加重複查詢,通常只用於短時間診斷

hosts 的處理會在向外部 DNS 查詢之前進行。它適合解決少量固定網域的啟動依賴,例如遠端解析服務使用網域位址,而該網域本身又需要先解析。此時可使用已確認的固定位址建立初始映射,避免「必須先連線至遠端 DNS,才能解析遠端 DNS 網域」的循環。

queryStrategy 需要依網路條件設定。如果所在網路只有穩定的 IPv4 連線能力,可以從 UseIPv4 開始,減少取得無法連線的 IPv6 位址後所造成的等待。網路具備完整雙堆疊能力時,則可選擇同時查詢。這裡處理的是位址族選擇,不是代理分流;即使只查詢 IPv4,網域仍可依中國大陸與海外規則選擇不同的解析伺服器。

中國大陸網域使用本地解析,其他網域使用遠端解析

以下是一段可合併至主設定的 DNS 範例。中國大陸網域透過 geosite:cn 選擇本地解析伺服器,並使用 geoip:cn 檢查回應範圍。其他網域未命中這項專用規則時,則交給後方的遠端 HTTPS DNS。範例中的位址僅用於說明結構,部署時仍須確認目前網路、核心版本與遠端出站都能存取對應服務。

{
  "dns": {
    "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"
        ]
      },
      "https://1.1.1.1/dns-query"
    ]
  }
}

最後一個不含 domains 的項目就是預設解析伺服器,負責處理未被前方規則明確涵蓋的網域。保留預設項非常重要,因為網站分類資料不可能涵蓋所有網域;新註冊網域、私有業務網域,以及分類尚未更新的網域,都需要有明確的處理去向。

範例將同一個遠端解析位址分別寫成「非中國大陸網域專用伺服器」與「預設伺服器」,目的是清楚展示比對邏輯。實際設定可依目前核心的 DNS 選擇機制精簡。如果版本對相同位址重複項目的處理不符合預期,也可以只保留預設遠端伺服器:中國大陸網域命中第一項,其他網域自然落到預設項。

geosite:cn 是網域分類,不代表解析結果一定會落在中國大陸位址。部分中國大陸網站會使用全球 CDN,解析結果可能隨網路位置改變。相反地,一些未歸入中國大陸分類的網域也可能回傳中國大陸節點。因此,網域分類與位址歸屬需要搭配使用,但不能把任何一項視為絕對結論。

如何使用 expectIPs 識別異常回應

expectIPs 用於描述某個 DNS 伺服器回傳結果的預期位址範圍。將中國大陸網域交給本地解析時,可以設定 geoip:cn。如果回應位址不符合預期,核心可將結果視為不符合條件,並依 DNS 伺服器選擇邏輯嘗試其他候選項。這是降低錯誤解析影響的一項檢查,不是單獨完成所有防護的開關。

它最適合規則邊界清楚的情境。例如,只負責中國大陸分類網域的本地伺服器,預期結果大多位於中國大陸位址範圍。若回傳明顯不相符的位址,改用遠端伺服器查詢通常更合理。不過 CDN、跨境業務與 Anycast 會讓位址歸屬變得複雜,條件設定過於嚴格可能將正常結果誤判為異常。

不建議為所有遠端網域統一加入 geoip:!cn。許多國際服務會依存取位置回傳鄰近節點,其中可能包含中國大陸位址;有些網域還會同時回傳多個區域的位址。強制要求每個結果都屬於非中國大陸範圍,可能造成重複查詢、解析失敗或連線延遲。

設定 expectIPs 時可以遵循三個步驟:

  1. 先只設定 domains 分組,確認每類網域確實進入目標伺服器。
  2. 再為邊界穩定的伺服器加入 expectIPs,觀察常用網站是否出現誤判。
  3. 最後檢查回退行為,確認異常結果會轉向合適的候選伺服器,而不是直接終止解析。

如果加入 expectIPs 後出現間歇性失敗,應先查看失敗網域實際回傳的位址,再決定擴大預期範圍、移除該網域分類,或取消這台伺服器的位址限制。不要透過反覆調整伺服器順序來掩蓋分類錯誤。

讓遠端 DNS 查詢經由代理出站

將遠端 DNS 寫入 dns.servers,只代表指定使用哪個解析服務,並不會自動確保連線路徑。遠端 DNS 的網路請求仍須經過路由與出站。如果直接連線,查詢可能受到本地網路路徑影響;若計畫透過代理存取,就必須為解析服務的目標位址設定明確規則。

以下路由片段會將遠端解析位址交給標籤為 proxy 的出站,同時讓中國大陸網域與中國大陸位址走 direct。最後一條規則接手其餘 TCP 與 UDP 流量。規則會依序比對,遠端 DNS 位址應放在較寬泛的直連位址規則之前。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": [
          "1.1.1.1"
        ],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private",
          "geoip:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

這只是路由片段,主設定中還必須存在標籤完全一致的 proxydirect 出站。標籤有區分大小寫,路由引用不存在的標籤會導致設定載入失敗,或無法依預期建立連線。

如果遠端 DNS 使用網域形式的服務入口,還要額外考慮啟動解析。核心必須先知道服務入口的位址,才能建立 HTTPS 連線。可採用的方式包括使用位址形式的入口、透過 hosts 提供已確認的啟動映射,或讓系統 DNS 只負責這個階段。不要讓遠端 DNS 網域只能由它自己解析。

代理伺服器位址也有相同的啟動依賴。訂閱節點如果使用網域,V2Ray 在代理通道尚未建立時,必須先取得節點位址。這類網域應使用可靠的啟動解析路徑,不能強制要求透過尚未可用的代理出站查詢。

DNS 防污染的關鍵設定

防污染不只是把本地 DNS 換成另一個位址。完整鏈路至少包含查詢選擇、傳輸路徑、回應檢查、快取與業務連線五個部分。任何一部分仍走錯誤路徑,都可能出現「第一次能開、重新整理失敗」、「解析正確但連線直連」或「切換節點後仍使用舊位址」等現象。

依網域分類選擇查詢伺服器

中國大陸網域優先使用本地解析,通常能取得更貼近目前網路的 CDN 位址;其他網域使用遠端解析,減少本地遞迴鏈路對結果的干擾。分類規則必須設定預設出口,避免未分類網域沒有可用伺服器。

讓遠端查詢經由可控出站

即使目標伺服器不同,普通 UDP 查詢仍可能受到中間網路路徑影響。HTTPS DNS 提供加密傳輸,但仍須確認它經由預期出站。只修改伺服器位址而不檢查路由,不足以確認最終路徑。

調整快取用於診斷,而非長期規避

V2Ray 內建 DNS、作業系統與應用程式都可能保存解析結果。修改設定後立即測試時,舊結果可能仍會生效。可以重新載入核心、清除系統 DNS 快取並重新啟動相關應用程式。暫時啟用停用快取的選項有助於確認問題,但長期關閉快取會增加查詢次數與首次連線等待時間。

瀏覽器與應用程式的獨立解析

部分應用程式會使用自己的加密 DNS 設定,不一定會將網域查詢交給系統或 V2Ray。此時 V2Ray 可能只能看到後續連線位址,網域路由能力也會受到影響。測試時應先確認應用程式的解析方式,再判斷內建 DNS 是否確實參與。

v2rayN 中的應用與驗證順序

v2rayN 的訂閱負責提供伺服器設定,DNS 與路由通常屬於用戶端端的執行參數。更新訂閱不會自動確保自訂 DNS 規則維持原狀,具體情況取決於使用的設定模式、路由設定與用戶端版本。修改前應先儲存目前可用的設定,修改後重新載入核心,而不是只切換系統代理開關。

驗證時不要一次測試大量網站。先選一個明確屬於中國大陸分類的網域,再選一個應使用遠端解析的網域,分別觀察 DNS 記錄與路由記錄。檢查內容包括:命中的 DNS 伺服器、解析取得的位址、命中的出站標籤,以及最終連線是否成功。

  1. 確認設定可以正常載入,記錄中沒有未知欄位、缺少標籤或 JSON 格式錯誤。
  2. 查詢中國大陸網域,確認命中帶有 geosite:cn 的本地伺服器物件。
  3. 查詢其他網域,確認進入遠端預設伺服器,並檢查遠端解析連線是否經由代理出站。
  4. 核對業務連線的路由結果,避免 DNS 經由代理,但業務流量在後續規則中被改為直連。
  5. 切換一次測試網域或清除快取,排除舊結果的影響。

如果使用 v2rayNG 或 v2flyNG,判斷方式相同,但設定欄位是否可用取決於應用程式內建的 Xray 或 v2fly 核心版本。桌面版設定未核對版本前,不要直接複製到 Android 端。遇到無法識別的欄位時,應先檢查核心類型與版本,再依對應設定格式調整。

常見故障與定位方法

中國大陸網站開啟速度變慢

先確認中國大陸網域是否落入遠端預設伺服器。如果 geosite 資料未載入、分類檔案版本不相容,或網域本身未被收錄,就會進入預設項目。也要檢查 expectIPs 是否過於嚴格,導致本地伺服器回傳的正常 CDN 位址遭拒,進而觸發遠端查詢。

遠端 DNS 設定完成後仍然解析異常

重點確認遠端請求使用的出站。目標位址可能被 geoip 規則提前比對為直連,也可能因規則順序錯誤而未進入 proxy。HTTPS DNS 連線失敗還可能是系統時間異常、網路無法連至目標位址,或代理節點尚未建立。

設定啟動時出現循環解析

通常是代理節點網域或遠端 DNS 網域只能透過代理解析,而代理本身又依賴這個解析結果。解決方向是建立獨立的啟動解析路徑。節點網域、本地解析伺服器與遠端解析入口三者的依賴關係,應能從直連階段開始逐步建立。

位址正確但網站仍使用錯誤出站

DNS 與業務路由需要分開核對。網域可能已正確解析,但後續 geoip:cn 規則將回傳位址送往直連;也可能是更前面的網域規則已指定其他出站。請依路由規則由上至下檢查第一個命中項,不要只查看最後的兜底規則。

修改後短時間內結果反覆變動

這通常與多層快取、CDN 多位址回應或應用程式自帶解析有關。關閉並重新啟動相關應用程式,重新載入 V2Ray 核心,再使用單一測試網域重複驗證。如果記錄中能看到新的查詢請求,但每次位址不同,可能代表解析服務正在正常進行負載調度,不應只憑位址變化判斷污染。

設定完成檢查

完成 DNS 分流後,先確認中國大陸網域、本地網路位址與遠端網域都有明確的處理路徑。接著確認遠端 DNS 的連線出站、代理節點的啟動解析、預設伺服器與最終兜底路由都存在。最後使用記錄進行驗證,不要只根據網頁能否開啟來判斷。

一套容易維護的設定通常保持簡潔:少量 DNS 伺服器、清楚的網域分組、有限的 expectIPs 條件,以及順序明確的路由規則。分類越細,維護成本越高;條件越嚴格,CDN 與動態位址造成的誤判越多。先建立可運作的兩組解析,再依實際記錄增加例外,比一次加入大量規則更穩定。

需要繼續核對完整 JSON 結構時,可以搭配本站的 JSON 手冊檢查 dnsroutingoutbounds 的層級關係。用戶端設定成功載入後,再逐項測試訂閱節點、系統代理與路由分流,避免將所有連線問題都歸咎於 DNS。

下載v2rayN