適合已能透過 v2rayN 連上節點,並準備檢查 DNS 分流的使用者。以下以 V2Ray 核心 JSON 為例,說明應用程式解析、內建 DNS 與代理出站的差異,提供中國大陸網域優先使用本地 DNS、其他網域改用 DoH 的設定片段,並說明如何檢查回退、路由與解析結果。這些程式碼不是完整的用戶端設定,也不能直接套用到其他核心的 DNS 編輯器。
一、先確認由哪個環節處理 DNS 請求
DNS 設定沒有生效,常見原因不是伺服器位址錯誤,而是查詢根本沒有送到預期的解析器。Windows 系統解析器、瀏覽器的安全 DNS、V2Ray 內建 DNS,以及代理伺服器所在主機的解析器,分屬不同環節。修改其中一處,不代表其他環節也會跟著改變。
上述流程是常見情況之一,並不表示每個連線都會使用內建 DNS。例如,瀏覽器透過 HTTP 代理提交網域時,代理出站可能會將網域交由遠端處理;如果應用程式先在本機解析,再把 IP 傳給代理,核心收到的可能就只有 IP。只啟用「系統代理 → 自動設定系統代理」,不會接管 Windows 的所有 DNS 請求。
- 系統代理:主要影響遵循系統代理設定的應用程式,不是全域 DNS 轉送開關。
- TUN 模式:可擴大流量接管範圍,但是否接管 DNS,仍取決於實際使用的核心、TUN 設定與路由。
- 內建 DNS:為核心需要解析網域的情境提供解析結果;即使設定了
dns,也不會自動成為系統的 53 埠服務。 - 瀏覽器安全 DNS:瀏覽器可能自行連線至 DoH 服務,建議先確認要由瀏覽器自行管理解析,還是交由用戶端統一處理。
二、servers、domains、expectIPs 各自控制什麼
servers 用來設定可用的上游解析器;伺服器物件中的 domains 會讓指定網域優先透過該伺服器查詢;expectIPs 則限制該伺服器回傳的位址範圍。三者分別回答「查詢哪個伺服器」、「哪些網域優先查詢」和「哪些結果可接受」,不要把它們都當成流量路由規則。
| 欄位 | 範例 | 實際用途與限制 |
|---|---|---|
servers | 223.5.5.5、DoH URL | 設定 DNS 上游,不會決定網頁連線必定使用哪個出口。 |
domains | geosite:cn | 符合條件時優先使用此伺服器;需要相應的網域規則資料。 |
expectIPs | geoip:cn | 檢查回傳位址是否符合預期;這不代表伺服器可信,也不等於能攔截所有污染。 |
skipFallback | true | 網域規則未命中時,此伺服器不會作為通用回退解析器;但仍可處理符合自身規則的網域。 |
queryStrategy | UseIPv4 | 限制內建 DNS 使用的位址族策略,不會停用作業系統的 IPv6。 |
domains 不是排他的存取控制。若伺服器查詢失敗,或結果不符合 expectIPs,後續仍可能進入回退流程。若要讓中國大陸解析器只處理指定網域,請為它設定 skipFallback: true,並保留一個不限制網域的遠端解析器作為預設選項。
結論:先限定本地解析器適用的網域
將中國大陸解析器設為含有 domains 和 skipFallback 的伺服器物件,比單純把它排在清單第一位更清楚;否則在回退流程中,它可能收到原本預計交給遠端解析器的查詢。
三、DNS 分流範例:中國大陸網域優先本地解析,其他網域使用 DoH
以下使用 223.5.5.5 作為中國大陸網域的優先解析器,並以 https://1.1.1.1/dns-query 作為預設 DoH 上游。這裡的「本地解析」是指從本機直接連線至指定解析服務,不代表使用路由器或電信業者自動提供的 DNS。這些位址僅供設定示範,是否能連線及回傳結果是否合適,請在自己的網路環境中測試。
{
"dns": {
"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"
}
]
}
}
中國大陸網域優先解析
- 上游位址
- 223.5.5.5
- 傳輸埠
- UDP 53
- 網域範圍
- geosite:cn
- 預期結果
- geoip:cn
將 skipFallback 設為 true,避免此伺服器成為其他網域的通用回退選項。
預設 DoH 解析
- 上游位址
- https://1.1.1.1/dns-query
- 傳輸埠
- HTTPS 443
- 網域範圍
- 未限制,作為預設選項
- 出站需求
- 在路由中明確指定代理出口
設定 DoH URL 後,還要確認連線至該位址的請求實際使用哪個出站。
符合 geosite:cn 時,優先查詢中國大陸解析器;未符合時,則使用未限制網域的 DoH 選項。若中國大陸解析結果不符合位址預期,也可能改用後續選項。不要隨意再加一個未限制網域的 localhost,否則系統解析器會重新進入回退流程,破壞原本設定的界線。
expectIPs: ["geoip:cn"] 是較嚴格的策略。部分中國大陸網站使用境外 CDN,合法的解析結果也可能被拒絕,增加查詢時間。遇到這類網站時,先確認網域與回傳 IP,再調整網域分類或該伺服器的預期範圍,不要直接認定「境外 IP 就是污染」。
四、讓 DoH 走代理:還需要設定路由規則
DoH 加密的是連線至解析伺服器的傳輸過程,不保證請求會自動經過代理。在 V2Ray 中,一般的 https:// DoH 請求可以交由路由調度;使用 https+local:// 的本機模式則不會以相同方式交由路由處理。若希望遠端 DoH 使用節點出口,不要混用這兩種寫法。
以下內容仍是需要合併至現有設定的片段。前提是 outbounds 中已有標籤為 direct 的直連出站,以及標籤為 proxy 的可用代理出站。若實際標籤不同,必須改成正確的標籤。請將這兩條上游位址規則排在可能先行命中的寬泛規則之前。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": [
"223.5.5.5/32"
],
"port": "53",
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"1.1.1.1/32"
],
"port": "443",
"outboundTag": "proxy"
}
]
}
}
- 請勿混淆兩種策略名稱:
dns.queryStrategy控制解析時使用的位址族;routing.domainStrategy控制路由比對時如何處理網域,兩者用途不同。 - AsIs 不會主動為 IP 規則解析網域:如果一般網頁連線只帶有網域名稱,就不能期待只靠
geoip:cn自動完成所有網站的分流。網站網域的分流規則仍須另外設定。 - 規則限定了位址與連接埠:範例不會將所有 443 流量都交給同一個出口,只處理連往指定解析服務的連線。
- 使用 IP 格式的 DoH 位址:可減少解析上游主機名稱的前置步驟,但服務仍須提供與該位址相符的有效 TLS 憑證,不能任意將任何 DoH 網域替換成 IP。
預設情況下,未符合任何規則的連線會使用預設出站,通常與出站排列順序有關。不要略過 DoH 出站檢查,就把「能取得結果」當成「已透過代理解析」。此外,若節點伺服器使用網域名稱,也需要獨立且可用的初始解析路徑,避免出現必須先連上節點才能解析節點位址的循環依賴。
五、在 v2rayN 套用設定前,先保留可復原的基準
v2rayN 是設定管理用戶端,不是 DNS 協定本身。用戶端介面儲存的選項最終會轉換成核心執行設定。直接修改暫存產生的檔案,切換節點或重新啟動核心後可能會被覆寫;將 V2Ray JSON 填入不相符的核心設定區,也可能導致啟動失敗。
- 記錄目前狀態。保存現有 DNS 設定、目前使用的節點與路由模式。先確認原設定能正常開啟常用網頁,再調整解析策略。
- 確認設定入口。在「設定 → DNS 設定」選擇目前核心對應的設定區域。如果此版本提供完整的 DNS JSON 編輯區,只填入該區要求的 DNS 物件層級,不要把整份範例檔案貼進去。
- 另外管理完整設定。若要自行維護路由與出站,可使用「伺服器 → 新增自訂設定伺服器」匯入完整的核心設定。本文的兩個片段缺少入站、代理出站等內容,不能直接當成完整設定執行。
- 重新啟動核心並檢查記錄。先檢查 JSON 語法、規則資源與出站標籤是否有誤,再進行網路測試。儲存成功不代表執行成功。
- 逐步加入功能。先確認預設 DoH 可正常運作,再加入中國大陸網域優先解析,最後檢查 TUN 或瀏覽器自身的解析設定。每次只調整一個部分,較容易找出問題。
本機混合監聽連接埠不是 DNS 連接埠。將應用程式的 HTTP 或 SOCKS 代理指向該連接埠,與把 DNS 伺服器設為該連接埠,是完全不同的操作。請在「設定 → 參數設定」確認「本機混合監聽連接埠」,不要互換範例中的 53、443 和 10808。
六、驗證 DNS 分流與防污染:分別檢查查詢、出站與結果
驗證的目的不是找出一個「永遠正確」的解析 IP,而是確認請求交由預期的上游處理、連線使用預期的出口,且回傳位址符合網站實際部署情況。CDN 會依解析器位置、節點出口與時間回傳不同位址;兩個解析器的結果不同,本身不能證明發生污染。
| 檢查項目 | 操作方式 | 不能據此推論的事項 |
|---|---|---|
| 系統解析基準 | 執行 nslookup www.baidu.com 223.5.5.5,記錄回覆與錯誤訊息。 | 無法證明 V2Ray 內建 DNS 已呼叫此上游。 |
| 代理連線能力 | 透過明確指定的代理連線至 HTTPS 網站,確認節點可正常連線。 | 網頁能開啟,不代表所有應用程式的 DNS 都已被接管。 |
| 上游出站 | 查看核心除錯記錄與路由記錄,確認連往 1.1.1.1:443 的連線使用哪個出口。 | 只看到加密連線,無法直接讀取或證明實際查詢內容。 |
| 網域分流 | 分別測試符合中國大陸規則與未符合規則的網域,並記錄所選上游。 | 單一網域測試成功,無法證明整份網域規則都已正確載入。 |
nslookup www.baidu.com 223.5.5.5
ipconfig /flushdns
curl.exe --proxy http://127.0.0.1:10808 --head https://www.microsoft.com/
上述指令是三項獨立檢查:第一項測試指定解析器;第二項清除 Windows DNS 快取;第三項測試本機 HTTP 代理連線。執行第三項前,請將連接埠改為介面顯示的實際值。這些指令不是內建 DNS 的自動驗收工具;尤其不能直接把 nslookup 的結果說成「DoH 分流已生效」。
清除系統快取不會同時清除瀏覽器與核心的所有快取。重新測試時,可以重新啟動核心及測試中的應用程式;如果暫時提高記錄層級,測試結束後請恢復日常設定。除錯記錄可能包含瀏覽過的網域,不宜整份公開上傳。
結論:DoH 可降低傳輸暴露,但無法處理所有解析風險
只有在確認上游可連線、TLS 驗證正常、出站符合預期,且應用程式查詢進入受控路徑後,才能評估這套設定是否達成目標;只看檢測頁顯示的解析器名稱並不足夠。
七、DNS 分流常見問題
填入 DoH 位址後,為什麼仍然逾時?
先確認節點本身能否連線至 HTTPS,再檢查前往 DoH 位址的路由。範例應將 1.1.1.1:443 指向可用的代理出站;也請檢查系統時間與 TLS 錯誤。如果改用網域格式的 DoH,還要確認上游網域的初始解析是否正常。
加入 expectIPs 後,中國大陸網站反而變慢了?
確認該網域實際回傳的 IP 是否位於境外 CDN。結果不符合 geoip:cn 時,會遭到拒絕或進入後續回退流程。先針對該網域調整分類或預期範圍,不要一再增加解析器來掩蓋分類錯誤。
設定 UseIPv4 後,為什麼系統仍能查到 IPv6?
UseIPv4 限制的是目前的內建 DNS,不是 Windows 全域設定。請確認測試是否來自瀏覽器獨立使用的 DoH、系統解析器或其他應用程式;若要統一解析,先讓應用程式使用同一條受控流程,再檢查位址族策略。
啟用 TUN 後,還需要檢查 DNS 設定嗎?
需要。TUN 解決的是流量入口的涵蓋範圍,不會自動確保上游選擇與出站路徑正確。請先確認實際執行的核心,再檢查 DNS 接管、區域網路解析與遠端上游路由;更換核心後,應依照對應的設定格式重新驗證。
將所有網域都交給遠端 DoH,會不會比較簡單?
設定雖然較少,但中國大陸網站的 CDN 調度可能不利於本地直連,區域網路網域也可能無法解析。請先保留必要的本地網域策略,再決定是否將一般公開網域統一交由遠端上游處理;不要把內部網域送到無關的公共解析服務。