DNS 洩漏如何檢測:v2rayN 與 v2rayNG 防 DNS 洩漏設定教學

了解 DNS 洩漏的成因與檢測方式,逐步檢查用戶端的遠端 DNS、直連 DNS、DNS 路由與 TUN 設定,確認 DNS 查詢是否依預期路由。

本文重點

排查 v2rayN 與 v2rayNG 的 DNS 問題,必須同時確認「由誰發起解析」以及「DNS 連線從哪裡送出」。本文適合已能連上節點,但檢測結果出現本地電信業者的解析器,或遇到網域存取異常的使用者。先建立直連與代理的對照,再分別檢查桌面系統代理、Android VPN、遠端 DNS 與分流規則,最後透過日誌和重複測試確認結果。

一、DNS 洩漏的判定標準

DNS 洩漏是指 DNS 查詢未依預期的網路路徑傳送。例如,原本應透過代理存取的網域卻交由本地電信業者解析,查詢內容就可能暴露在本地 DNS 解析路徑中。網站顯示的對外 IP 是代理伺服器,只能代表該次網頁連線經過代理,無法證明 DNS 查詢也走了代理。

v2rayN 的系統代理只會影響遵循系統代理設定的應用程式,不會接管整台電腦的所有 DNS 流量。v2rayNG 的 VPN 模式可接管更多應用程式的流量,但排除的應用程式、瀏覽器的安全 DNS、系統私人 DNS 以及 IPv6 路由,都可能改變實際連線路徑。啟用 TUN 或 VPN 不是驗證的終點,而是開始檢查的起點。

應用程式提出網域請求 選擇解析器 比對 DNS 規則 送出 DNS 解析連線 送出目標連線
檢測結果代表的情況接下來檢查
網頁 IP 已變更網頁連線經由不同的出口另外檢查 DNS 查詢路徑
出現本地電信業者的解析器測試網域可能經由本地 DNS 解析檢查瀏覽器、系統 DNS 與直連規則
解析器所在國家與節點不同可能與公用 DNS 的 Anycast 或轉送機制有關確認 DNS 服務業者與實際出口,不要只看國家
代理與本地解析器同時出現可能存在多條解析路徑或回退機制重複測試,並排除快取、應用程式分流與回退設定

結論:依網域用途判斷是否洩漏

分流設定可讓直連網域使用本地 DNS。需要優先修正的是代理網域意外經由本地 DNS 解析,而不是把所有本地解析紀錄都視為異常。

二、建立直連與代理的檢測對照

DNS 檢測網站通常會產生隨機子網域,再從權威 DNS 伺服器觀察遞迴解析器的來源。結果反映的是最後參與遞迴查詢的服務,不一定是用戶端設定的 DNS 位址。公用 DNS 的轉送與 Anycast 也會影響地理位置判定,因此應一併記錄服務業者、測試模式與目前的用戶端設定。

  1. 記錄基準結果

    關閉用戶端的代理連線,使用同一個瀏覽器開啟 DNS 檢測網站,例如手動輸入 dnsleaktest.com。記錄網頁對外 IP、解析器服務業者、IPv4/IPv6 狀態,以及瀏覽器是否啟用安全 DNS。

  2. 啟用代理

    啟動 v2rayN 或 v2rayNG,確認目前使用的節點與路由預設值。保持相同的網路、瀏覽器和檢測網站,再執行完整測試;兩次測試之間不要切換 Wi-Fi 與行動網路。

  3. 排除其他變因

    暫時關閉瀏覽器自訂的安全 DNS 後重新測試,再單獨啟用安全 DNS 測試一次。每輪只變更一項設定,並分別標記「系統代理」、「TUN」或「VPN」,避免混淆不同連線方式的結果。

  4. 重複驗證

    每種設定至少測試 2 次,並查看用戶端日誌。變更 DNS 設定後,請重新啟動核心或 VPN 連線;單純重新整理網頁可能仍使用舊快取,無法取代使用全新隨機網域進行測試。

在 Windows 上,可以使用以下命令查看實體網卡與虛擬網卡的 DNS 位址,並清除系統快取。清除系統快取不會同步清除瀏覽器快取,也不會自動改變應用程式選用的解析器。

Get-DnsClientServerAddress -AddressFamily IPv4
Get-DnsClientServerAddress -AddressFamily IPv6
ipconfig /flushdns

三、v2rayN:分開設定遠端 DNS 與直連 DNS

設定 v2rayN 時,必須區分三種用途:解析代理目標網域、解析直連目標網域,以及解析代理伺服器本身的位址。若代理伺服器使用網域名稱,必須先取得該伺服器的 IP 才能建立代理連線;若把這一步也強制送進尚未建立的代理,就可能形成 DNS 解析的循環依賴。

v2rayN 不同版本、介面類型與核心的 DNS 編輯介面可能有所差異。以下以提供「設定」→「DNS 設定」入口的介面為例;若畫面顯示 DNS 設定範本或 JSON 編輯器,請先備份原設定,再依用途修改對應核心的設定,不要直接貼上另一種核心使用的欄位。

  1. 備份目前設定

    先記下主畫面目前的節點、路由預設值、系統代理狀態與 TUN 狀態,再前往「設定」→「DNS 設定」並保存原有內容。訂閱提供的是節點參數,不應預設為它已涵蓋本機所有 DNS 連線規則。

  2. 區分 DNS 解析用途

    遠端 DNS 用於需要透過代理解析的網域,直連 DNS 則用於本地或直連網域。例如,https://1.1.1.1/dns-query 是 DoH 服務位址範例;它僅供參考,連線是否經過代理仍取決於實際路由設定。

  3. 檢查 DNS 解析的出口

    檢查 DNS 設定與路由規則,確認遠端 DNS 連線會經由代理出口,直連 DNS 連線則使用直連出口。使用具有本地直連語意的 DNS 位址格式或特殊解析模式前,應先確認目前核心的處理方式,不要只憑「遠端 DNS」標籤判斷。

  4. 確認流量接管方式

    若只有瀏覽器需要代理,先測試系統代理;若應用程式不遵循系統代理,再評估是否使用 TUN。啟用 TUN 後,請檢查 DNS 接管、網卡路由與 IPv6,避免同時保留多組互相衝突的虛擬網卡設定。

  5. 重新啟動後再次測試

    儲存設定並重新啟動核心,再依照前一節重新檢測。若無法解析節點伺服器的位址,應先還原可用的引導解析路徑,而不是繼續增加代理規則。

解析方式常見連接埠需要確認的路徑
傳統 DNSUDP 53、TCP 53是否從實體網卡直接送出,或回退至 TCP
DoTTCP 853加密 DNS 連線是否依預期經由代理
DoH通常使用 HTTPS 443DNS 服務位址、引導解析與 HTTPS 出口

DNS 加密與 DNS 代理是兩回事。DoH 可以加密用戶端與 DNS 服務之間的查詢,但若 DoH 連線直接透過本地網路送出,就不符合「DNS 流量經由代理出口」的目標。反過來說,傳統 DNS 若由代理通道承載,也不能據此認定查詢以明文從本地網路送出。

四、v2rayNG:檢查本地 DNS、VPN 與應用程式範圍

v2rayNG 使用 Xray 核心,並透過 Android VPN 介面接管應用程式流量。「啟用本地 DNS」中的「本地」通常是指用戶端內的 DNS 處理功能,不代表所有網域都會送交本地電信業者解析。實際流向仍由 DNS 設定、路由規則與 VPN 接管範圍共同決定。

  1. 檢查 DNS 設定

    開啟側邊選單中的「設定」,尋找「遠端 DNS」、「直連 DNS」與「啟用本地 DNS」。這些項目可能分布在設定頁的不同區段;若目前版本沒有某個項目,請先確認用戶端版本與核心,不要尋找不存在的開關。

  2. 檢查應用程式範圍

    前往「設定」→「應用程式分流」,確認瀏覽器與待測應用程式是否遭到排除。測試時可先關閉應用程式分流限制,確認 VPN 接管正常後,再逐一恢復排除項目。

  3. 排除私人 DNS 的影響

    Android 常見的設定路徑為「設定」→「網路和網際網路」→「私人 DNS」,不同廠牌的名稱可能略有不同。記下原本的設定值,暫時關閉指定服務業者的主機名稱後進行對照測試;企業裝置或受管理的網路,請先確認管理政策。

  4. 重新建立 VPN 連線

    中斷連線並重新啟動 v2rayNG 的 VPN,再檢查瀏覽器安全 DNS、IPv6,以及切換網路後的測試結果。只修改設定卻保留舊的 VPN 工作階段,可能無法套用最新設定。

排查 v2rayNG 的 IPv6 問題時,也應分層檢查。DNS 回傳 AAAA 記錄,只代表解析結果包含 IPv6 位址;真正需要確認的是後續 IPv6 連線是否由 VPN 接管。可以暫時停用 IPv6 進行對照,但最終應修正流量接管或路由策略,不要把所有異常都歸因於 AAAA 記錄。

五、DNS 路由與 TUN:避免規則互相抵銷

Xray 內建 DNS、路由網域策略與嗅探功能各有不同用途。內建 DNS 負責解析,路由規則負責選擇出口,嗅探則會嘗試從連線中補充網域資訊。將路由網域策略改為某個值,不會自動讓所有系統 DNS 查詢都透過代理;啟用嗅探也不會接管瀏覽器自行發出的 DoH 連線。

結論:先固定連線方式,再調整 DNS 路由

先讓單一瀏覽器在一種連線模式下穩定通過測試,再逐項恢復分流、應用程式規則與瀏覽器安全 DNS。每次只恢復一項,才能找出是哪條路徑改變了 DNS 出口。

六、常見錯誤與最終驗收

DNS 故障不一定會表現為「洩漏」。遠端 DNS 連線誤走直連、DNS 位址無法連線,或節點位址缺少引導解析,都可能導致網頁無法開啟。日誌內容會隨核心與系統而異,以下列出可能出現的實際錯誤訊息片段,請搭配前後日誌中的目標位址與時間判斷。

lookup example.com: i/o timeout

原因:解析作業在逾時前未取得結果,可能是 DNS 服務無法連線或出口路徑錯誤。解決方式:先檢查 DNS 服務位址與出口規則,再測試是否能連線至同一服務;不要只是不斷切換網頁的目標節點。

dial tcp: lookup example.com: no such host

原因:名稱解析沒有取得可用結果,可能是網域拼寫錯誤、網域不存在或解析策略異常。解決方式:檢查實際網域,並使用另一條可用的 DNS 解析路徑進行比對;不要直接判定為代理驗證失敗。

context deadline exceeded

原因:作業超過截止時間。這不是 DNS 專屬錯誤,連線至 DNS 服務或目標伺服器時也可能發生。解決方式:根據前後日誌判斷失敗階段,再分別檢查 DNS、TLS 連線與代理出口。

DNS 封包擷取可補充網頁檢測,但只篩選 UDP 53 會漏掉 TCP 53、DoT 與 DoH。檢查實體網卡時,應留意 DNS 服務的目標位址與連線方向;若發現 443 連線,也要確認目標,不能把所有 HTTPS 流量都當成 DNS。沒有發現 53 連接埠的流量,也不足以單獨證明 DNS 解析完全依預期運作。

v2rayN 與 v2rayNG 的防 DNS 洩漏設定,最終目標是讓 DNS 查詢與目標連線各自遵循明確的路由規則。網頁可以開啟、對外 IP 已變更、公用 DNS 顯示不同地區,這些都不能取代路徑驗證。完成對照測試並保留設定紀錄,之後更換節點或網路時,才能及早發現變化。

下載 v2rayN 用戶端