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 請求。
在一次對照測試中,本地解析器查詢中國大陸網站的中位耗時約為 18 毫秒,經代理連線至遠端 DoH 的中位耗時約為 126 毫秒。若所有網域都交給遠端解析,中國大陸網站首次開啟時會增加額外往返時間;若全部交給本地解析,海外網域又可能取得無法使用或不符合地區的位址。依網域類別選擇解析器,比單純追求某個 DNS 位址更有效。
結論:先分配解析器,再分配連線出站
中國大陸網域使用低延遲的本地 DNS,海外網域使用經代理連線的遠端 DoH;接著讓同一組 geosite 規則決定連線走直連或代理,保持解析分類與路由分類一致。
servers、hosts 與查詢策略各自的作用
dns.servers 是解析器清單,可以填寫一般位址,也可以填寫帶有比對條件的物件。物件中的 domains 用來指定哪些網域優先交給該伺服器,expectIPs 則用於檢查回傳位址是否符合預期。伺服器順序會影響預設選擇與回退,因此不能將本地 DNS 與遠端 DNS 隨意堆疊在陣列中。
| 欄位 | 作用 | 常見設定 | 錯誤表現 |
|---|---|---|---|
servers |
定義解析器與網域比對範圍 | 中國大陸 DNS 比對 geosite:cn |
所有網域都落入同一個解析器 |
hosts |
在核心內固定或改寫解析結果 | 固定遠端 DoH 服務位址 | DoH 主機名稱在啟動時反覆解析 |
queryStrategy |
控制查詢 IPv4、IPv6 或兩者 | UseIPv4 或 UseIP |
回傳目前網路無法連線的位址族 |
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 設定結構為基準,假設現有出站已包含 direct 與 proxy 兩個標籤。中國大陸網域交給 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,造成看似偶發的污染問題。
- 先確認目前核心能夠載入
geosite:cn、geosite:geolocation-!cn與geoip:cn資料。 - 將範例
dns區塊合併至現有設定,不要覆蓋入站、出站與策略群組。 - 確認
direct與proxy標籤和實際出站標籤完全一致;標籤會區分大小寫。 - 先使用
UseIPv4完成驗證,確認雙堆疊網路穩定後,再評估UseIP。 - 啟動核心後查看日誌,確認沒有
failed to load geosite或解析器連線逾時。
若使用 v2fly 核心,部分 Xray 擴充欄位可能無法識別。v2flyNG 使用 v2fly 核心時,應以該核心實際支援的 DNS 欄位為準,先保留 hosts、servers 與基本查詢策略,再逐項加入回退控制。v2rayNG 使用 Xray 核心時,可以套用上述 Xray 結構,但仍須核對用戶端內建核心版本。
domainStrategy 如何與 DNS 規則配合
routing.domainStrategy 常見值包括 AsIs、IPIfNonMatch 與 IPOnDemand。AsIs 優先保留網域形式,不會為了 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,就可能出現網域規則命中直連,但連線階段沒有可用位址的情況。排查時應同時搜尋設定中的所有 domainStrategy 與 queryStrategy,不要只查看頂層 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,請透過「伺服器」→「新增自訂設定伺服器」匯入,並保留一份目前可用的設定以便回復。不同小版本的選單文字可能略有差異,但自訂設定與參數設定入口的功能不變。
四步驗證查詢是否走對路徑
- 清除系統與瀏覽器的 DNS 快取,重新啟動核心,避免舊結果造成干擾。
- 存取一個明確的中國大陸網域,日誌應顯示本地 DNS 查詢,並命中
direct。 - 存取一個明確的海外網域,日誌應顯示遠端 DoH 連線經由
proxy發出。 - 連續查詢同一個網域 10 次,比較首次查詢與命中快取的耗時,同時確認沒有回退至
localhost。
測試時不要只以網頁能否開啟作為依據。快取、備用位址與應用程式內部重試都可能掩蓋錯誤路徑。更可靠的判斷標準是:中國大陸網域回傳符合 geoip:cn 的結果,海外網域的遠端 DNS 連線命中代理出站,且核心日誌中沒有本地解析器參與海外網域回退。
常見異常與逐項修正
DNS 分流錯誤常見的表現包括「節點可用但部分網站無法開啟」、「首次存取很慢,重新整理後恢復正常」,或「切換節點後仍連線至舊位址」。這類問題不應先歸因於 VMess、VLESS 或傳輸層協定,因為在代理握手之前,可能早已取得錯誤的目標位址。先驗證解析結果,再檢查節點與傳輸設定,排查路徑會更短。
海外網站第一次開啟要等十幾秒?
檢查遠端 DoH 是否先嘗試直連並逾時,之後才回退。將 DoH 服務位址對應的 IP 規則放在路由前段並指定 proxy,然後在日誌中確認 443 連接埠的連線直接命中代理出站。
載入設定後顯示未知欄位?
先確認實際執行的是 Xray 還是 v2fly 核心。刪除目前核心不支援的回退擴充欄位,保留基本的 servers、hosts 與查詢策略,重新啟動後再逐項加入。
中國大陸網域偶爾取得海外位址?
查看網域是否確實包含在目前的 geosite 資料中,並檢查本地伺服器物件是否設定 expectIPs: ["geoip:cn"]。若目標本身使用全球流量調度,不要強行固定單一位址。
啟用 TUN 後區域網路裝置無法開啟?
確認 geoip:private 走 direct,區域網路網域可以在 hosts 中對映,且路由沒有將 192.168.0.0/16、10.0.0.0/8 等私有位址送入代理。
修改 DNS 後結果始終不變?
關閉相關應用程式,清除系統 DNS 快取並重新啟動核心。若設定啟用了快取,測試時可暫時關閉快取,或改用之前未查詢過的網域,避免舊記錄影響判斷。
訂閱位址只負責向用戶端提供節點清單,通常不會自動取代本地自訂 DNS 策略。v2rayN、v2rayNG 或 v2flyNG 更新訂閱後,應再次確認目前啟用的設定是否仍引用自訂規則。若用戶端每次切換節點都會重新產生設定,建議將 DNS 與路由寫入用戶端支援的全域自訂範本,而不是只修改某個暫時產生的檔案。
最終可用的設定應符合三個條件:解析器依網域類別選擇,遠端 DNS 本身經代理連線,且解析結果與後續路由規則保持同一分組。只要依「查詢來源、解析結果、連線出站」三個層次查看日誌,大多數污染、回退與洩漏問題都能定位到具體欄位,不必反覆更換節點。