本文重點

適合「網頁已經透過代理連線,但 DNS 測試仍顯示本地電信業者」的情況。先用同一個測試頁建立直連與代理的對照,再區分瀏覽器安全 DNS、Windows 系統解析與核心 DNS 三種路徑,最後檢查 TUN 接管、遠端解析的連線出口與流量探測。判斷依據是查詢實際經過的路徑,而不是測試頁顯示的國家/地區。

一、判斷 DNS 洩漏:先區分查詢與連線

DNS 會將網域名稱轉換為 IP 位址。網頁連線使用代理,不代表前面的網域查詢也經過代理。例如,應用程式先向路由器的 192.168.1.1:53 查詢,再將取得的 IP 位址交給本機代理。網頁雖然能開啟,網域查詢卻已交由本地網路處理。這種查詢與連線分走不同路徑的情況,才是需要排查的問題。

應用程式提出網域查詢選擇解析路徑送出 DNS 查詢取得目標位址建立網頁連線

線上 DNS 測試通常會讓瀏覽器連線至一批隨機子網域,再由測試方的權威 DNS 記錄是哪個解析器發出遞迴查詢。頁面顯示的通常是遞迴解析器或其出口,並非電腦網路卡送出的每一個封包。解析器所在國家/地區與代理出口不同,單憑這點無法證明有 DNS 洩漏。

二、線上測試:建立三組可重現的對照

可在瀏覽器開啟 dnsleaktest.com,先執行 Standard test,再用 Extended test 複查。測試頁會取得相關網路資訊,請勿在輸入欄提交訂閱網址、節點憑證或工作用內部網域。以下是測試紀錄範本,並非本文實測結果。

測試條件需記錄的資訊主要用途
關閉 TUN,清除系統代理對外 IP 位址、解析器 IP、電信業者名稱建立目前網路的直連基準
啟用系統代理,使用同一個節點對外 IP 位址是否變更、是否仍出現基準解析器檢查瀏覽器的代理路徑
啟用 TUN,使用同一個節點解析器清單、核心記錄、瀏覽器 DNS 狀態檢查接管範圍與 DNS 連線出口
  1. 記錄基準

    請在可信任的網路環境中,先關閉主視窗的「啟用 TUN」,再選擇「系統代理」→「清除系統代理」。記下測試結果;請留意,此輪連線會直接使用目前的網路。

  2. 固定測試變數

    固定使用一個可用節點與同一個瀏覽器設定。記錄瀏覽器是否啟用「安全 DNS」;進行比較時,不要同時更換節點、解析器與路由規則。

  3. 清除快取

    以系統管理員身分開啟 PowerShell,執行 Clear-DnsClientCache。完全關閉瀏覽器後重新開啟,以減少瀏覽器快取與連線重複使用造成的干擾。

  4. 分階段測試

    先測試系統代理,再測試 TUN。每種狀態各執行兩輪,並記錄時間與解析器 IP;不要只截取國家/地區標籤,也不要將舊分頁的結果當成新測試。

結論:優先找出反覆出現的本地解析器

如果代理出口已變更,但兩輪測試都反覆出現直連基準中的電信業者解析器,請優先檢查本地解析路徑;如果只有公共解析器的地區不同,先確認服務歸屬,不要立刻更換節點。

三、系統代理與 TUN:接管範圍各不相同

v2rayN 的「系統代理」→「自動設定系統代理」,主要影響遵循 Windows 代理設定的應用程式,並不是全系統 DNS 接管開關。應用程式可能忽略系統代理,也可能先透過 Windows 解析網域,再連線至代理連接埠。使用 SOCKS 的應用程式也要確認是否選擇「透過代理解析網域」,不能只確認代理位址填寫正確。

本文以 v2rayN 7.x 常見的桌面介面作為操作參考,後續版本可能會調整選單名稱。主視窗的「啟用 TUN」用來啟動虛擬網卡接管;實際的 TUN 實作、DNS 劫持規則與路由行為,則取決於啟動的核心。節點使用 Xray,不代表 TUN 層也由 Xray 提供;請查看啟動記錄來判斷。

四、遠端 DNS:設定解析器,也要設定連線出口

在 v2rayN 開啟「設定」→「DNS 設定」,先確認正在編輯的設定屬於目前使用的核心。Xray 與 sing-box 的 DNS 設定格式不同,不能將一個核心的整份 JSON 貼到另一個核心的設定頁面。自訂設定也可能略過部分圖形介面選項,請以實際產生並載入的設定為準。

遠端解析器可使用服務提供的 DoH 位址,例如 https://1.1.1.1/dns-query。DoH 會加密用戶端與解析器之間的查詢內容,但不會自動確保連線經過代理。如果希望解析服務看到的是代理出口,就必須同時確認這條 HTTPS 連線的出口,而不只是確認網址使用 HTTPS。

設定項目具體檢查內容容易忽略的情況
解析器位址確認完整的 DoH 路徑 /dns-query只填入服務首頁,回傳的是網頁而非 DNS 回應
查詢的連線出口讓遠端解析連線透過代理送出DoH 雖然已加密,仍可能直接透過本地寬頻連線
啟動解析為節點網域與解析器網域保留可用的引導解析路徑代理需要 DNS,DNS 又依賴尚未建立的代理
失敗時的回退確認是否回退至系統或電信業者的 DNS遠端解析失敗後,未提示便改用本地解析

如果使用 Xray 內建 DNS 的一般 https:// 模式,請搭配路由設定確認解析連線的出口;https+local:// 是本地模式,不能當成「強制透過代理」的替代寫法。如果使用 IP 位址形式的 DoH 端點,請確認服務憑證確實涵蓋該位址;不要為了解決連線錯誤而關閉憑證驗證。

五、流量探測:還原網域資訊,但不取代 DNS 接管

在「設定」→「參數設定」中尋找「流量探測」相關選項。不同版本可能標示為「開啟流量探測」或「啟用流量探測」。此功能可從 HTTP Host、TLS 握手等可見資訊還原目標網域,協助比對路由規則;但無法撤回應用程式已傳送至本地解析器的查詢。

以下僅展示 Xray 入站中的探測欄位,協助理解設定用途;這不是完整設定檔,也不能直接貼到 sing-box 的 DNS 設定中。

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["http", "tls"],
    "routeOnly": true
  }
}

瀏覽器的安全 DNS 也需要另外確認。在 Chrome 中,可前往「設定」→「隱私權和安全性」→「安全性」查看「使用安全 DNS」;在 Edge 設定中搜尋「安全 DNS」。排查時可先關閉此功能進行一輪對照,再依最終策略決定是否啟用。驗收時必須使用預計長期保留的設定;不能測試時關閉、測試後再開啟,卻不重新測試。

六、依據記錄錯誤與命令列排查

核心記錄中的錯誤只表示某個步驟失敗,不等於已經發生 DNS 洩漏。請結合目標位址、時間與出口標籤判斷。以下列出常見錯誤片段;前後文可能因核心版本而不同,不必要求整行記錄與範例完全一致。

錯誤:lookup example.com: no such host

原因與處理方式:解析結果顯示網域不存在,或目前的解析路徑無法解析該網域——先確認網域拼字,再以已知可用的網域進行對照,接著檢查 DNS 規則是否將查詢送往錯誤的解析器。

錯誤:context deadline exceeded

原因與處理方式:操作超過等待時間,DNS 請求或代理連線都可能造成此情況——查看同一筆記錄中的目標;如果目標是 DoH 端點,請檢查其路由、代理連線狀態與啟動解析依賴。

錯誤:x509: certificate has expired or is not yet valid

原因與處理方式:系統時間或服務憑證有效期限異常——先同步 Windows 日期與時間,再確認端點憑證狀態;請勿關閉 TLS 憑證驗證。

若要查看 Windows 目前使用的 DNS 位址,可在 PowerShell 執行以下命令。這些命令用來檢視網路卡設定並測試系統解析,不能取代透過代理的瀏覽器測試。尤其是手動指定解析器的查詢,若未受到 TUN 接管,可能會直接送往該位址。

Get-DnsClientServerAddress -AddressFamily IPv4
Get-DnsClientServerAddress -AddressFamily IPv6
Clear-DnsClientCache
Resolve-DnsName example.com -Type A
Resolve-DnsName example.com -Type AAAA

網路卡清單中保留路由器 DNS,並不能單獨證明有洩漏,因為 TUN 可能會攔截送往該位址的請求。反過來說,清單顯示公共 DNS,也不能證明查詢經過代理。若要進一步擷取封包,請在實體網路卡檢查是否有直連的 UDP/TCP 53 與 TCP 853 流量;僅憑連接埠 443,無法區分 HTTPS 上的 DoH 與一般網頁流量,還需搭配目的位址與核心記錄判斷。

結論:先修復失敗的連線路徑,再判斷是否洩漏

如果遠端 DNS 逾時,請先讓它透過指定出口穩定運作,再停用不符合策略的本地回退。否則只移除回退機制,可能讓「偶爾發生洩漏」變成「所有網域都無法解析」,卻仍未解決真正的路由問題。

七、驗收清單:連同日常使用狀態一起測試

完成修改後儲存設定,依用戶端提示重新啟動核心;若涉及 TUN 路由或虛擬網卡,請重新切換 TUN。最終驗收不能只檢查一個網頁,也應涵蓋重新啟動、網路切換與 IPv6。單一測試頁只能說明該次瀏覽器請求的狀況,無法保證所有背景程式都符合預期。

穩定的設定由三部分組成:應用程式流量進入預期入口、網域查詢使用預期解析器,以及解析連線經過預期出口。TUN、DoH 與流量探測分別處理不同環節。逐項驗證這三者,比反覆更換公共 DNS 位址更容易找出問題,也方便日後升級用戶端時再次檢查。