本文適合已能連線至節點、需要調整 DNS 分流的使用者。先確認網域是由應用程式、作業系統或核心解析,再透過國內網域優先規則與遠端 DoH 設定分配查詢,最後查看記錄驗證解析路徑。以下範例是設定片段,須合併至現有設定;它不會自動接管系統 DNS,也無法取代可用的代理出口。
一、DNS 分流與連線分流有何不同
DNS 分流決定「向哪個解析器查詢網域」,連線分流則決定「網站連線使用哪個出口」。兩者彼此相關,卻不是同一項規則。將國內網站設為直連,不代表該網站一定使用國內 DNS;將某個 DNS 位址設為經代理連線,也不代表網站連線會自動經過代理。
這個流程說明需要由核心解析時的常見情況,不代表每個請求都會經過所有步驟。若瀏覽器先透過自己的安全 DNS 取得 IP,再將 IP 傳給代理,核心可能完全收不到原始 DNS 查詢。反過來,應用程式將網域交給 SOCKS 代理後,網域也可能繼續傳到代理伺服器,由伺服器端完成解析。
- 系統解析:應用程式呼叫作業系統的解析介面,結果通常會受到網卡 DNS、系統快取及本地網路影響。
- 核心解析:路由判斷或連線出口需要 IP 時,V2Ray、Xray 內建的 DNS 才可能介入。
- 應用程式內建解析:瀏覽器內建的 DoH 可能繞過系統 DNS,需另外檢查。
- 伺服器端解析:網域透過 VMess、VLESS 等代理出口傳到遠端後,可能由遠端解析,不受本機
dns.servers直接控制。
二、servers、domains 與 expectIPs 的用途
dns.servers 是解析伺服器清單,清單項目可以是單純的位址,也可以是附有網域比對條件的物件。物件中的 domains 用來優先選擇符合條件的伺服器;expectIPs 用來檢查回傳位址是否符合預期。後者不是連線路由規則,也不能證明解析結果真實無誤。
| 欄位 | 本文設定值 | 實際用途 |
|---|---|---|
servers | 國內 UDP DNS 與遠端 DoH | 定義核心可使用的解析器。 |
address | 223.5.5.5 | 此範例以一般 IP 位址進行 UDP DNS 查詢。 |
domains | geosite:cn | 網域符合指定集合時,優先使用此伺服器;需有相應的網域資料檔。 |
expectIPs | geoip:cn | 依 IP 位址集合篩選結果;若不符合,這次結果可能遭拒,並觸發後續嘗試。 |
skipFallback | true | 此伺服器不會參與一般的備援查詢,但仍可由符合條件的網域規則選用。 |
queryStrategy | UseIPv4 | 本文只查詢 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 也不能直接加入說明用註解。
- 確認使用的 V2Fly 或 Xray 核心支援這些欄位,並查看目前核心的啟動記錄。客戶端名稱與核心版本是不同概念。
- 確認核心能讀取包含
cn分類的網域與 IP 位址資料庫;若資料缺失,請先排除載入錯誤。 - 保留現有的
inbounds、outbounds,再合併 DNS 設定、重新載入設定,並檢查錯誤記錄。 - 先用少數已知網域進行測試,再逐步擴大比對範圍。若網路確實需要 IPv6,請先確認雙堆疊連線正常,再調整查詢策略。
四、讓 DNS 查詢使用正確的連線出口
設定 DoH 位址只代表指定查詢協定,並不代表網路出口。使用一般 https:// 格式的內建 DoH 查詢時,連線會受到核心路由影響;若預設出口為直連,遠端 DoH 仍可能直接連線。不要將它與繞過一般路由的本機解析格式混用,也別把「已加密」等同於「已經透過代理」。
以下路由片段假設已有名為 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 專用規則就不會生效。這段設定只安排解析器連線,不負責完整的網站流量分流。
IPIfNonMatch表示網域規則未命中時,可能先解析網域,再嘗試比對 IP 規則。若網域已符合某條代理規則,就不一定會觸發本機內建 DNS。- 代理節點若使用網域名稱,也需要先行解析。請避免形成「連線到 DoH 需要代理,但建立代理又必須依賴同一個 DoH」的循環。
- 本文使用數字 IP 格式的 DoH 位址,但仍須正常驗證 TLS 憑證;請勿透過停用憑證驗證來解決連線失敗。
- 若目前網路無法連線至遠端 DoH,請先確認代理出口,再調整 DNS;只更換
domains無法修復出口故障。
五、在 v2rayN 與 Android 客戶端驗證
v2rayN 的一般節點設定通常由客戶端產生。直接修改執行目錄中的暫存設定,切換節點或重新啟動後可能會被覆蓋。請使用目前版本提供的 DNS 設定或自訂設定入口,儲存後檢查實際產生的設定。v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心;客戶端本身的遠端 DNS、VPN 與路由選項,不一定能直接對應原生 JSON 欄位。
- 記錄基準狀態:儲存原始設定,記下目前使用的節點、本機監聽連接埠、系統 DNS 與瀏覽器安全 DNS 狀態。每次只變更一項解析設定。
- 確認入口:以下指令假設本機有
127.0.0.1:10808SOCKS 入口。若客戶端顯示不同連接埠,請先修改指令;不要將測試連接埠視為所有版本的預設值。 - 比較解析路徑:分別測試由應用程式在本機解析,以及將網域交由代理處理的請求。若結果不同,表示需要進一步確認解析發生的位置。
- 檢查記錄:暫時將
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 連線從哪個出口送出,以及解析失敗時會改用哪個解析器。若要對照頂層設定的關係,可參閱設定欄位;若對代理、核心與路由概念仍有疑問,可先閱讀名詞解釋。