先釐清 DNS 解析與流量路由
V2Ray 設定中的 DNS 與路由是兩個連續但不同的環節。DNS 負責將網域解析為位址,路由則決定連線交給哪個出站。解析結果正確,不代表流量一定會經過代理;流量符合代理規則,也不代表先前的網域解析一定經由遠端伺服器。排查分流問題時,需要分開觀察這兩個步驟。
當應用程式將網域目標提交給 V2Ray 時,路由模組可以直接依據網域規則判斷出站。如果規則還需要判斷目標位址,或建立出站連線前必須取得位址,內建 DNS 模組才會參與解析。設定中的 routing.domainStrategy 會影響這個流程。常見值包括 AsIs、IPIfNonMatch 與 IPOnDemand,不同核心版本的支援範圍與實際行為應以目前版本文件為準。
AsIs:優先保留網域,不為了比對 IP 路由規則而主動解析。IPIfNonMatch:網域規則未命中時,再解析位址並繼續檢查 IP 規則。IPOnDemand:路由判斷需要位址時較早觸發解析,設定不當可能增加查詢量。
對大多數「中國大陸直連、其他流量走代理」的設定而言,IPIfNonMatch 是較容易理解的起點。先讓 geosite 網域規則生效,未命中的目標再透過 DNS 取得位址,最後交由 geoip 規則判斷。如此既能保留網域分流能力,也能處理只適合依位址判斷的連線。
dns 設定中的核心欄位
dns.servers 是整個設定的入口。陣列中的項目可以是伺服器位址,也可以是帶有比對條件的物件。物件形式可設定 address、port、domains 與 expectIPs。實際支援的欄位會隨 V2Ray、Xray 及用戶端內建核心版本而變動,遷移設定時不要只看用戶端的介面版本。
| 欄位 | 作用 | 設定重點 |
|---|---|---|
servers |
定義可使用的 DNS 伺服器及比對條件 | 含有 domains 的伺服器會優先處理對應網域,其餘網域則由預設伺服器處理 |
hosts |
為指定網域提供靜態對應或網域映射 | 適合固定入口與啟動解析,不適合維護大量動態位址 |
queryStrategy |
控制查詢 IPv4、IPv6 或兩類位址 | 應與本地網路及出站的可連線能力一致 |
clientIp |
向支援相關機制的解析服務提供用戶端網段資訊 | 涉及位置判斷與隱私,不了解用途時不應任意填寫 |
disableCache |
控制內建 DNS 快取 | 長期關閉會增加重複查詢,通常只用於短時間診斷 |
hosts 的處理會在向外部 DNS 查詢之前進行。它適合解決少量固定網域的啟動依賴,例如遠端解析服務使用網域位址,而該網域本身又需要先解析。此時可使用已確認的固定位址建立初始映射,避免「必須先連線至遠端 DNS,才能解析遠端 DNS 網域」的循環。
queryStrategy 需要依網路條件設定。如果所在網路只有穩定的 IPv4 連線能力,可以從 UseIPv4 開始,減少取得無法連線的 IPv6 位址後所造成的等待。網路具備完整雙堆疊能力時,則可選擇同時查詢。這裡處理的是位址族選擇,不是代理分流;即使只查詢 IPv4,網域仍可依中國大陸與海外規則選擇不同的解析伺服器。
中國大陸網域使用本地解析,其他網域使用遠端解析
以下是一段可合併至主設定的 DNS 範例。中國大陸網域透過 geosite:cn 選擇本地解析伺服器,並使用 geoip:cn 檢查回應範圍。其他網域未命中這項專用規則時,則交給後方的遠端 HTTPS DNS。範例中的位址僅用於說明結構,部署時仍須確認目前網路、核心版本與遠端出站都能存取對應服務。
{
"dns": {
"queryStrategy": "UseIPv4",
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
]
},
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
},
"https://1.1.1.1/dns-query"
]
}
}
最後一個不含 domains 的項目就是預設解析伺服器,負責處理未被前方規則明確涵蓋的網域。保留預設項非常重要,因為網站分類資料不可能涵蓋所有網域;新註冊網域、私有業務網域,以及分類尚未更新的網域,都需要有明確的處理去向。
範例將同一個遠端解析位址分別寫成「非中國大陸網域專用伺服器」與「預設伺服器」,目的是清楚展示比對邏輯。實際設定可依目前核心的 DNS 選擇機制精簡。如果版本對相同位址重複項目的處理不符合預期,也可以只保留預設遠端伺服器:中國大陸網域命中第一項,其他網域自然落到預設項。
geosite:cn 是網域分類,不代表解析結果一定會落在中國大陸位址。部分中國大陸網站會使用全球 CDN,解析結果可能隨網路位置改變。相反地,一些未歸入中國大陸分類的網域也可能回傳中國大陸節點。因此,網域分類與位址歸屬需要搭配使用,但不能把任何一項視為絕對結論。
如何使用 expectIPs 識別異常回應
expectIPs 用於描述某個 DNS 伺服器回傳結果的預期位址範圍。將中國大陸網域交給本地解析時,可以設定 geoip:cn。如果回應位址不符合預期,核心可將結果視為不符合條件,並依 DNS 伺服器選擇邏輯嘗試其他候選項。這是降低錯誤解析影響的一項檢查,不是單獨完成所有防護的開關。
它最適合規則邊界清楚的情境。例如,只負責中國大陸分類網域的本地伺服器,預期結果大多位於中國大陸位址範圍。若回傳明顯不相符的位址,改用遠端伺服器查詢通常更合理。不過 CDN、跨境業務與 Anycast 會讓位址歸屬變得複雜,條件設定過於嚴格可能將正常結果誤判為異常。
不建議為所有遠端網域統一加入 geoip:!cn。許多國際服務會依存取位置回傳鄰近節點,其中可能包含中國大陸位址;有些網域還會同時回傳多個區域的位址。強制要求每個結果都屬於非中國大陸範圍,可能造成重複查詢、解析失敗或連線延遲。
設定 expectIPs 時可以遵循三個步驟:
- 先只設定
domains分組,確認每類網域確實進入目標伺服器。 - 再為邊界穩定的伺服器加入
expectIPs,觀察常用網站是否出現誤判。 - 最後檢查回退行為,確認異常結果會轉向合適的候選伺服器,而不是直接終止解析。
如果加入 expectIPs 後出現間歇性失敗,應先查看失敗網域實際回傳的位址,再決定擴大預期範圍、移除該網域分類,或取消這台伺服器的位址限制。不要透過反覆調整伺服器順序來掩蓋分類錯誤。
讓遠端 DNS 查詢經由代理出站
將遠端 DNS 寫入 dns.servers,只代表指定使用哪個解析服務,並不會自動確保連線路徑。遠端 DNS 的網路請求仍須經過路由與出站。如果直接連線,查詢可能受到本地網路路徑影響;若計畫透過代理存取,就必須為解析服務的目標位址設定明確規則。
以下路由片段會將遠端解析位址交給標籤為 proxy 的出站,同時讓中國大陸網域與中國大陸位址走 direct。最後一條規則接手其餘 TCP 與 UDP 流量。規則會依序比對,遠端 DNS 位址應放在較寬泛的直連位址規則之前。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"1.1.1.1"
],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:private",
"geoip:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
這只是路由片段,主設定中還必須存在標籤完全一致的 proxy 與 direct 出站。標籤有區分大小寫,路由引用不存在的標籤會導致設定載入失敗,或無法依預期建立連線。
如果遠端 DNS 使用網域形式的服務入口,還要額外考慮啟動解析。核心必須先知道服務入口的位址,才能建立 HTTPS 連線。可採用的方式包括使用位址形式的入口、透過 hosts 提供已確認的啟動映射,或讓系統 DNS 只負責這個階段。不要讓遠端 DNS 網域只能由它自己解析。
代理伺服器位址也有相同的啟動依賴。訂閱節點如果使用網域,V2Ray 在代理通道尚未建立時,必須先取得節點位址。這類網域應使用可靠的啟動解析路徑,不能強制要求透過尚未可用的代理出站查詢。
DNS 防污染的關鍵設定
防污染不只是把本地 DNS 換成另一個位址。完整鏈路至少包含查詢選擇、傳輸路徑、回應檢查、快取與業務連線五個部分。任何一部分仍走錯誤路徑,都可能出現「第一次能開、重新整理失敗」、「解析正確但連線直連」或「切換節點後仍使用舊位址」等現象。
依網域分類選擇查詢伺服器
中國大陸網域優先使用本地解析,通常能取得更貼近目前網路的 CDN 位址;其他網域使用遠端解析,減少本地遞迴鏈路對結果的干擾。分類規則必須設定預設出口,避免未分類網域沒有可用伺服器。
讓遠端查詢經由可控出站
即使目標伺服器不同,普通 UDP 查詢仍可能受到中間網路路徑影響。HTTPS DNS 提供加密傳輸,但仍須確認它經由預期出站。只修改伺服器位址而不檢查路由,不足以確認最終路徑。
調整快取用於診斷,而非長期規避
V2Ray 內建 DNS、作業系統與應用程式都可能保存解析結果。修改設定後立即測試時,舊結果可能仍會生效。可以重新載入核心、清除系統 DNS 快取並重新啟動相關應用程式。暫時啟用停用快取的選項有助於確認問題,但長期關閉快取會增加查詢次數與首次連線等待時間。
瀏覽器與應用程式的獨立解析
部分應用程式會使用自己的加密 DNS 設定,不一定會將網域查詢交給系統或 V2Ray。此時 V2Ray 可能只能看到後續連線位址,網域路由能力也會受到影響。測試時應先確認應用程式的解析方式,再判斷內建 DNS 是否確實參與。
v2rayN 中的應用與驗證順序
v2rayN 的訂閱負責提供伺服器設定,DNS 與路由通常屬於用戶端端的執行參數。更新訂閱不會自動確保自訂 DNS 規則維持原狀,具體情況取決於使用的設定模式、路由設定與用戶端版本。修改前應先儲存目前可用的設定,修改後重新載入核心,而不是只切換系統代理開關。
驗證時不要一次測試大量網站。先選一個明確屬於中國大陸分類的網域,再選一個應使用遠端解析的網域,分別觀察 DNS 記錄與路由記錄。檢查內容包括:命中的 DNS 伺服器、解析取得的位址、命中的出站標籤,以及最終連線是否成功。
- 確認設定可以正常載入,記錄中沒有未知欄位、缺少標籤或 JSON 格式錯誤。
- 查詢中國大陸網域,確認命中帶有
geosite:cn的本地伺服器物件。 - 查詢其他網域,確認進入遠端預設伺服器,並檢查遠端解析連線是否經由代理出站。
- 核對業務連線的路由結果,避免 DNS 經由代理,但業務流量在後續規則中被改為直連。
- 切換一次測試網域或清除快取,排除舊結果的影響。
如果使用 v2rayNG 或 v2flyNG,判斷方式相同,但設定欄位是否可用取決於應用程式內建的 Xray 或 v2fly 核心版本。桌面版設定未核對版本前,不要直接複製到 Android 端。遇到無法識別的欄位時,應先檢查核心類型與版本,再依對應設定格式調整。
常見故障與定位方法
中國大陸網站開啟速度變慢
先確認中國大陸網域是否落入遠端預設伺服器。如果 geosite 資料未載入、分類檔案版本不相容,或網域本身未被收錄,就會進入預設項目。也要檢查 expectIPs 是否過於嚴格,導致本地伺服器回傳的正常 CDN 位址遭拒,進而觸發遠端查詢。
遠端 DNS 設定完成後仍然解析異常
重點確認遠端請求使用的出站。目標位址可能被 geoip 規則提前比對為直連,也可能因規則順序錯誤而未進入 proxy。HTTPS DNS 連線失敗還可能是系統時間異常、網路無法連至目標位址,或代理節點尚未建立。
設定啟動時出現循環解析
通常是代理節點網域或遠端 DNS 網域只能透過代理解析,而代理本身又依賴這個解析結果。解決方向是建立獨立的啟動解析路徑。節點網域、本地解析伺服器與遠端解析入口三者的依賴關係,應能從直連階段開始逐步建立。
位址正確但網站仍使用錯誤出站
DNS 與業務路由需要分開核對。網域可能已正確解析,但後續 geoip:cn 規則將回傳位址送往直連;也可能是更前面的網域規則已指定其他出站。請依路由規則由上至下檢查第一個命中項,不要只查看最後的兜底規則。
修改後短時間內結果反覆變動
這通常與多層快取、CDN 多位址回應或應用程式自帶解析有關。關閉並重新啟動相關應用程式,重新載入 V2Ray 核心,再使用單一測試網域重複驗證。如果記錄中能看到新的查詢請求,但每次位址不同,可能代表解析服務正在正常進行負載調度,不應只憑位址變化判斷污染。
設定完成檢查
完成 DNS 分流後,先確認中國大陸網域、本地網路位址與遠端網域都有明確的處理路徑。接著確認遠端 DNS 的連線出站、代理節點的啟動解析、預設伺服器與最終兜底路由都存在。最後使用記錄進行驗證,不要只根據網頁能否開啟來判斷。
一套容易維護的設定通常保持簡潔:少量 DNS 伺服器、清楚的網域分組、有限的 expectIPs 條件,以及順序明確的路由規則。分類越細,維護成本越高;條件越嚴格,CDN 與動態位址造成的誤判越多。先建立可運作的兩組解析,再依實際記錄增加例外,比一次加入大量規則更穩定。
需要繼續核對完整 JSON 結構時,可以搭配本站的 JSON 手冊檢查 dns、routing 與 outbounds 的層級關係。用戶端設定成功載入後,再逐項測試訂閱節點、系統代理與路由分流,避免將所有連線問題都歸咎於 DNS。