網頁能透過代理開啟,不代表網域查詢也經過代理。本文先說明系統解析、核心 DNS 與瀏覽器安全 DNS 的差異,再透過對照測試確認出口;桌面端檢查系統代理與 TUN,Android 端檢查 VPN 接管、應用程式排除與私人 DNS,最後以 FakeDNS、上游路由及斷線測試驗證設定。適合已匯入訂閱,想確認 DNS 實際流向的使用者。
一、DNS 洩漏看的是查詢路徑,不只是國家標籤
DNS 會將網域名稱轉換為 IP 位址。應用程式可能先交由系統解析,再把 IP 位址交給代理;也可能直接將網域交給本機代理,由核心或遠端處理。兩種路徑都能開啟網頁,但前者的查詢可能先送到本地網路提供的解析器。是否算洩漏,應依你的規則判斷:原本要求經過代理的網域,卻透過本地出口解析,才是本文要處理的問題。
中國大陸境內網域若依照規劃使用本地 DNS,不應直接視為洩漏。VLESS、VMess 是代理協定,REALITY 是與連線安全相關的機制;它們不會自動決定作業系統如何送出 DNS 請求。訂閱包含節點參數,也不代表同時提供完整的 DNS 接管與路由策略。
先選擇目標:全代理測試,還是日常分流
全代理測試
- 測試應用程式與 DNS 查詢都納入代理範圍。
- 連往遠端 DNS 上游的連線也應透過代理送出。
- 適合排除本地解析干擾,建立可重現的基準。
日常分流
- 明確允許的本地域名交由本地解析器處理。
- 需要代理的網域交由遠端上游解析。
- 未符合規則的網域與 DNS 連線都必須有明確的備援策略。
先以全代理建立基準,再恢復分流;否則很難分辨哪些是規則允許的直連,哪些是意外繞過代理。
二、線上 DNS 測試:先做三組對照再下結論
線上測試通常會讓瀏覽器查詢一批隨機子網域,再觀察哪些遞迴解析器前來查詢。結果顯示的是解析器的出口,不一定是裝置連線的上游位址,也不一定與代理節點位於同一座城市。公共 DNS 會使用任播與轉送叢集,不能只憑地圖或國家名稱判斷是否洩漏。
-
記錄直連結果
先停止代理,在瀏覽器開啟
dnsleaktest.com,執行標準測試,再執行擴充測試。記錄網路類型、時間、解析器 IP 與所屬機構,作為本地網路的對照。 -
測試代理連線
啟動用戶端,確認同一個瀏覽器已納入代理,再重新執行測試。維持相同節點與網路,不要同時變更 DNS、路由和瀏覽器設定等變數。
-
排除瀏覽器因素
在瀏覽器設定中搜尋「安全 DNS」,暫時關閉後再測一次。測試後是否重新啟用,取決於你是否打算另外管理瀏覽器的加密 DNS 路徑。
-
測試斷線情況
在允許短暫中斷網路的環境中斷開代理節點,再發起新的測試。如果目標是連線失敗時停止存取,斷線後仍能解析並存取新網域,就應檢查系統直連、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 的程式也要確認是否會將網域交由代理解析。
適用情境:只管理明確支援代理,且能確認遠端解析行為的應用程式。
-
確認執行模式
開啟「設定」→「參數設定」,確認核心相關選項;返回主畫面查看「系統代理」與「啟用 TUN」的實際狀態。不要因為系統匣顯示系統代理已啟用,就認定所有程式都已進入隧道。
-
檢查解析上游
進入「設定」→「DNS 設定」,分別檢查目前核心所使用的設定。可使用
https://1.1.1.1/dns-query作為遠端上游的測試目標,接著確認連往該位址的流量會透過代理路由,而不只是填入 DoH URL。 -
確認本機連接埠
在「設定」→「參數設定」查看本機監聽連接埠,並與瀏覽器或應用程式的代理位址比對。例如實際監聽位址為
127.0.0.1:10808,應用程式也應使用該連接埠及相應的代理類型;範例連接埠不能取代實際設定。 -
清除舊快取
在 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 核心,不能直接套用本文所有選項與設定欄位。
-
確認應用程式範圍
開啟側邊欄「設定」→「分應用程式代理」,確認測試用的瀏覽器未遭排除。排查時可暫時關閉分應用程式代理,讓測試範圍更明確;若使用允許清單,瀏覽器必須列在清單中。
-
檢查本機 DNS
進入側邊欄的「設定」,找到「啟用本機 DNS」並開啟,確認「遠端 DNS」與「中國大陸 DNS」欄位。部分版本會將這些選項歸在 DNS 設定分類中;遠端上游與中國大陸上游的位址應分開確認,不能只憑欄位名稱推斷最後的出站路徑。
-
測試私人 DNS
Android 原生設定路徑通常是「設定」→「網路和網際網路」→「私人 DNS」。先記下原本的值,再暫時設為「關閉」,建立核心 DNS 的基準。部分廠牌系統可能稱為「私有 DNS」,可在系統設定中搜尋該名稱。
-
重新建立 VPN 連線
儲存設定後先中止連線,再重新啟動,並確認系統顯示 VPN 連線狀態。切換 Wi-Fi 與行動網路後各測一次;若只有其中一種網路異常,請優先檢查該網路的 IPv6、DNS 可連線性與 VPN 重新連線情況。
-
測試斷線保護
若要在連線失敗時停止存取,請在 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 快取,再考慮還原設定。
- 若應用程式取得合成位址後繞過 VPN,通常無法正常使用該位址,必須調整接管範圍。
- 部分應用程式會自行驗證實際位址或使用獨立解析,可能不適合搭配 FakeDNS;應逐一測試。
六、關閉回退與設定路由備援:分別處理兩層設定
「關閉系統 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 的連線規則放在可能符合的直連規則之前。Xray 會依序比對路由規則,前面的規則符合後便不會繼續尋找後續規則。
- 檢查預設出站:Xray 找不到符合的規則時會使用第一個出站。若要以代理作為備援,請確認第一個出站不是未察覺的直連。
- 避免混用本機模式:選擇上游時,請留意
https+local://這類具有本機存取語意的位址格式;不要將它視為一般遠端 DoH 設定,認為它會受到相同的路由控制。 - 接管一般 DNS:在適當的入站與路由設計中,可將 UDP/TCP 53 交由 DNS 出站處理。只封鎖 53 埠會使部分應用程式無法解析,也無法涵蓋透過 853 或 HTTPS 傳輸的查詢。
- 確保節點網域能完成啟動:若代理伺服器使用網域名稱,建立代理連線前可能需要先進行引導解析。應明確規劃這項例外,避免 DNS 依賴代理、代理又依賴 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 停止後的連線,都需要分別驗證。可靠的設定應讓路徑可解釋、失敗行為可預期,而不是只看結果頁是否出現某個國家。