本文重點

本文適合已能連線至節點,並需要調整 Xray DNS 的 v2rayN 與 v2rayNG 使用者。設定會依「中國大陸網域使用指定的中國大陸解析器,其餘網域使用經代理傳輸的 DoH」逐步說明,並整理內建 DNS 的觸發條件、回退範圍與驗證方式。範例是合併至現有設定的片段,不包含可直接連線的節點參數。

一、內建 DNS 的處理範圍:分清解析請求與實際連線

Xray 的 dns 物件提供核心網域解析功能,但不代表作業系統的所有 DNS 流量都已交由它處理。應用程式可能先透過系統解析器取得 IP,再將 IP 交給代理;也可能把網域交由代理協定處理,再由本機核心或遠端伺服器繼續解析。兩種路徑會產生不同的記錄與檢測結果。

網域進入核心觸發內建解析比對解析器送出查詢取得位址

只有觸發內建解析時,dns.servers 才會參與選擇。例如,路由策略需要先將網域解析成 IP 才能比對,或直連出站設定為依 IP 建立連線,都會使用核心的解析功能。反之,若代理出站將目標網域交給遠端處理,本機 DNS 記錄中沒有該網域也可能是正常情況。

二、核心欄位:servers、domains 與回退策略

servers 可同時包含一般 DNS 位址與 DoH 位址。使用物件格式的伺服器項目,可設定網域比對條件與回退行為。本文所稱的「本地解析」,是指從目前網路直接連線至指定的中國大陸解析器,不是 localhost,也不會自動讀取路由器提供的 DNS。

中國大陸網域解析器

address
223.5.5.5
port
53
domains
geosite:cn
skipFallback
true

僅處理符合條件的網域,不參與其他網域的一般回退。

其他網域解析器

address
https://1.1.1.1/dns-query
傳輸連接埠
443
queryStrategy
UseIPv4,沿用全域設定
查詢出站
proxy,由路由規則指定

使用一般 HTTPS DoH 位址,並透過下文的規則送往代理出站。

欄位本文設定實際作用
domains["geosite:cn"]指定此解析器優先比對的網域範圍,並非流量出站規則。
queryStrategyUseIPv4內建 DNS 僅查詢 IPv4 位址,方便先排除 IPv6 連線能力造成的變數。
skipFallback中國大陸項目設為 true此項目不會加入處理未符合網域的一般回退伺服器清單。
disableFallbackIfMatchtrue網域符合伺服器比對規則後,不會再改用一般回退伺服器。
tagdns-internal為內建 DNS 產生的查詢流量設定路由標記,可用 inboundTag 比對。

UseIP 代表可查詢 IPv4 與 IPv6,UseIPv6 則代表僅查詢 IPv6。此處選用 UseIPv4 作為排除故障的基準,並非所有網路都應停用 IPv6。確認節點出口、系統路由與直連網路都支援 IPv6 後,再調整策略並重新驗證。

geosite:cn 來自所使用的網域資料檔,不會即時判斷網域所屬地區。資料更新時間與收錄範圍都會影響比對結果。geoip:cn 則是 IP 位址集合,不能取代 DNS 項目中的網域分類。

三、DNS 設定範例:符合中國大陸網域時使用專用解析器,其餘改用 DoH

以下 JSON 含有頂層 dns 物件。若現有設定已包含同名物件,請合併其中的內容,不要在同一份設定中重複加入兩個 dns 欄位。範例使用 IP 格式的 DoH 位址,避免連線至解析器前還得先解析其網域;該位址仍須正常驗證 HTTPS 憑證。

{
  "dns": {
    "tag": "dns-internal",
    "queryStrategy": "UseIPv4",
    "disableFallbackIfMatch": true,
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ],
        "skipFallback": true
      },
      {
        "address": "https://1.1.1.1/dns-query"
      }
    ]
  }
}
  1. 符合中國大陸網域集合:使用 223.5.5.5:53。若查詢失敗,目前設定不會再改用一般 DoH 項目回退,方便維持解析範圍。
  2. 未符合網域集合:中國大陸項目因 skipFallback: true 而排除,查詢會交由 DoH 項目處理。
  3. 無法連線至中國大陸解析器:先確認目前網路是否限制 UDP 53。若確實需要備援,可新增另一個 domains 相同的中國大陸解析器,並一併設定傳輸路由。
  4. 內部網域:企業內部網域通常須使用企業 DNS。請為實際的內部網域後綴新增專用比對條件,不要直接將查詢送往公用解析器。

四、搭配路由設定:讓 DoH 確實經過代理

DoH 只代表查詢透過 HTTPS 傳輸,不代表連線一定會經過代理。以下路由範例與前述 DNS 物件搭配使用,並假設現有設定中已有名為 proxy 和 direct 的出站。若節點由用戶端產生,實際標籤可能不同;請先查看執行中的設定,再統一替換相關名稱。

{
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": ["dns-internal"],
        "ip": ["223.5.5.5"],
        "port": "53",
        "network": "udp",
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": ["dns-internal"],
        "ip": ["1.1.1.1"],
        "port": "443",
        "network": "tcp",
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

前兩條規則只比對帶有 dns-internal 標記的查詢連線,必須放在一般規則之前。第三條處理中國大陸網域的業務連線,第四條處理目標已是私有 IP 的連線,最後一條則作為預設規則。AsIs 不會為了比對 IP 路由而主動解析網域,因此此範例將「依 IP 路由」與「DNS 分流」分開處理。

若要讓中國大陸網域的直連連線使用上述內建 DNS,可將現有 direct 出站的相關部分設定如下。請勿另外建立同名出站;應修改原有物件並保留其他必要設定。

{
  "tag": "direct",
  "protocol": "freedom",
  "settings": {
    "domainStrategy": "UseIP"
  }
}

判斷方式:先確認 DNS 連線的出站,再檢查解析結果

記錄中出現 DoH 位址,只能證明系統選用了該解析器。還須確認送往 1.1.1.1:443 的查詢連線確實命中 proxy;若連線走了 direct,請先修正規則順序與標籤,再繼續排查 DNS 汙染。

五、套用至用戶端並驗證:先檢查執行設定,再檢查查詢

v2rayN 可產生不同核心的設定,本文欄位僅適用於 Xray。v2rayNG 使用 Xray,但介面選項可能會產生或覆寫部分 DNS 參數。v2flyNG 使用 V2Fly,不能只因欄位名稱相似,就直接套用本文片段。設定入口會隨用戶端版本而異,請以啟動後的實際設定與記錄為準。

53
範例中國大陸 DNS 的 UDP 連接埠
443
範例 DoH 的 HTTPS 連接埠
2
需要確認的出站標籤
  1. 備份:保留目前可連線的設定與路由,並記下使用中的節點、所選核心,以及系統代理或 VPN 狀態。
  2. 合併:透過目前用戶端提供的 DNS 編輯或自訂設定入口加入片段。若入口只接受 DNS 物件內容,請勿連同外層 {"dns": ...} 一起貼上。
  3. 檢查:確認執行中的設定仍包含 dns-internal、兩條 DNS 傳輸規則與正確的出站標籤。重新啟動核心後,檢查是否出現未知欄位、缺少資料檔或出站不存在等錯誤。
  4. 分組測試:選擇一個確認收錄於目前 geosite:cn 集合中的網域,再選一個未命中的網域。清除相關快取或改用新的測試網域後,觀察實際查詢連線。
  5. 確認應用程式設定:分別檢查瀏覽器安全 DNS、Android 私人 DNS 與應用程式排除清單。請勿將瀏覽器自行送出的 DoH 請求誤認為內建 DNS 查詢。

Windows 可視需要執行以下命令清除系統 DNS 快取。這不會清除瀏覽器獨立快取、遠端伺服器快取或核心自身快取,因此執行後沒有新增查詢記錄,不能直接判定設定失效。

ipconfig /flushdns

nslookup example.com 223.5.5.5 只會測試系統連線至指定解析器的路徑,不會自動使用 Xray 的內建 DNS。同樣地,瀏覽器能開啟網站只代表業務連線可用,無法證明 DNS 分流正確。驗證時須同時確認網域是否進入核心、查詢送往哪個解析器,以及使用哪個出站。

六、防止汙染與外洩:分層定位故障

DNS 汙染通常會造成錯誤或異常位址,也可能導致解析失敗,但單次結果不同不一定就是汙染。內容傳遞網路會依遞迴解析器的位置、電信業者與網路狀況回傳不同位址。請綜合連線錯誤、憑證異常與多次查詢結果判斷,不要只因「兩個 DNS 回傳結果不同」就下結論。

現象優先檢查調整方向
中國大陸網域解析逾時是否符合中國大陸項目,以及 UDP 53 是否可連線檢查目前網路的限制,並為相同網域範圍新增備用解析器。
DoH 連線逾時proxy 標籤、規則順序與節點連線狀態先恢復代理連線,並維持正常的 TLS 憑證驗證。
網頁可以開啟,但沒有本機查詢記錄網域是否交由代理在遠端解析,以及是否已有快取追蹤網域的傳遞路徑,不必要求所有連線都產生本機查詢記錄。
檢測結果出現預期外的解析器瀏覽器安全 DNS、系統私人 DNS,以及應用程式是否繞過設定逐項統一測試路徑,再確認解析器的實際位置。
切換雙協定堆疊後,部分網站載入變慢IPv6 直連、節點出口與路由涵蓋範圍暫時切回 UseIPv4 進行對照,確認 IPv6 連線正常後再啟用。

DNS 外洩的判定須依預期策略而定。本文明確允許中國大陸網域使用直連解析器,因此觀察到這類查詢,不代表設定失效。真正需要確認的是:原本應走代理的查詢是否直接從本機送出,以及未納入接管範圍的應用程式是否繞過設定。

七、常見問題:為什麼修改設定後結果沒變?

只調整 queryStrategy,就能阻止應用程式使用 IPv6 嗎?

不行。UseIPv4 限制的是這套內建 DNS 查詢,不會停用系統 IPv6,也不會阻止應用程式自行查詢 AAAA 記錄。請先確認應用程式請求進入哪條解析路徑,再檢查 VPN 或其他流量接管範圍。

設定了遠端 DNS,為什麼記錄仍顯示 direct?

遠端位址不代表流量會走代理。請確認 dns.tag 是否與規則中的 inboundTag 相同、送往 1.1.1.1:443 的規則是否排在預設規則之前,以及實際代理出站是否確實命名為 proxy。

中國大陸 DNS 解析失敗後,為什麼沒有自動改用 DoH?

本文啟用了 disableFallbackIfMatch,網域符合規則後就不會進入一般回退。若需要備援,優先新增網域比對條件相同的項目;若改為允許跨組回退,請重新確認網域資訊的傳送範圍。

訂閱更新後,DNS 設定又還原了,該怎麼辦?

先確認你修改的是用戶端儲存的設定,還是每次啟動時重新產生的暫存設定。請透過用戶端實際支援的持久化 DNS 或自訂設定入口進行調整,重新產生設定後再核對執行內容;並保留備份,避免更新時遺失規則。