DNS 洩漏測試與防護:v2rayN、v2rayNG 設定教學

了解 DNS 洩漏成因與線上測試結果判讀,並掌握 v2rayN、v2rayNG 關閉系統 DNS 回退、啟用 FakeDNS 及設定路由備援的方法。

本文重點

網頁能透過代理開啟,不代表網域查詢也經過代理。本文先說明系統解析、核心 DNS 與瀏覽器安全 DNS 的差異,再透過對照測試確認出口;桌面端檢查系統代理與 TUN,Android 端檢查 VPN 接管、應用程式排除與私人 DNS,最後以 FakeDNS、上游路由及斷線測試驗證設定。適合已匯入訂閱,想確認 DNS 實際流向的使用者。

一、DNS 洩漏看的是查詢路徑,不只是國家標籤

DNS 會將網域名稱轉換為 IP 位址。應用程式可能先交由系統解析,再把 IP 位址交給代理;也可能直接將網域交給本機代理,由核心或遠端處理。兩種路徑都能開啟網頁,但前者的查詢可能先送到本地網路提供的解析器。是否算洩漏,應依你的規則判斷:原本要求經過代理的網域,卻透過本地出口解析,才是本文要處理的問題。

中國大陸境內網域若依照規劃使用本地 DNS,不應直接視為洩漏。VLESS、VMess 是代理協定,REALITY 是與連線安全相關的機制;它們不會自動決定作業系統如何送出 DNS 請求。訂閱包含節點參數,也不代表同時提供完整的 DNS 接管與路由策略。

先選擇目標:全代理測試,還是日常分流

全代理測試
  • 測試應用程式與 DNS 查詢都納入代理範圍。
  • 連往遠端 DNS 上游的連線也應透過代理送出。
  • 適合排除本地解析干擾,建立可重現的基準。
日常分流
  • 明確允許的本地域名交由本地解析器處理。
  • 需要代理的網域交由遠端上游解析。
  • 未符合規則的網域與 DNS 連線都必須有明確的備援策略。

先以全代理建立基準,再恢復分流;否則很難分辨哪些是規則允許的直連,哪些是意外繞過代理。

二、線上 DNS 測試:先做三組對照再下結論

線上測試通常會讓瀏覽器查詢一批隨機子網域,再觀察哪些遞迴解析器前來查詢。結果顯示的是解析器的出口,不一定是裝置連線的上游位址,也不一定與代理節點位於同一座城市。公共 DNS 會使用任播與轉送叢集,不能只憑地圖或國家名稱判斷是否洩漏。

  1. 記錄直連結果

    先停止代理,在瀏覽器開啟 dnsleaktest.com,執行標準測試,再執行擴充測試。記錄網路類型、時間、解析器 IP 與所屬機構,作為本地網路的對照。

  2. 測試代理連線

    啟動用戶端,確認同一個瀏覽器已納入代理,再重新執行測試。維持相同節點與網路,不要同時變更 DNS、路由和瀏覽器設定等變數。

  3. 排除瀏覽器因素

    在瀏覽器設定中搜尋「安全 DNS」,暫時關閉後再測一次。測試後是否重新啟用,取決於你是否打算另外管理瀏覽器的加密 DNS 路徑。

  4. 測試斷線情況

    在允許短暫中斷網路的環境中斷開代理節點,再發起新的測試。如果目標是連線失敗時停止存取,斷線後仍能解析並存取新網域,就應檢查系統直連、VPN 旁路與應用程式回退。

觀察結果優先檢查不能直接得出的結論
使用代理後仍出現本地電信業者的解析器系統 DNS、應用程式排除設定、UDP 53 直連不能只因網頁出口正常就忽略這項結果
出現兩家公共 DNS 機構瀏覽器安全 DNS、系統私人 DNS、上游回退不代表一定存在兩條實體網路出口
解析器所在國家與節點不同上游機構、任播節點與實際路由不能直接判定為 DNS 洩漏
全代理正常,分流後結果改變網域比對、規則順序與預設出站不能直接判定節點失效

三、v2rayN 桌面端:分開排查系統代理與 TUN

以下以 v2rayN 7.x 的設定架構為參考。不同小版本的分類名稱可能有所調整,請先確認目前使用的核心,再查看產生的設定。特別留意:TUN 模式實際使用的元件及 DNS 設定,可能與一般系統代理模式不同;修改 Xray 的 DNS 欄位,不一定會影響目前的 TUN 路徑。

啟用 TUN 接管後進行驗證

建議

需要涵蓋多種應用程式時,先確認 TUN 是否成功建立、DNS 是否已接管,以及 IPv4、IPv6 是否都依預期處理。TUN 並非自動具備斷線保護;結束用戶端後的行為仍須另外驗證。

適用情境:希望集中管理桌面環境中的應用程式流量與 DNS。

僅使用系統代理

系統代理只會影響遵循該設定的應用程式,並非作業系統層級的 DNS 攔截。若應用程式先呼叫系統解析,查詢仍可能直連;使用 SOCKS 的程式也要確認是否會將網域交由代理解析。

適用情境:只管理明確支援代理,且能確認遠端解析行為的應用程式。

  1. 確認執行模式

    開啟「設定」→「參數設定」,確認核心相關選項;返回主畫面查看「系統代理」與「啟用 TUN」的實際狀態。不要因為系統匣顯示系統代理已啟用,就認定所有程式都已進入隧道。

  2. 檢查解析上游

    進入「設定」→「DNS 設定」,分別檢查目前核心所使用的設定。可使用 https://1.1.1.1/dns-query 作為遠端上游的測試目標,接著確認連往該位址的流量會透過代理路由,而不只是填入 DoH URL。

  3. 確認本機連接埠

    在「設定」→「參數設定」查看本機監聽連接埠,並與瀏覽器或應用程式的代理位址比對。例如實際監聽位址為 127.0.0.1:10808,應用程式也應使用該連接埠及相應的代理類型;範例連接埠不能取代實際設定。

  4. 清除舊快取

    在 Windows 開啟終端機並執行 ipconfig /flushdns,接著關閉並重新開啟瀏覽器,再測試新的網域。既有連線與瀏覽器自己的快取不會因為這個指令全部清除。

Windows 多網卡環境還要檢查 Wi-Fi、有線網卡與虛擬網卡。支援群組原則的系統,可在「電腦設定」→「系統管理範本」→「網路」→「DNS 用戶端」中,將「關閉智慧多重主機名稱解析」設為「已啟用」。這是減少並行查詢的輔助措施,不能取代 TUN 接管,也不是所有系統 DNS 回退的總開關。變更後仍應以實際測試結果為準。

四、v2rayNG Android 端:先納入 VPN,再檢查私人 DNS

以下以 v2rayNG 1.9.x 常見的設定架構為參考。v2rayNG 使用 Xray 核心,但系統 VPN 接管、Android 私人 DNS 與瀏覽器安全 DNS 屬於不同層級。v2flyNG 使用 V2Fly 核心,不能直接套用本文所有選項與設定欄位。

  1. 確認應用程式範圍

    開啟側邊欄「設定」→「分應用程式代理」,確認測試用的瀏覽器未遭排除。排查時可暫時關閉分應用程式代理,讓測試範圍更明確;若使用允許清單,瀏覽器必須列在清單中。

  2. 檢查本機 DNS

    進入側邊欄的「設定」,找到「啟用本機 DNS」並開啟,確認「遠端 DNS」與「中國大陸 DNS」欄位。部分版本會將這些選項歸在 DNS 設定分類中;遠端上游與中國大陸上游的位址應分開確認,不能只憑欄位名稱推斷最後的出站路徑。

  3. 測試私人 DNS

    Android 原生設定路徑通常是「設定」→「網路和網際網路」→「私人 DNS」。先記下原本的值,再暫時設為「關閉」,建立核心 DNS 的基準。部分廠牌系統可能稱為「私有 DNS」,可在系統設定中搜尋該名稱。

  4. 重新建立 VPN 連線

    儲存設定後先中止連線,再重新啟動,並確認系統顯示 VPN 連線狀態。切換 Wi-Fi 與行動網路後各測一次;若只有其中一種網路異常,請優先檢查該網路的 IPv6、DNS 可連線性與 VPN 重新連線情況。

  5. 測試斷線保護

    若要在連線失敗時停止存取,請在 Android「設定」→「網路和網際網路」→「VPN」→「v2rayNG」中檢查「一律啟用 VPN」及「封鎖未使用 VPN 的連線」。裝置與應用程式狀態不同,系統提供的選項也可能不同;啟用後須確認分應用程式規則仍符合預期。

五、FakeDNS:減少預先解析,但不能取代遠端上游

FakeDNS 會回傳合成位址,並在後續連線中將位址對應回網域。如此一來,核心便能保留網域資訊,用於路由比對與代理轉送。FakeDNS 本身不是加密 DNS 服務,也不會自動讓所有實際解析都經過代理;需要真實 IP 的直連流量,仍須使用合適的解析上游。

在 v2rayNG 的「設定」中尋找「啟用 Fake DNS」。啟用前先確認「啟用本機 DNS」已生效,儲存後重新啟動 VPN。桌面端則應依照目前 TUN 元件支援 FakeIP/FakeDNS 的方式設定,不要直接把 Xray 的 FakeDNS 物件複製到其他格式的設定中。

FakeDNS 流程

回傳內容
合成位址,不是目標的實際位址
IPv4 位址池範例
198.18.0.0/15
關鍵相依條件
DNS 查詢與後續連線由同一套映射機制處理
排查重點
位址還原、嗅探設定與應用程式相容性

此位址池用於合成映射,不是應填入系統 DNS 欄位的解析器。

實際 DNS 流程

回傳內容
目標的實際 A 或 AAAA 記錄
一般 DNS
通常使用 UDP/TCP 53
DoH
通常透過 HTTPS 443 查詢
排查重點
上游連線的出站路由、回退與引導解析

使用加密連線不代表出口符合預期,仍須確認承載連線的路由。

六、關閉回退與設定路由備援:分別處理兩層設定

「關閉系統 DNS 回退」並不是跨平台通用的按鈕。用戶端核心的備用上游、Windows 多網卡查詢、Android 網路切換,以及瀏覽器本身的安全 DNS,都必須分別排查。Xray 的 disableFallback 只控制內建 DNS 的備用查詢行為,無法代替作業系統阻止直連。

以下是 Xray DNS 與路由的局部範例,並非完整設定。範例只展示遠端上游及其出口限制:現有設定必須已定義標籤為 proxy 的代理出站,並讓應用程式查詢進入核心 DNS。用戶端自動產生的設定,應透過對應的編輯介面調整並檢查最終結果,不可直接覆寫原設定後執行。

{
  "dns": {
    "servers": [
      "https://1.1.1.1/dns-query"
    ],
    "queryStrategy": "UseIPv4",
    "disableFallback": true
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": [
          "1.1.1.1/32"
        ],
        "port": "443",
        "network": "tcp",
        "outboundTag": "proxy"
      }
    ]
  }
}

此處使用 IP 格式的 DoH 位址,是為了減少解析上游網域時對引導解析的依賴。UseIPv4 只會限制這段內建 DNS 查詢所使用的位址類型,不會關閉系統 IPv6。範例未設定網域分流,也未包含應用程式 DNS 接管規則,因此不能據此宣稱已完成全域防洩漏。

七、驗收:同時檢查瀏覽器結果、日誌與斷線行為

完成變更後,不要只保留一張檢測頁截圖。請記錄用戶端版本、執行模式、網路類型、遠端上游與測試應用程式。先驗證單一上游與全代理,再逐項恢復中國大陸網域分流、瀏覽器安全 DNS 及分應用程式規則;每恢復一項就重新測試,才能找出是哪一層改變了解析路徑。

驗收項目執行方式預期佐證
一般 DNS 對外流量在實體網卡上觀察 udp.port == 53 || tcp.port == 53沒有違反預設規則的明文查詢;迴路與虛擬網卡流量另行判斷
遠端上游出站暫時提高日誌層級,觀察上游連線與出站標籤遠端 DNS 連線符合預期的代理出站規則
瀏覽器獨立解析分別關閉與啟用安全 DNS 後進行測試結果變化可由所選上游與路由解釋
IPv6 接管在雙堆疊網路重新測試,並檢查實體網卡上的查詢沒有未納入策略的 IPv6 解析旁路
代理連線失敗中斷代理後查詢新的網域行為符合預設的停止存取或允許直連策略

實體網卡沒有 53 埠流量,只能表示未觀察到這類明文 DNS;瀏覽器 DoH 仍可能透過 443 直連。加密查詢須搭配上游目標、連線路由與日誌判斷。暫時提高日誌層級後,也應恢復日常設定;分享日誌前,請先移除訂閱網址、使用者識別資訊與存取網域。

使用 DoH 後,為什麼檢測頁仍顯示本地附近的解析器?

公共 DNS 可能使用就近的任播節點,地理位置無法說明是否直連。請先確認檢測頁顯示的機構,再檢查 DoH 連線是否經過代理。若只有瀏覽器結果不同,請優先檢查瀏覽器自己的安全 DNS。

啟用 FakeDNS 後,還需要設定遠端 DNS 嗎?

通常仍需要。FakeDNS 負責合成位址與網域映射,不負責所有實際解析。直連目標、特定位址查詢,以及其他需要真實 IP 的情境,都可能需要使用實際 DNS 上游。

測試一直正常,能證明所有應用程式都不會洩漏嗎?

不能。測試只能證明當次測試範圍內的行為。背景應用程式、應用程式內建 DoH、分應用程式排除、網路切換,以及 VPN 停止後的連線,都需要分別驗證。可靠的設定應讓路徑可解釋、失敗行為可預期,而不是只看結果頁是否出現某個國家。

下載用戶端v2rayN / v2rayNG