2026-07-08 · 故障排查 · 約 12 分鐘

DNS 洩漏怎麼檢測:V2Ray 防洩漏 DNS 設定實作步驟

先了解 DNS 洩漏的成因與判斷方式,再調整客戶端 DNS 設定:涵蓋遠端解析、內建 DNS 分流與 TUN 模式注意事項,並附上確認修復結果的步驟。

本文速覽

適合已能連線至節點,但 DNS 檢測結果仍出現本地網路解析器的讀者。本文會先區分正常分流與真正的洩漏,再分別調整 v2rayN、v2rayNG 與 TUN 模式的解析路徑,最後透過一套可重複的對照測試確認修復結果。

先確認檢測結果是否為 DNS 洩漏

DNS 的作用是將網域名稱轉換為 IP 位址。瀏覽器造訪網站時,通常會先詢問解析器,再與解析結果對應的伺服器建立連線。代理連線正常,不代表這次詢問也經過代理:網頁流量可能從節點送出,DNS 請求卻仍傳給路由器、電信業者解析器或系統預設的伺服器。

判斷洩漏不能只看檢測頁面列出幾個 DNS 位址。公共解析服務經常使用全球調度,頁面顯示的出口城市可能與節點城市不同;解析器名稱也可能屬於公共服務商或其上游網路。真正需要注意的是:連線前出現的本地電信業者解析器,在連線後是否仍然出現,以及解析請求是否繞過預期的代理或加密通道。

  1. 完全結束客戶端,記錄目前的公網出口地區、DNS 提供者數量與解析器地區。
  2. 啟動客戶端,選擇位置明確的節點,開啟系統代理或 TUN,再重新整理檢測頁面。
  3. 改用新的網域名稱重新測試,避免瀏覽器與系統 DNS 快取直接回傳舊結果。
  4. 比較兩次結果,不要只比較 IP;同時查看電信業者名稱、網路歸屬與地區是否仍指向本地接取網路。

結論:先比較連線前後,不要只看地圖位置

節點出口與 DNS 解析器不必位於同一座城市;只要本地接取網路不再收到原本應由遠端解析的網域查詢,且解析路徑符合分流設計,就不應僅因地區不同而判定為洩漏。

DNS 為什麼會繞過 V2Ray 連線

系統代理主要接管支援 HTTP 或 SOCKS 代理的應用程式連線,並不會自然接管作業系統送出的所有 DNS 封包。有些應用程式會先呼叫系統解析介面取得 IP,再把連線交給代理;此時網域查詢已經從實體網卡送出。另一些應用程式支援 SOCKS 遠端解析,會直接將網域交給代理端處理,兩者結果並不相同。

瀏覽器內建的安全 DNS、路由器下發的 DNS、企業網路策略與虛擬網卡設定,也可能各自建立解析路徑。排查時必須分開確認「誰發起查詢」、「查詢交給誰」以及「封包從哪個出站送出」。只修改一個 DNS 位址,卻沒有改變查詢經過的出站,通常無法解決路徑問題。

應用程式請求網域系統或 TUN 接管內建 DNS 分流選擇解析器指定出站傳送回傳解析結果

最常見的四條旁路

在 v2rayN 中設定內建 DNS 與分流

以下以 v2rayN 7.12.5、Xray-core 25.6.8 的測試介面為例。選單名稱可能在小版本間調整,但處理順序不變:先確定解析器,再讓中國大陸與遠端網域進入對應規則,最後檢查產生的設定與核心日誌。若目前只使用系統代理,v2rayN 的本機 SOCKS 入口通常是 127.0.0.1:10808;應用程式必須支援代理,或由系統代理接管,才會經過這個入口。

  1. 開啟「設定」→「DNS 設定」,先備份目前內容,避免修改失敗後無法復原。
  2. 將遠端解析器設定為支援加密查詢的位址,例如 https://1.1.1.1/dns-query,並確認該解析器的連線依規則進入代理出站。
  3. 為中國大陸網域保留獨立解析器,例如 223.5.5.5,搭配 geosite:cngeoip:cn 限定結果範圍。
  4. 開啟「設定」→「參數設定」,確認核心類型為 Xray,並檢查路由模式沒有將所有 DNS 連線強制送往直連。
  5. 儲存後重新啟動核心,在日誌中觀察是否出現解析逾時、節點網域無法解析或 DNS 出站遭拒。

自訂設定使用者可以參考以下結構,了解內建 DNS 分流方式。這不是所有訂閱都能直接套用的通用檔案;圖形介面可能會合併使用者設定與訂閱產生項目,因此應以最終產生的設定為準,而不只是查看輸入框。

DNS 分流結構範例
{
  "dns": {
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"],
        "expectIPs": ["geoip:cn"]
      },
      {
        "address": "https://1.1.1.1/dns-query",
        "domains": ["geosite:geolocation-!cn"]
      }
    ]
  }
}

queryStrategy 決定優先查詢哪一類位址。只需要 IPv4 時,使用 UseIPv4 可減少雙協定堆疊環境中的不確定性;確認網路、節點與目標網站都能穩定使用 IPv6 後,再選擇包含 IPv6 的策略。它不會自動決定 DNS 連線走直連還是代理,出站仍由路由規則控制。

結論:解析器位址與出站規則必須一併調整

將一般 DNS 換成加密 DNS 只會改變查詢協定;只有再確認該連線前往預期的出站,才能避免解析請求從本地網路直接送出。

在 v2rayNG 中處理遠端 DNS

Android 上的關鍵差異在於,VPN 模式會透過虛擬網路介面接管更多流量。以下以 v2rayNG 1.10.31、Xray 核心為例:進入「設定」→「VPN 設定」,檢查「遠端 DNS」、「本地 DNS」及本地 DNS 啟用狀態。不同介面的翻譯可能略有差異,應以欄位用途為準。

  1. 在「設定」→「VPN 設定」→「遠端 DNS」填入預計用於代理網域的解析器,例如 https://1.1.1.1/dns-query
  2. 在「本地 DNS」保留可直接存取的解析器,例如 223.5.5.5,用於中國大陸規則與節點連線前必要的解析。
  3. 進入「設定」→「路由設定」,確認中國大陸網域規則位於兜底規則之前,避免先被全域代理規則命中。
  4. 中斷後重新連線 VPN,不能只返回主畫面;舊的虛擬介面與 DNS 快取可能仍會保留。
  5. 分別使用瀏覽器與另一個需要連線的應用程式測試。如果只有瀏覽器結果異常,再檢查瀏覽器自身的安全 DNS 設定。

v2rayNG 使用 Xray 核心,VMess 與 VLESS 節點都能搭配內建 DNS 與路由分流。協定名稱本身不會自動防止 DNS 洩漏;結果取決於 VPN 接管範圍、DNS 設定與出站規則。v2flyNG 使用 v2fly 核心時也是相同的排查思路,但設定欄位的支援範圍應以客戶端實際產生的結果為準,不要直接照搬只適用於 Xray 的擴充項目。

TUN 模式下還要檢查哪些位置

TUN 模式透過虛擬網卡接管不主動支援系統代理的應用程式,因此更適合統一處理 DNS,但也不是開啟開關就完成。虛擬網卡的路由優先順序、DNS 劫持規則、區域網路繞過範圍與 IPv6 路徑必須彼此匹配。尤其當實體網卡仍保留可用的 IPv6 DNS 時,IPv4 測試看似正常,部分查詢卻可能從另一條鏈路送出。

應用程式發起查詢TUN 網卡擷取攔截 DNS 流量比對網域規則直連或代理解析

TUN 檢查清單

FakeDNS 會先回傳一段保留位址,再由核心保存「虛擬 IP 與原始網域」的映射。這有助於接管只攜帶目標 IP 的連線,並讓網域分流持續生效,但不代表已真正完成遠端解析。存取目標前,核心仍須依規則取得真實位址;映射池衝突、應用程式快取時間過長或停用嗅探,都可能導致連線失敗。

從核心日誌定位 DNS 錯誤

檢測頁面只能告訴你結果,核心日誌才適合用來定位原因。先將日誌層級暫時調整為資訊或警告,重新連線後造訪一個之前未開啟過的網域。重點查看錯誤發生在解析節點位址、連線至遠端解析器,還是取得目標位址後的出站階段。

錯誤:failed to find an available destination

原因與解法:節點位址或目標網域沒有取得可用結果。檢查節點網域拼寫,為節點保留可存取的引導 DNS,然後重新啟動核心。

錯誤:lookup failed: context deadline exceeded

原因與解法:解析器連線未在逾時期限內回應。確認加密 DNS 位址可連線,並檢查其連線是否被錯誤地送往不可用的出站。

錯誤:lookup: no such host

原因與解法:網域不存在、輸入錯誤,或上游回傳空結果。換用確定存在的新網域重新測試,再核對訂閱中的伺服器位址。

錯誤:failed to dial to DNS server

原因與解法:核心無法建立與解析器的連線。檢查路由規則、網路權限與解析器埠號,不要將解析器自身的網域放入循環解析路徑。

如果日誌沒有 DNS 錯誤,但檢測仍出現本地解析器,問題多半發生在核心之外:應用程式使用了系統解析、瀏覽器建立了獨立連線,或 DNS 封包沒有進入 TUN。此時應比較系統代理與 TUN 兩種模式,而不是反覆更換 VMess、VLESS 節點。

修復後如何進行最終驗證

最終驗證至少要涵蓋「首次查詢、重複查詢、斷線恢復」三種狀態。首次查詢用來檢查實際解析路徑,重複查詢用來觀察快取穩定性,斷線恢復則能發現客戶端重新連線後虛擬網卡或路由規則未重新載入的問題。

  1. 結束客戶端,記錄基準結果,包括出口地區、DNS 網路歸屬與解析器數量。
  2. 清除系統與瀏覽器 DNS 快取,啟動客戶端並造訪一個從未測試過的網域。
  3. 連續執行 3 輪檢測,每輪至少間隔 10 秒,記錄本地電信業者解析器是否再次出現。
  4. 中斷連線 15 秒後重新連線,再執行 3 輪檢測,確認設定在重新連線後仍然生效。
  5. 切換一次 Wi-Fi 與行動網路,重新建立連線,檢查引導 DNS 與 TUN 路由是否能適應網路變化。

連線後看到多個 DNS 位址,就是洩漏嗎?

不是。公共解析服務可能會回傳多個節點。先與直連結果比較,只要本地接取網路的解析器不再出現,且查詢依預期出站,就不能僅憑數量判斷為洩漏。

為什麼系統代理正常,DNS 檢測仍顯示本地網路?

系統代理沒有接管應用程式發出的系統 DNS。先在 v2rayN 的「設定」→「DNS 設定」配置內建解析,再讓應用程式使用 SOCKS 遠端解析;需要統一接管時,再測試 TUN。

換成加密 DNS 後,網頁反而打不開?

先檢查解析器連線是否被送往尚未建立的代理,接著為節點網域保留引導解析。日誌出現逾時時,再核對遠端 DNS 位址與路由順序。

只有瀏覽器檢測異常,其他應用程式正常,該怎麼辦?

進入瀏覽器網路設定,暫時關閉其獨立安全 DNS,再重新檢測。如果結果恢復,表示瀏覽器繞過了客戶端的 DNS 規則,應統一兩端的解析策略。

每次重新連線後結果都不一樣,正常嗎?

公共解析節點變化可以接受,但本地電信業者解析器間歇出現,就需要繼續排查。重點檢查 TUN 重建日誌、實體網卡 DNS 優先順序與 IPv6 路徑。

穩定的目標不是讓檢測頁面永遠只顯示一個位址,而是讓解析路徑可解釋、可重複。中國大陸網域依規則使用直連解析,遠端網域透過預定的解析器與出站處理,節點網域具備獨立的引導解析能力;這三部分同時成立,DNS 分流才算完整。

下載 V2Ray 客戶端 依系統選擇 v2rayN 或 v2rayNG