先確認網域由哪個解析器處理,再為中國大陸網域設定專用解析器,其他網域則使用加密解析器,最後透過路由規則指定 DNS 請求的出口。本文適合已能連線至節點、準備修改核心設定的使用者;範例僅為設定片段,並非可直接匯入的完整節點檔案。
一、先確認 DNS 請求是否進入核心
先釐清兩件事:DNS 解析會將網域轉換為 IP 位址,路由分流則決定連線採直連或代理。只修改 dns 區段,不會自動讓所有應用程式的 DNS 請求進入 V2Ray;只新增代理規則,也無法確保應用程式先前取得的位址正確。
以上是應用程式將網域交給核心處理的典型流程。如果應用程式已在本機完成解析,只提交 IP 位址,核心收到的輸入就會不同。瀏覽器內建的安全 DNS、系統 DNS 與用戶端內建 DNS 可能同時運作,不能只憑一個 DNS 輸入欄位判斷實際解析流程。
- 系統代理情境:通常只涵蓋遵循代理設定的應用程式。HTTP 代理請求可以附帶目標網域,但其他程式仍可能直接使用系統解析器。
- SOCKS 情境:應用程式必須將網域交給 SOCKS 代理。如果應用程式先自行解析、再提交 IP,內建 DNS 的網域分流規則就不一定會生效。
- Android VPN 情境:v2rayNG 透過 Android VPN 介面接管流量,但 DNS 的實際處理方式仍會受到應用程式設定、個別應用程式規則及瀏覽器行為影響。
- 自訂設定情境:內建 DNS 可供核心內部解析使用。若要接收外部程式傳來的 DNS 封包,還需要設計相應的入站與 DNS 出站,不能只設定
dns.servers。
二、了解 servers、domains 與 expectIPs
先將網域分組,再為各組指定解析器。servers 是解析伺服器清單;清單項目可以是簡單位址,也可以是附帶比對條件的物件。若要分別解析不同網域,使用物件格式會更容易確認設定效果。
| 欄位 | 用途 | 設定要點 |
|---|---|---|
servers | 列出可用的解析器 | 不要以為清單永遠只會查詢第一個項目;比對條件與回退設定都會影響選擇結果。 |
domains | 指定優先使用此解析器的網域 | geosite:cn 須由核心讀取相應的網域資料檔案才能使用。 |
expectIPs | 檢查回傳位址是否符合預期範圍 | geoip:cn 是依位址歸屬地篩選,不代表內容安全,也不能證明網域真實性。 |
skipFallback | 控制此伺服器是否參與未符合網域的回退查詢 | 設為 true 後,符合其 domains 條件的查詢仍可使用此伺服器。 |
queryStrategy | 選擇查詢的位址類型 | UseIPv4 用於只查詢 IPv4;不代表停用整個系統的 IPv6。 |
tag | 為內建 DNS 查詢標記來源 | 查詢經過核心路由時,可透過路由規則的 inboundTag 進行比對。 |
geosite 是網域分類資料,geoip 是 IP 位址分類資料,兩者不可互換。domains 也支援 domain:example.com 這類可比對網域及其子網域的寫法。排查單一網站時,先新增一條明確的網域規則,比同時更換整套分類資料更容易找出問題。
判斷重點:將 expectIPs 視為篩選條件,而非防污染開關
只有在明確希望該網域回傳中國大陸位址時,才保留 geoip:cn 限制。如果網站使用海外 CDN,請先檢查遭拒絕的位址及其實際歸屬,再縮小規則範圍;不要一概將所有非中國大陸位址判定為遭污染。
三、設定中國大陸網域優先解析,其他網域使用加密解析
以下提供一段方便核對的基礎設定:中國大陸網域分類優先使用 223.5.5.5 查詢,其他網域則使用 https://1.1.1.1/dns-query。後者是 DoH,也就是透過 HTTPS 傳送 DNS 查詢。範例採用 IPv4,目的是先減少雙協定排錯變因,並不代表 IPv6 本身有問題。
{
"dns": {
"tag": "dns-query",
"queryStrategy": "UseIPv4",
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
],
"skipFallback": true
},
{
"address": "https://1.1.1.1/dns-query",
"skipFallback": false
}
]
}
}
此處設定 skipFallback: true,是為了避免中國大陸解析器參與未命中網域的一般回退查詢,並非「中國大陸解析失敗後絕不回退」。若中國大陸解析器未回傳符合 expectIPs 的結果,在未停用回退的情況下,仍可嘗試其他適用的伺服器。請勿將回退機制與強制隔離混為一談。
- 啟動設定前,先確認核心能讀取
geosite.dat與geoip.dat。若出現分類載入錯誤,請先修正資料檔路徑或用戶端資源,再檢查連線品質。 - 保留一般的
https://DoH 寫法,讓查詢能依照後續規則經過核心路由。有些核心提供的本機直連寫法會略過這條路徑,不能直接替換後仍假設出口不變。 - 遠端解析器使用 IP 格式的 HTTPS 位址,可減少解析器自身網域所需的引導解析;TLS 憑證仍須正常驗證,請勿關閉驗證來掩蓋連線錯誤。
- 這是內建 DNS 的伺服器選擇設定,不是作業系統的 DNS 設定。不能因此認定所有應用程式都已停止使用本機網路的解析器。
四、搭配路由規則,指定 DNS 請求的出口
先檢查現有的出站標籤。以下範例假設已有標籤為 direct 的直連出站,以及標籤為 proxy 的可用代理出站。這些只是範例名稱,不會由 DNS 設定自動建立。若現有標籤不同,請逐一改成實際名稱;VMess 或 VLESS 的節點參數維持原設定。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"inboundTag": ["dns-query"],
"ip": ["223.5.5.5"],
"port": "53",
"outboundTag": "direct"
},
{
"type": "field",
"inboundTag": ["dns-query"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"],
"outboundTag": "direct"
}
]
}
}
規則會依序比對。第一條只讓標記為 dns-query、目的地為 223.5.5.5:53 的請求直連;第二條則將其他帶有相同標籤的查詢交給代理。如果先設定範圍較廣的 DNS 代理規則,中國大陸解析請求也會先被比對到,導致「已設定中國大陸解析器,請求卻繞遠路」的情況。
- 將 DNS 專用規則放在涵蓋範圍較廣的規則之前。如果原設定已有全連接埠直連、全域代理或依入站統一分流的規則,請確認各規則的優先順序。
- 了解 IPIfNonMatch。網域未符合適用規則時,核心可以呼叫內建 DNS 取得位址,再嘗試比對 IP 規則。這不代表每個網域都必須先解析。
- 保留原有的預設出口設計。此片段沒有提供最後的全流量兜底規則;未命中的流量會受到完整設定中的預設出站影響,合併時務必檢查出站順序。
- 檢查代理伺服器的引導解析。若代理伺服器位址使用網域名稱,請勿讓其唯一的解析路徑又依賴尚未建立的代理連線。可為該伺服器網域另行安排可連通的引導解析路徑。
五、透過記錄與對照測試驗證分流結果
先確認「由誰解析、使用哪個出口」,再檢查網頁是否能開啟。單獨執行 nslookup 通常是在測試系統指定的解析器,不能直接證明 V2Ray 內建 DNS 已依規則運作。DNS 洩漏測試頁面顯示的通常也是遞迴解析服務的出口,而非本機的代理出口。
- 暫時提高記錄層級。在現有的
log物件中,將loglevel改為debug,再重新啟動核心。測試完成後請恢復為warning,避免長時間記錄大量網域與連線細節。 - 重新啟動並測試連線流程。重新啟動核心可排除本次測試受到的核心快取干擾;關閉後重新開啟測試應用程式,必要時清除應用程式自己的 DNS 快取。只重新整理網頁不一定會觸發新的查詢。
- 測試一個明確符合中國大陸規則的網域。確認記錄中出現相應的 DNS 查詢,並檢查前往
223.5.5.5:53的請求是否經由direct出站。已快取或直接符合網域路由規則的請求,不一定會產生新的核心解析記錄。 - 測試一個未列入中國大陸網域組的網域。確認是否使用 DoH 解析器,以及相關連線是否經由
proxy出站。不同核心的記錄格式不盡相同,可交叉比對伺服器位址、目標網域與出站標籤。 - 分別測試應用程式路徑與本機解析路徑。桌面版可使用下方兩條命令進行對照;請先將連接埠改為用戶端顯示的實際 SOCKS 監聽連接埠。
curl --socks5-hostname 127.0.0.1:10808 -I https://example.com
curl --socks5 127.0.0.1:10808 -I https://example.com
第一條命令會讓 SOCKS 代理處理目標網域,第二條則由 curl 在本機解析後提交位址。10808 只是命令範例,不保證與你的監聽連接埠相同。兩條命令都成功,也不代表核心一定執行了解析:代理出站可能會將網域繼續交給遠端伺服器處理,最後仍須搭配記錄確認。
排查重點:先找出請求在哪個步驟停住
如果記錄中沒有查詢,先檢查快取及應用程式是否提交網域;已有查詢但逾時,檢查解析器的出口;已取得位址卻連線失敗,再檢查路由、節點與目標服務。依這三個階段逐步排查,比反覆更換 DNS 位址有效。
六、DNS 分流常見問題與復原方式
修改 DNS 後所有網站都無法開啟,該先檢查哪裡?
先還原備份,確認節點仍可正常使用,再檢查核心啟動記錄。優先處理 JSON 語法錯誤、分類資料載入失敗及不存在的出站標籤。核心能正常啟動後,再確認 DoH 是否依賴同一個尚未完成引導解析的代理伺服器網域。
中國大陸網站偶爾無法連線,是 expectIPs 設錯了嗎?
先確認回傳位址是否遭 geoip:cn 排除。針對單一網域,可暫時移除此限制或建立範圍更小的專用規則,重新啟動後再測試。如果網站確實使用境外 CDN,應調整該網站的解析策略,而不是直接認定解析器受到污染。
使用 DoH 後,為什麼測試頁面仍顯示本地電信業者?
檢查瀏覽器「設定」中的安全 DNS、系統 DNS,以及應用程式是否繞過代理。接著確認核心記錄是否真的收到該網域的查詢。DoH 只會加密通往指定解析器的那條查詢路徑,不會統一接管所有應用程式的 DNS。
更新訂閱後,DNS 設定為什麼又變了?
先區分訂閱節點資料與用戶端產生的核心設定。不要修改每次啟動都會重新產生的暫存 JSON;請透過用戶端的持久化 DNS 設定或自訂設定入口儲存。更新後重新檢視實際生效的設定,確認 dns 與規則順序。
只查詢 IPv4 會讓部分應用程式異常嗎?
可能影響依賴 IPv6 的目標。先使用 UseIPv4 完成基本驗證,再於支援雙協定的環境改用 UseIP,同時檢查 IPv6 路由與出口。請勿只恢復 AAAA 查詢,卻忽略相應的連線路徑。
最後保留一份能啟動、能解析、能連線的設定副本。每次只調整一個變數,例如先更換解析器,再調整網域分組,最後才修改回退與位址篩選。需要查閱更多欄位時,可開啟本站的設定欄位說明,並依實際核心版本逐項確認。