V2Ray DNS 洩漏如何檢查?檢測步驟與 dns 模組防洩漏設定

說明 DNS 洩漏成因與檢測方式,提供 dns servers、domainStrategy 和 FakeDNS 防洩漏設定範例,並指出 v2rayN 的相關設定位置。

本文重點

適用於網頁已透過代理連線,但 DNS 檢測仍顯示本地電信業者的解析器,或變更 DNS 後部分網域無法開啟的情況。先區分瀏覽器、作業系統與核心的三種解析路徑,再透過對照測試找出請求來源,最後依目前使用的核心合併 DNS 與路由設定片段。本文設定並非完整節點設定檔,不能取代現有的代理出站。

如何判斷 DNS 洩漏:檢查解析路徑,不只看地區

DNS 洩漏是指原本應沿預期代理路徑處理的網域查詢,實際上卻交由非預期的解析器處理。例如,網頁連線已經透過代理,但應用程式先向路由器查詢網域,再由路由器轉交本地電信業者。網頁的出口 IP 位址改變,不代表 DNS 解析路徑也跟著改變。

應用程式送出網域選擇解析路徑查詢解析器選擇路由出站建立目標連線

瀏覽器的安全 DNS、作業系統的 DNS,以及 V2Ray 內建的 dns 可能同時存在。只有請求進入對應的處理流程,相關設定才會生效。系統代理通常只會接管遵循代理設定的應用程式連線,不代表所有 UDP 查詢都會被攔截;在 JSON 中加入 dns.servers,也不會自動接管網路介面的 DNS。

判斷方式:先確認解析器所屬服務

檢測頁面顯示的國家與節點不同,還不足以判定發生洩漏。先記錄解析器位址與營運者,再確認是否為預期的 DNS 服務;公共解析器的任播部署方式與檢測資料庫,都可能影響地區顯示。

檢測步驟:比較直連與代理兩種情況

測試時固定使用同一個瀏覽器、網路與檢測服務。每一輪記錄網頁出口 IP、解析器 IP、瀏覽器安全 DNS 狀態及用戶端路由模式。以下說明操作方法,並非本站實測結果;不要將單次測試出現的解析器數量視為通用合格標準。

  1. 記錄基準狀態

    暫時中斷代理連線,使用瀏覽器執行一次 DNS 洩漏檢測,記下解析器位址與營運者。若使用共享辦公室網路或公用設備,請先確認是否允許變更網路設定。

  2. 固定瀏覽器設定

    在瀏覽器「設定」中搜尋「安全 DNS」,並記錄目前狀態。排查時可暫時關閉,以排除瀏覽器自行解析的影響;完成後請恢復原設定。不要同時變更系統 DNS。

  3. 啟用代理

    啟動 v2rayN,在系統匣選單的「系統代理」中選擇「自動設定系統代理」,並確認使用中的伺服器與路由模式。重新開啟檢測頁面,再進行一輪測試。

  4. 清除快取

    在 Windows 終端機執行 ipconfig /flushdns,接著完全關閉並重新開啟瀏覽器。這個命令只會清除系統快取,無法取代清除瀏覽器本身的快取。

  5. 逐項重新測試

    每一輪只變更一個變數:先檢查瀏覽器解析,再檢查核心 DNS,最後檢查接管方式。至少重複測試兩輪;若結果不穩定,請保留時間與記錄,避免將舊快取誤認為新設定已生效。

命令列可協助判斷請求從何處進入。以下使用範例 SOCKS 連接埠 10808,實際連接埠請以用戶端設定為準。--socks5-hostname 會將目標網域交由 SOCKS 代理處理;這能驗證該應用程式連線如何交接網域,但無法證明整個系統都沒有 DNS 旁路。

curl.exe --proxy socks5h://127.0.0.1:10808 https://example.com/ --head
ipconfig /flushdns
Resolve-DnsName example.com -Type A

最後一個命令請在 PowerShell 中執行;它通常使用系統 DNS 路徑,不會因為設定了 HTTP 系統代理就自動交由 V2Ray 處理。結果與瀏覽器不同,正好說明兩者的請求入口不同;不能因此直接判定核心設定失效。

連接埠與協定:分辨本機代理、DNS 和 DoH

53
傳統 DNS 常用的 UDP/TCP 連接埠
443
DoH 常用的 HTTPS 連接埠
10808
本文範例使用的本機 SOCKS 連接埠

除非本機確實有 DNS 服務在對應連接埠監聽,否則不要將網路介面的 DNS 直接設為 127.0.0.1。SOCKS 監聽與 DNS 監聽使用不同協定:將查詢送到 10808 不會自動取得 DNS 回應。用戶端也可能使用混合式監聽,仍須依目前產生的設定檔判斷。

設定位置主要作用無法據此判斷
系統網路介面 DNS供遵循系統解析設定的程式使用無法保證瀏覽器內建的 DoH 使用相同服務
核心 dns.servers指定內建 DNS 查詢所使用的上游不會自動接管其他程式送出的查詢
routing.rules決定進入核心的連線使用哪個出站無法改寫已在核心外完成的解析
TUN DNS 接管依實作方式攔截或重新導向 DNS 流量無法保證所有加密 DNS 都會被識別並改寫

dns.servers 設定方式:明確指定解析流量的代理路由

以下是 V2Ray/Xray 格式的合併設定片段,用來示範遠端 DoH 與 DNS 流量標籤。使用前提是目前的核心支援這些欄位,而且現有 outbounds 中已有名為 proxy 的可用代理出站。若實際使用的標籤不同,必須改成對應名稱。請勿將此片段當作完整設定檔啟動。

{
  "dns": {
    "tag": "dns-query",
    "servers": [
      "https://1.1.1.1/dns-query"
    ],
    "queryStrategy": "UseIPv4"
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": ["dns-query"],
        "outboundTag": "proxy"
      }
    ]
  }
}

DoH 會加密用戶端與解析服務之間的查詢連線;查詢是否經過代理,仍取決於路由設定。部分核心支援名稱帶有 +local 的本機處理模式,其路由行為與一般遠端模式不同,不要只為了「更快」就直接替換本例。若需要分流解析,再新增限定網域的上游規則,並檢查回退解析是否會使用非預期的服務。

domainStrategy:分別檢查路由解析與出站解析

domainStrategy 並非全域防洩漏開關。相同的欄位名稱出現在不同物件中,控制的階段也不同。排查時必須連同 JSON 層級一起確認,不能只搜尋欄位名稱後批次取代。

欄位位置或值作用方式排查重點
routing.domainStrategy: AsIs路由階段不主動解析網域以比對 IP 規則網域規則與預設出站是否完整
routing.domainStrategy: IPIfNonMatch網域未符合規則時,嘗試解析後再比對 IP解析請求使用哪個 DNS 上游
routing.domainStrategy: IPOnDemand遇到需要判斷 IP 的規則時才觸發解析IP 規則位置與額外解析量
freedom.settings.domainStrategy控制直連出站如何處理目標網域實際使用系統解析或內建 DNS,取決於設定值與核心

AsIs 只限制路由階段,並不代表目標連線完全不會解析。若請求最後交由直連出站處理,仍須取得目標位址;若以網域形式交給代理端,通常會由遠端繼續處理。若要讓台灣本地網站直連,也應先規劃這些網站的解析方式,而非將所有本地 DNS 請求一概視為異常。

操作方式:先固定 DNS 出站,再調整比對策略

先確認帶有 dns-query 標籤的流量確實使用代理出站,再依分流需求選擇 AsIs 或其他策略。單純將 IPIfNonMatch 改為 AsIs,無法修復應用程式進入核心前就已完成的本機解析。

FakeDNS:位址映射不能取代流量接管

FakeDNS 回傳的是保留位址範圍中的映射位址,而非真實目標位址。核心會保存網域與映射位址的關聯;後續連線必須回到相同的處理流程,才能透過映射還原網域。這適用於具備 DNS 接管與連線回收能力的環境,不能只複製一個欄位就啟用。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}

這是支援 FakeDNS 的 V2Ray/Xray 核心概念片段,不包含 DNS 入站、轉送與系統路由。若要還原映射,也須依核心支援情況,將下列嗅探設定合併至既有入站;不要為此建立一個實際流量無法命中的空入站。

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"]
  }
}

v2rayN 可管理不同核心;TUN 模式的 DNS 接管也可能採用另一種設定結構。請先確認實際執行的核心,再決定是否使用上述 V2Ray/Xray 設定方式。其他核心的 TUN DNS 頁面不能直接貼上這段 JSON。

v2rayN 設定位置與常見錯誤

桌面版先檢查「設定」→「參數設定」中的本機監聽連接埠,再開啟「設定」→「DNS 設定」,檢查目前核心對應的 DNS 項目。部分版本會將 DNS 選項放在參數設定中,欄位也可能因核心不同而異。儲存後重新啟動服務,並查看執行記錄,確認實際使用的核心與設定載入結果。更新用戶端、更新訂閱或切換設定檔後,都應再次確認產生的設定檔是否保留變更。

排查系統代理時,請使用系統匣選單中的「系統代理」;排查 DNS 接管時,則檢查主畫面的「TUN 模式」及其設定,兩者不是同一個開關。TUN 可能需要提升權限,也可能與現有虛擬網路介面衝突,變更前請記錄原本狀態。比較結果時,不要同時啟用多套流量接管程式。

錯誤:failed to find an available destination

原因:可能是節點網域解析失敗,也可能是所有連線候選位址都無法使用,不能只憑這一行就判定 DNS 洩漏。解決方式:查看前後的記錄,先確認節點位址能否解析,再檢查 DNS 出站依賴與節點連線狀態。

錯誤:lookup example.com: no such host

原因:目前的解析路徑未取得該網域的有效記錄,記錄中實際出現的網域也可能不同。解決方式:檢查網域拼寫、上游回應與分流限制,並使用另一個已知可解析的網域進行對照;不要先變更監聽連接埠。

錯誤:context deadline exceeded

原因:操作超過等待時間,可能發生在 DNS 查詢階段,也可能發生在後續連線。解決方式:根據記錄中的目標位址判斷逾時階段;若目標是 DoH 服務,請確認流量是否使用預期出站,以及代理是否可用。

Android 端也須區分核心:v2rayNG 使用 Xray,v2flyNG 使用 V2Fly。系統 VPN 接管、應用程式略過清單與 Android「私人 DNS」都可能改變解析路徑,不能直接套用桌面系統代理的判斷。相同節點在兩端結果不同時,先比較請求入口與解析器,不要直接認定節點有問題。

下載 v2rayN