適合「網頁已經透過代理連線,但 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 連線出口 |
記錄基準
請在可信任的網路環境中,先關閉主視窗的「啟用 TUN」,再選擇「系統代理」→「清除系統代理」。記下測試結果;請留意,此輪連線會直接使用目前的網路。
固定測試變數
固定使用一個可用節點與同一個瀏覽器設定。記錄瀏覽器是否啟用「安全 DNS」;進行比較時,不要同時更換節點、解析器與路由規則。
清除快取
以系統管理員身分開啟 PowerShell,執行
Clear-DnsClientCache。完全關閉瀏覽器後重新開啟,以減少瀏覽器快取與連線重複使用造成的干擾。分階段測試
先測試系統代理,再測試 TUN。每種狀態各執行兩輪,並記錄時間與解析器 IP;不要只截取國家/地區標籤,也不要將舊分頁的結果當成新測試。
結論:優先找出反覆出現的本地解析器
如果代理出口已變更,但兩輪測試都反覆出現直連基準中的電信業者解析器,請優先檢查本地解析路徑;如果只有公共解析器的地區不同,先確認服務歸屬,不要立刻更換節點。
三、系統代理與 TUN:接管範圍各不相同
v2rayN 的「系統代理」→「自動設定系統代理」,主要影響遵循 Windows 代理設定的應用程式,並不是全系統 DNS 接管開關。應用程式可能忽略系統代理,也可能先透過 Windows 解析網域,再連線至代理連接埠。使用 SOCKS 的應用程式也要確認是否選擇「透過代理解析網域」,不能只確認代理位址填寫正確。
本文以 v2rayN 7.x 常見的桌面介面作為操作參考,後續版本可能會調整選單名稱。主視窗的「啟用 TUN」用來啟動虛擬網卡接管;實際的 TUN 實作、DNS 劫持規則與路由行為,則取決於啟動的核心。節點使用 Xray,不代表 TUN 層也由 Xray 提供;請查看啟動記錄來判斷。
- 啟動前:關閉其他會接管路由或 DNS 的網路工具;依用戶端提示授予系統管理員權限,避免建立虛擬網卡或路由失敗。
- 啟動後:確認記錄中沒有權限、建立網卡或路由衝突等錯誤。開關顯示為啟用,只代表介面狀態,不能取代實際接管測試。
- DNS 接管:確認目前的 TUN 設定是否會將一般 UDP/TCP 53 查詢交由核心處理。瀏覽器自行傳送的 DoH 使用 HTTPS,無法透過攔截 53 埠自動識別。
- IPv6:如果實體網路支援 IPv6,也要確認 IPv6 路由同樣受到接管。只有 IPv4 測試通過,不能證明雙堆疊應用程式都會經過預期出口。
四、遠端 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 的精確目標規則,排在可能涵蓋該目標的廣泛直連規則之前。例如使用上述端點時,請確認
1.1.1.1/32最後匹配到的連線出口。 - 本地域名可使用獨立的解析規則,但不要預設將所有未知網域都交由本地解析。
- 如果節點伺服器使用網域名稱,請保留必要的啟動解析,並區分「解析節點位址的查詢」與「解析存取目標網域的查詢」。前者出現本地查詢,不代表後者全部洩漏。
五、流量探測:還原網域資訊,但不取代 DNS 接管
在「設定」→「參數設定」中尋找「流量探測」相關選項。不同版本可能標示為「開啟流量探測」或「啟用流量探測」。此功能可從 HTTP Host、TLS 握手等可見資訊還原目標網域,協助比對路由規則;但無法撤回應用程式已傳送至本地解析器的查詢。
以下僅展示 Xray 入站中的探測欄位,協助理解設定用途;這不是完整設定檔,也不能直接貼到 sing-box 的 DNS 設定中。
{
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"],
"routeOnly": true
}
}
enabled:啟用此入站的流量探測,前提是應用程式流量確實進入該入站。destOverride:指定要嘗試探測的協定。連線中沒有可見的網域資訊時,無法保證還原網域名稱。routeOnly:只將探測結果用於路由,不以探測出的網域取代原始目標位址。這不是 DNS 加密選項。
瀏覽器的安全 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。單一測試頁只能說明該次瀏覽器請求的狀況,無法保證所有背景程式都符合預期。
- 瀏覽器:依日常使用的安全 DNS 設定執行兩輪延伸測試,確認對外 IP 位址與解析器符合預期,且要求遠端解析的測試路徑不再出現本地電信業者的解析器。
- 系統應用程式:使用實際需要代理的程式進行驗證,確認程式遵循系統代理,或已由 TUN 接管;不能因為瀏覽器測試通過,就假設所有程式都沒問題。
- 雙堆疊網路:分別檢查 A 與 AAAA 記錄的解析,以及 IPv4、IPv6 連線,確認沒有只接管一半流量。
- 故障情境:暫時停用節點,觀察遠端解析失敗後是否改用不符合策略的本地查詢;測試結束後立即恢復節點。
- 重新啟動後檢查:重新啟動用戶端後再次測試。切換無線或有線網路後,也要確認 TUN 路由與 DNS 接管仍然有效。
穩定的設定由三部分組成:應用程式流量進入預期入口、網域查詢使用預期解析器,以及解析連線經過預期出口。TUN、DoH 與流量探測分別處理不同環節。逐項驗證這三者,比反覆更換公共 DNS 位址更容易找出問題,也方便日後升級用戶端時再次檢查。