代理連線顯示正常,只能證明部分應用程式流量進入了 V2Ray 或 Xray 核心。建立連線前,網域通常還要先轉換成 IP 位址;如果這一步仍由系統網路中的預設 DNS 完成,查詢紀錄就可能沿著本地網路獨立送出。排查 DNS 洩漏的重點不是反覆切換節點,而是確認「誰發起查詢、查詢經過哪個入口、最後由哪組解析器回應」。本文操作基準為 v2rayN 7.14.x、v2rayNG 1.10.x,較舊版本的選單文字可能略有不同,但檢查順序不變。
適合遇到「代理可用但檢測頁仍顯示本地解析器」、規則分流後網域存取異常,或行動網路切換後 DNS 結果改變的使用者;完成基準測試、核心 DNS 設定、53 埠攔截與重新測試後,即可判斷洩漏發生在瀏覽器、作業系統、路由規則還是用戶端工作模式。
什麼是 DNS 洩漏:先拆解網域解析鏈路
存取網域時,應用程式可能自行解析,也可能將網域交給系統解析器,或把完整網域交給 HTTP 或 SOCKS 代理。三種路徑的差異,決定 DNS 查詢是否會進入代理核心。使用系統代理時,只有遵循系統代理設定的應用程式流量會被接管;背景程式、部分命令列工具,以及自行傳送 UDP 查詢的應用程式,仍可能直接存取網路介面設定的 DNS。
DNS 洩漏不等於「檢測頁出現多個解析器」。公共 DNS 服務常使用任播節點,一次查詢可能顯示多個出口位置;瀏覽器啟用加密 DNS 後,也可能繞過作業系統設定,直接與瀏覽器指定的解析服務通訊。真正需要注意的是:檢測結果是否出現目前寬頻或行動網路業者的解析器、斷開代理前後的解析器集合是否完全相同,以及查詢是否以 UDP 或 TCP 53 明文流量離開本地介面。
V2Ray 與 Xray 設定中的 dns 物件負責核心內部解析,但不會自動接管作業系統產生的所有 DNS 請求。只有網域已進入核心,或系統 DNS 流量被 TUN、透明入口等機制捕獲時,內建 DNS 設定才有機會生效。這也是「已經寫好 DNS 設定,檢測結果卻沒有變化」最常見的原因。
結論:先確認捕獲範圍,再修改 DNS 位址
系統代理模式只處理遵循代理設定的連線;需要涵蓋更多應用程式時,應先確認 TUN 模式是否接管 DNS,再檢視內建解析器與路由規則。
建立檢測基準:一次測試不能下結論
檢測前先關閉瀏覽器中可能獨立運作的安全 DNS,並暫時停用其他網路代理工具。保留目前的網路連線,記錄系統 DNS 位址、v2rayN 或 v2rayNG 的工作模式、所選節點與路由模式。如此才能區分瀏覽器自行解析的結果,以及用戶端接管後的結果。
-
記錄直連結果
完全退出用戶端後開啟 DNS 檢測頁,分別執行標準測試與擴充測試。記錄解析器數量、所屬網路及國家或地區;擴充測試建議連續執行 2 次。
-
啟用系統代理
在 v2rayN 7.14.x 中選擇「系統代理」→「自動設定系統代理」,保留預設本機 SOCKS 埠 10808 與 HTTP 埠 10809,再用新的瀏覽器視窗重複測試。
-
切換 TUN 模式
進入「設定」→「參數設定」→「TUN 模式設定」,確認 DNS 劫持範圍後啟用 TUN。重新連線節點,等待 10 秒,再執行相同測試。
-
比較三組資料
比較直連、系統代理與 TUN 三組結果。如果系統代理仍顯示本地解析器,而 TUN 不再顯示,問題通常在於系統 DNS 的捕獲範圍,而不是節點本身。
-
執行斷線複測
關閉用戶端後重新整理檢測頁,確認系統網路恢復到基準結果。若退出後仍保留異常 DNS,請檢查網路介面是否殘留手動位址,並執行一次網路斷開與重新連線。
一次擴充檢測可能產生 20 至 50 個查詢,公共解析服務會將它們分配給多個節點。更可靠的做法是連續測試 3 輪,每輪間隔約 15 秒,並將重複出現的解析器視為穩定結果。若只有某一輪出現不同位址,應先排除快取、網路切換與解析服務負載平衡,不要立即修改整套設定。
也可以使用系統內建的網路觀察工具核對 53 埠。測試時只開啟一個檢測頁面,觀察是否有目標埠為 53 的 UDP 或 TCP 連線從實體網卡送出。若已啟用 TUN 卻仍持續出現直連 53 流量,表示某個應用程式繞過了接管,或 DNS 劫持規則未涵蓋對應的協定族。
| 測試狀態 | 範例結果 | 優先判斷 |
|---|---|---|
| 直連 | 3 個本地網路解析器,耗時 42–68 毫秒 | 基準資料,保留作為對照 |
| 系統代理 | 仍出現相同的 3 個解析器 | 瀏覽器或系統 DNS 未進入核心 |
| TUN 模式 | 僅出現設定的公共解析服務,耗時 85–120 毫秒 | DNS 捕獲與代理出站已生效 |
| TUN 模式 | 公共解析器與本地解析器同時出現 | 存在旁路查詢或協定族未涵蓋 |
結論:三組對照比單張檢測截圖可靠
同時保留直連、系統代理與 TUN 的結果,就能直接判斷問題位於代理接管層還是 DNS 出站層,避免將公共解析器的多個節點誤判為洩漏。
v2rayN 修復:內建 DNS 與路由規則要搭配設定
v2rayN 桌面版通常使用 Xray 核心。修復時先確認核心類型與設定來源:一般訂閱節點由用戶端產生執行設定,自訂 JSON 則由使用者直接維護。兩者不要同時修改同一個欄位,否則用戶端更新訂閱或重新啟動核心後,手動內容可能被重新產生的設定覆蓋。
-
確認核心類型
開啟「設定」→「參數設定」→「Core 類型」,確認目前節點使用 Xray。儲存後重新啟動核心,並在日誌頂端核對實際載入的核心名稱與版本。
-
檢查本機埠
在「設定」→「參數設定」→「基礎設定」核對 SOCKS 埠 10808、HTTP 埠 10809 是否被其他程式佔用。埠號衝突會導致瀏覽器退回直連。
-
設定網域策略
進入「設定」→「路由設定」,檢查目前規則集的網域策略。需要依解析結果比對 IP 規則時,可使用 IPIfNonMatch;只依網域規則分流時,不要無條件提前解析所有網域。
-
啟用 DNS 捕獲
進入「設定」→「參數設定」→「TUN 模式設定」,啟用 DNS 劫持並確認涵蓋 UDP 53。儲存後退出並重新啟動用戶端,讓虛擬網卡與路由表完整重建。
-
核對執行日誌
連線節點後開啟日誌,存取一個先前未解析過的網域。正常情況下應看到網域進入路由判斷,不應連續出現本地解析逾時或找不到目標位址。
以下結構用於說明內建 DNS 的關鍵欄位,不應直接覆蓋用戶端產生的完整設定。queryStrategy 控制回傳的位址族,servers 決定候選解析器。若目前網路的 IPv6 路由不穩定,先使用 UseIPv4 建立可重現的基準;確認鏈路正常後,再依實際需求調整位址族策略。
{
"dns": {
"queryStrategy": "UseIPv4",
"servers": [
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
},
"223.5.5.5"
]
}
}
只新增伺服器位址還不夠。核心發出的 DNS 請求也必須經過明確的出站路徑,否則加密 DNS 的連線仍可能依預設規則直連。對於按中國大陸與其他地區網域分流的設定,應讓特定解析服務的網域或位址比對到預期出站,並將最終 DNS 規則放在會提前攔截它的寬泛規則之前。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"network": "udp",
"port": 53,
"outboundTag": "proxy"
}
]
}
}
錯誤:failed to find an available destination
原因與解法:出站伺服器網域無法解析,或 DNS 出站被錯誤規則再次送回自身;先為節點伺服器位址保留可連線的引導解析路徑,再重新啟動核心。
錯誤:lookup example.com: no such host
原因與解法:目前解析器回傳空結果、網域規則設定錯誤,或快取中保留了失敗記錄;核對網域拼寫,切換到可連線的解析器,並重新啟動核心以清除本次執行的快取。
錯誤:context deadline exceeded
原因與解法:DNS 查詢或加密 DNS 連線未能在逾時前完成;檢查 443 埠出站路由、系統時間與目前網路可達性,再比較直連與代理出站延遲。
v2rayNG 與 v2flyNG:行動網路下檢查 VPN 接管
v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心。兩者支援的 DNS 欄位範圍與預設行為不完全相同,因此不要將桌面版自訂設定原樣複製後直接啟用。行動版排查首先要確認 VPN 連線確實建立,其次檢查本地 DNS、遠端 DNS、網域策略與按應用程式代理的範圍。
-
記錄網路類型
分別在 Wi-Fi 與行動網路下測試,切換網路後停止連線並重新啟動。不要沿用切換前的檢測分頁,以免快取結果混入新一輪資料。
-
檢查 VPN 設定
在 v2rayNG 1.10.x 開啟「設定」→「VPN 設定」,確認目前使用 VPN 模式,並檢查分應用程式代理清單是否遺漏正在執行檢測的瀏覽器。
-
核對 DNS 項目
進入「設定」→「VPN 設定」→「DNS 設定」,檢查本地 DNS 與遠端 DNS。遠端 DNS 應選擇目前網路可連線的位址,修改後停止並重新啟動連線。
-
檢查網域策略
進入「設定」→「路由設定」,檢查網域策略與預先定義的規則。若規則需要依目標 IP 判斷,請確認解析結果能供對應規則使用,避免網域先被錯誤出站解析。
-
執行雙網複測
在兩種網路下各進行 3 輪擴充檢測,每輪間隔 15 秒。若只有行動網路出現本地解析器,應優先檢查網路切換後的 VPN 重建與 IPv6 路由。
按應用程式代理是行動版最常遺漏的設定。檢測用瀏覽器不在代理清單中時,頁面本身與 DNS 查詢都會直接存取網路,結果自然維持本地狀態。反過來,若瀏覽器已納入 VPN,而另一個背景應用程式仍被排除,它產生的 DNS 請求可能繼續走預設網路;此時系統層級觀察會看到旁路流量,但瀏覽器檢測頁未必能顯示背景應用程式的查詢。
v2flyNG 使用 v2fly 核心時,應以該核心實際接受的設定欄位為準。若匯入的訂閱只包含節點協定、位址與埠號,DNS 與路由通常仍由用戶端本地設定決定,不會從簡單的節點連結自動取得完整策略。遷移設定時,應分別核對 VMess 或 VLESS 節點參數、傳輸設定、DNS 與路由規則,而不是只比較節點名稱。
- Wi-Fi 正常、行動網路異常:重建 VPN 連線,檢查 IPv6 可達性,以及行動網路提供的解析器是否仍被呼叫。
- 所有網路都出現本地解析器:檢查瀏覽器是否被排除、遠端 DNS 是否生效,以及用戶端是否處於 VPN 模式。
- 檢測結果正常但部分網域失敗:檢查網域策略、DNS 分流規則,以及解析器對目標網域的回傳結果。
- 節點 IP 可連線但節點網域失敗:為伺服器網域保留獨立且可連線的引導解析,避免在建立代理前產生循環依賴。
修復後驗收:同時檢查解析、路由與失敗回退
修復完成後不要只查看一次檢測頁。完整驗收應涵蓋冷啟動、網路切換、節點切換與退出用戶端四種狀態。冷啟動用於檢查引導解析,網路切換用於檢查 VPN 與路由表重建,節點切換用於檢查不同伺服器位址的解析路徑,退出用戶端則用於確認系統設定能夠恢復。
建議保留一份簡短的驗收紀錄。範例基準可以寫成:v2rayN 7.14.x、Xray 核心、TUN 模式、遠端 DNS 使用 HTTPS 連線、連續 3 輪檢測未出現本地網路解析器、實體網卡觀察期間沒有持續直連 UDP 53。記錄具體狀態,比只寫「已修復」更方便日後比較用戶端升級或規則調整造成的變化。
| 驗收項目 | 通過條件 | 失敗後檢查 |
|---|---|---|
| 冷啟動解析 | 10 秒內完成節點網域解析並建立連線 | 引導 DNS、伺服器網域與出站循環 |
| 連續檢測 | 3 輪結果穩定,未出現本地網路解析器 | 瀏覽器安全 DNS、系統快取與旁路應用程式 |
| 53 埠觀察 | 實體網卡沒有持續直連 DNS 查詢 | TUN 捕獲範圍、UDP 與 TCP 規則 |
| 網路切換 | 重新連線後的解析結果與切換前一致 | VPN 重建、IPv6 路由與遠端 DNS 可達性 |
| 退出恢復 | 系統 DNS 回到修改前的基準 | 網路介面手動 DNS 與殘留代理設定 |
現象:檢測正常但 nslookup 仍顯示本地 DNS
原因與解法:瀏覽器流量進入代理,但命令列查詢直接呼叫系統解析器;這表示兩項測試走的是不同入口,應在 TUN 模式下重新觀察命令列查詢是否受到接管。
現象:切換節點後首次存取逾時
原因與解法:新節點伺服器網域依賴尚未建立的代理 DNS,形成啟動順序問題;為伺服器網域設定可直接連線的引導解析,並避免將該查詢送回尚未連線的代理出站。
如果檢測結果仍不穩定,請依「應用程式入口、系統接管、核心 DNS、DNS 出站、最終路由」五個層次逐一縮小範圍。不要同時修改遠端 DNS、網域策略、路由規則與工作模式;每次只改一項並重複相同測試,才能確認真正生效的是哪一層。
常見問題
檢測頁出現兩個公共 DNS 位址,算是洩漏嗎?
不一定。公共解析服務可能透過任播或負載平衡回傳多個節點。應核對位址所屬網路,並與直連基準比較;若未出現本地網路業者的解析器,也沒有直連 53 埠流量,通常不能只憑數量判斷洩漏。
已設定加密 DNS,為什麼仍看得到本地解析器?
加密 DNS 只描述查詢的傳輸方式,不代表所有應用程式都會使用它。瀏覽器、作業系統與代理核心可能各自有不同的解析入口。先確認檢測用瀏覽器是否進入代理,再檢查 TUN 是否捕獲系統 DNS。
只使用系統代理就能完整處理 DNS 嗎?
不能一概而論。將完整網域交給代理的應用程式,可以由遠端或核心解析,但直接呼叫系統解析器的應用程式仍可能繞過系統代理。需要涵蓋更多應用程式時,應使用能接管相應流量的模式並完成複測。
VMess 與 VLESS 會決定 DNS 是否洩漏嗎?
不會直接決定。VMess 與 VLESS 負責用戶端與伺服器之間的代理協定,DNS 是否進入核心主要取決於應用程式的解析方式、用戶端工作模式、內建 DNS 與路由規則。