本文適合已能連線至節點,並需要調整 Xray DNS 的 v2rayN 與 v2rayNG 使用者。設定會依「中國大陸網域使用指定的中國大陸解析器,其餘網域使用經代理傳輸的 DoH」逐步說明,並整理內建 DNS 的觸發條件、回退範圍與驗證方式。範例是合併至現有設定的片段,不包含可直接連線的節點參數。
一、內建 DNS 的處理範圍:分清解析請求與實際連線
Xray 的 dns 物件提供核心網域解析功能,但不代表作業系統的所有 DNS 流量都已交由它處理。應用程式可能先透過系統解析器取得 IP,再將 IP 交給代理;也可能把網域交由代理協定處理,再由本機核心或遠端伺服器繼續解析。兩種路徑會產生不同的記錄與檢測結果。
只有觸發內建解析時,dns.servers 才會參與選擇。例如,路由策略需要先將網域解析成 IP 才能比對,或直連出站設定為依 IP 建立連線,都會使用核心的解析功能。反之,若代理出站將目標網域交給遠端處理,本機 DNS 記錄中沒有該網域也可能是正常情況。
- DNS 分流:決定要使用哪個解析器查詢特定網域。
- 流量分流:決定連線至目標網站時使用
direct或proxy出站。 - DNS 傳輸分流:決定送往解析器的 UDP 或 HTTPS 請求要從哪裡送出。
- 系統接管:決定瀏覽器、其他應用程式與系統服務的 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"] | 指定此解析器優先比對的網域範圍,並非流量出站規則。 |
queryStrategy | UseIPv4 | 內建 DNS 僅查詢 IPv4 位址,方便先排除 IPv6 連線能力造成的變數。 |
skipFallback | 中國大陸項目設為 true | 此項目不會加入處理未符合網域的一般回退伺服器清單。 |
disableFallbackIfMatch | true | 網域符合伺服器比對規則後,不會再改用一般回退伺服器。 |
tag | dns-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"
}
]
}
}
- 符合中國大陸網域集合:使用
223.5.5.5:53。若查詢失敗,目前設定不會再改用一般 DoH 項目回退,方便維持解析範圍。 - 未符合網域集合:中國大陸項目因
skipFallback: true而排除,查詢會交由 DoH 項目處理。 - 無法連線至中國大陸解析器:先確認目前網路是否限制 UDP 53。若確實需要備援,可新增另一個
domains相同的中國大陸解析器,並一併設定傳輸路由。 - 內部網域:企業內部網域通常須使用企業 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 汙染。
- 一般 HTTPS 與本機模式:本文採用
https://位址。請勿任意改為https+local://,後者的本機處理路徑不適用於本文的路由假設。 - 節點啟動依賴:若代理伺服器位址是網域,建立代理連線前仍須有可用的解析路徑。請勿讓節點網域第一次解析時,依賴尚未建立的同一個代理。
- 合併規則:若已有廣告封鎖、區域網路或自訂網域規則,請逐條合併,不要整份覆蓋現有路由設定。
五、套用至用戶端並驗證:先檢查執行設定,再檢查查詢
v2rayN 可產生不同核心的設定,本文欄位僅適用於 Xray。v2rayNG 使用 Xray,但介面選項可能會產生或覆寫部分 DNS 參數。v2flyNG 使用 V2Fly,不能只因欄位名稱相似,就直接套用本文片段。設定入口會隨用戶端版本而異,請以啟動後的實際設定與記錄為準。
- 備份:保留目前可連線的設定與路由,並記下使用中的節點、所選核心,以及系統代理或 VPN 狀態。
- 合併:透過目前用戶端提供的 DNS 編輯或自訂設定入口加入片段。若入口只接受 DNS 物件內容,請勿連同外層
{"dns": ...}一起貼上。 - 檢查:確認執行中的設定仍包含
dns-internal、兩條 DNS 傳輸規則與正確的出站標籤。重新啟動核心後,檢查是否出現未知欄位、缺少資料檔或出站不存在等錯誤。 - 分組測試:選擇一個確認收錄於目前
geosite:cn集合中的網域,再選一個未命中的網域。清除相關快取或改用新的測試網域後,觀察實際查詢連線。 - 確認應用程式設定:分別檢查瀏覽器安全 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 或自訂設定入口進行調整,重新產生設定後再核對執行內容;並保留備份,避免更新時遺失規則。