本文適合已能連上節點,並準備調整 DNS 分流的使用者。先釐清應用程式解析、核心解析與出站路由的差異,再設定中國大陸 DNS 與經代理連線的遠端 DoH,最後透過日誌和對照測試確認結果。範例是需合併至現有設定的片段,並非可直接取代訂閱節點的完整設定。
1. DNS 分流與代理分流是兩種不同設定
DNS 分流決定「由哪個伺服器將網域名稱解析為 IP」,路由分流則決定「連線從哪個出口送出」。將海外網域指定給遠端解析器,不代表連往解析器的請求已經經過代理;反過來說,網頁連線走代理,也不表示瀏覽器先前沒有透過系統 DNS 查詢網域。兩條路徑都要確認。
這個流程描述的是應用程式將網域名稱交給核心,且路由策略需要解析的情況。如果網域規則已直接選定代理出站,路由階段可能完全不會查詢 DNS;目標網域也可能交由代理伺服器端解析。如果應用程式只提交 IP,核心通常無法可靠還原最初查詢的網域名稱。
- DNS 解析遭污染:取得錯誤或遭到干預的解析結果。IP 位址改變本身並非遭污染的證據;CDN 原本就可能依地區回傳不同位址。
- DNS 洩漏:查詢使用了預期以外的解析路徑。依計畫透過中國大陸 DNS 直連解析大陸網域,不應一概視為洩漏。
- 解析繞路:中國大陸服務透過遠端解析器取得距離較遠的 CDN 位址,可能造成圖片載入緩慢或影片緩衝,不一定會完全無法連線。
2. 先分清三種設定位置中的 domainStrategy
搜尋 V2Ray DNS 設定時,常會看到同名欄位。欄位所在位置不同,作用也不一樣。請勿混淆路由中的 domainStrategy、直連出站中的同名欄位,以及 DNS 的 queryStrategy。
| 設定位置 | 常見值 | 實際作用 |
|---|---|---|
routing.domainStrategy | AsIs | 依現有目標資訊比對,不主動為路由解析網域名稱;目標若已是 IP,仍可比對 IP 規則。 |
routing.domainStrategy | IPIfNonMatch | 網域階段未比對到規則時,再進行解析並嘗試比對 IP 規則。 |
routing.domainStrategy | IPOnDemand | 比對過程遇到需要 IP 的規則時才觸發解析,因此較受規則順序影響。 |
freedom.settings.domainStrategy | AsIs、UseIP | 決定直連出站如何處理目標網域;使用 UseIP 時可呼叫內建 DNS。 |
dns.queryStrategy | UseIP、UseIPv4、UseIPv6 | 控制內建 DNS 查詢使用的 IP 位址類型,不負責選擇代理出口。 |
初次調整可先使用 IPIfNonMatch,優先依明確的網域規則決定出口,未命中時再以 IP 地理規則補足。這不是「所有網域都先解析一次」的開關,也不會接管系統中每個應用程式的 DNS。
3. 依網域選擇中國大陸 DNS 與遠端 DoH
dns.servers 中的伺服器物件可透過 domains 指定優先處理的網域清單。這裡的網域比對只用來選擇解析伺服器,不會一併建立網站連線的路由規則。本文以中國大陸 UDP DNS 與遠端 DoH 兩條路徑為例,說明各自的選擇條件與傳輸方式。
中國大陸網域解析
- 解析伺服器位址
223.5.5.5- 傳輸連接埠
- UDP 53
- 比對範圍
geosite:cn- 備援查詢
skipFallback: true
將此伺服器排除於一般備援選擇之外,降低未分類網域被送往中國大陸解析器的機率。
遠端加密解析
- 解析伺服器位址
https://1.1.1.1/dns-query- 傳輸連接埠
- TCP 443
- 優先處理範圍
geosite:geolocation-!cn- 預期出站
proxy
一般 HTTPS DNS 請求可交由核心路由;仍須明確指定代理出站連往解析器 IP。
geosite:cn 與 geosite:geolocation-!cn 是規則資料中的分類標籤,並非嚴格互補的完整集合。部分新網域可能未列入其中,因此上述遠端解析器也負責處理未命中的備援查詢。兩者若有重疊或資料缺漏,應配合目前使用的資料檔與日誌判斷,不能只依網域後綴推定比對結果。
skipFallback: true不代表「永遠不會查詢這台伺服器」;明確比對到的網域仍可使用它。此設定主要影響備援候選伺服器的選擇。- 使用
https://與https+local://的請求路徑不同。後者使用本機模式,不能直接套用本文對核心路由的假設。 - 使用網域名稱格式的 DoH 位址時,還必須先解析解析器本身的網域名稱。本文使用 IP 位址字面值,以減少這項依賴。
- DoH 會加密傳送至解析服務的查詢,但無法保證解析服務始終回傳合適的結果,也不能取代路由檢查。
4. 合併 DNS 與路由設定,先固定解析器的出站路徑
以下是核心 JSON 設定的合併範例,假設現有設定已有名為 proxy 的代理出站與名為 direct 的直連出站。若實際標籤不同,必須逐一替換;並保留原有的 inbounds、節點驗證、傳輸與 TLS 設定。請勿將此片段直接當成完整設定啟動。
{
"dns": {
"queryStrategy": "UseIP",
"servers": [
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"skipFallback": true
},
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
}
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["1.1.1.1"],
"port": "443",
"network": "tcp",
"outboundTag": "proxy"
},
{
"type": "field",
"ip": ["223.5.5.5"],
"port": "53",
"network": "udp",
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:geolocation-!cn"],
"outboundTag": "proxy"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
}
]
}
}
路由規則由上而下比對,第一條命中的規則生效。將解析器專用規則排在一般地理規則之前,可讓 DNS 傳輸路徑更容易預測。這些規則依目的 IP 與連接埠比對,因此其他連往相同位址及連接埠的連線也會套用這些規則。
- 確認預設出站:未命中任何規則的流量通常會使用
outbounds中的第一個出站。若希望未分類流量預設走代理,請確認第一個出站確實是預期的代理,而不只是修改規則。 - 確認規則資料:啟動時若提示找不到
geosite分類或資料檔,請修正規則資料來源與路徑。不要刪除報錯規則後繼續執行,並以此證明設定有效。 - 確認直連解析:若希望直連出站也使用內建 DNS,可在既有
freedom出站的settings中設定"domainStrategy": "UseIP",並確認目前使用的核心支援此設定。 - 確認節點引導解析:若代理伺服器位址本身是網域名稱,請勿讓它唯一的解析路徑依賴尚未建立的代理連線。應為該網域安排可用的引導解析方式,避免啟動時形成循環依賴。
5. 在用戶端套用設定,避免介面設定覆蓋 JSON
v2rayN 會依介面中的節點、DNS 與路由設定產生執行設定。直接修改暫存產生的檔案,可能在切換節點或重新啟動後被覆蓋。建議使用目前版本提供的 DNS 設定、路由設定或自訂設定入口;不同版本的選單名稱可能不同,別將某一版的選單路徑視為所有版本通用。
- 保留還原點:記錄目前的節點、系統代理模式與路由模式,匯出設定或備份相關選項。每次只修改 DNS 與必要的路由,不要同時更換通訊協定或傳輸參數。
- 檢查生效中的設定:儲存設定並重新啟動核心後,查看用戶端提供的執行設定或設定預覽,確認
dns.servers、規則順序與出站標籤確實存在。 - 確認應用程式連線入口:桌面應用程式必須遵循系統代理,或明確連線至本機 HTTP/SOCKS 入口。若要測試 SOCKS,請使用用戶端顯示的實際連接埠;教學中的連接埠不一定是本機預設值。
- 確認 Android 接管範圍:使用 v2rayNG 或 v2flyNG 時,也應檢查 VPN 模式、應用程式分流設定與 DNS 選項。遭排除的應用程式可能仍會使用原本的網路路徑。
- 排除其他解析設定的影響:測試期間記錄瀏覽器「安全 DNS」與 Android「私人 DNS」原本的狀態;視需要暫時關閉並進行對照測試,完成後再恢復預期設定。
瀏覽器內建的加密 DNS 可能繞過核心的網域分類邏輯,但 DNS 連線本身仍可能經過代理。應分別確認「使用哪個解析器」與「連線走哪個出口」,不能看到 DoH 就認定 DNS 分流已正確設定。
6. 透過連接埠、日誌與對照測試驗證分流
以下數字代表通訊協定連接埠與測試次數,並非效能實測結果。驗證時至少選擇一個確定符合中國大陸規則的網域,以及一個確定符合遠端規則的網域;請依實際使用的資料集確認分類,避免以未收錄的網域推斷規則失效。
| 驗證項目 | 操作方式 | 結果說明 |
|---|---|---|
| 核心是否接受設定 | 重新啟動核心,檢查啟動日誌是否有 JSON、欄位或規則資料錯誤。 | 成功啟動只代表語法正確且資料載入完成,不表示解析流量走的是預期出口。 |
| 是否有進行 DNS 查詢 | 暫時提高日誌層級,清除相關快取後存取測試網域,查看 DNS 查詢與回應紀錄。 | 若命中快取,或網域直接交由代理伺服器端解析,本機可能不會出現新的查詢。 |
| 解析器的出站路徑 | 在日誌可提供資訊的範圍內,檢查連往 1.1.1.1:443 的連線與出站;必要時搭配本機封包擷取。 | 結果應符合預設的代理路徑;只看到回傳 IP,無法證明傳輸經過代理。 |
| 網站流量的出站 | 查看測試網域的連線命中了哪個出站標籤,並比較中國大陸與遠端兩組請求。 | DNS 路徑正確但網站流量走錯,仍須調整規則順序或應用程式接管範圍。 |
Windows 可執行 ipconfig /flushdns 清除系統 DNS 快取,但瀏覽器與核心仍可能保留各自的快取。直接執行 nslookup 通常測試的是系統或指定的 DNS 伺服器;啟用系統代理不會自動讓它改為測試核心 DNS。只有在明確設定本機 DNS 監聽,且查詢確實送至該監聽時,才能用它驗證相應路徑。
判斷順序:先確認解析路徑,再比較連線速度
先確認查詢由誰處理,以及解析器連線使用哪個出站,再記錄三輪連線是否成功與所需時間。若尚未確認解析路徑,單次頁面載入變快,或兩個解析器回傳不同 IP,都不足以證明防污染設定有效。
7. DNS 分流解析常見問題與排查順序
設定遠端 DoH 後,為什麼海外網站還是無法開啟?
先確認連往 1.1.1.1:443 的路由是否命中 proxy,再確認代理本身可正常使用。如果節點位址是網域名稱,請確認其引導解析不依賴同一條尚未建立的代理連線;最後再排查目標網站的連線。
中國大陸網站能開啟,但圖片突然變慢怎麼辦?
檢查圖片實際使用的 CDN 網域是否列入中國大陸規則。可先針對已確認的網域使用 full: 精確規則進行對照,分別檢查 DNS 選擇與網站流量路由。不要只因一個網域異常,就把所有查詢都改成直連。
只回傳 IPv4 就能解決所有載入逾時嗎?
不一定。可暫時將 dns.queryStrategy 改為 UseIPv4,排除 IPv6 路徑不可用的影響;若問題仍在,應還原原設定並繼續排查。應用程式快取、瀏覽器獨立解析及伺服器端解析,不一定受此欄位控制。
升級用戶端後,原本的 DNS 分流失效了?
先比對實際使用的核心、執行設定與規則資料,不要只看介面開關。確認 proxy、direct 標籤沒有變更,且 DNS 設定未被重新產生的設定覆蓋;修正後重新啟動核心,再以中國大陸與遠端兩組網域重新測試。
最後保留的設定應能說明三件事:哪些網域由中國大陸解析器處理、哪些查詢會經代理送往遠端解析器,以及未命中分類時如何進行備援。若要更嚴格地控制 DNS 路徑,還應另行規劃系統 DNS、瀏覽器解析與網路接管範圍,不能只靠一段 dns.servers 設定就涵蓋整台裝置。