代理節點顯示已連線,不代表所有網域查詢都進入代理鏈路。瀏覽器、系統服務和一般應用程式在存取網站前,通常會先將網域交給 DNS 解析;如果這一步仍由目前網路的預設解析器完成,之後網頁流量才經由 VMess、VLESS 等代理出站,就形成一般所說的 DNS 洩漏。排查時應將「網域由誰解析」與「網頁資料從哪裡出站」視為兩條鏈路觀察,不能只看出口位址。
本文適合已能連線節點,但檢測頁仍顯示中國大陸本地電信業者 DNS,或切換 TUN 後遇到網域逾時的 v2rayN、v2rayNG 使用者。完成檢查後,可以判斷結果是否代表洩漏、統一遠端 DNS 與 DNS 出站,並透過兩輪對照測試確認修復是否生效。
DNS 洩漏的鏈路與判斷界線
一次一般的存取流程可拆成網域查詢、位址回傳、路由比對和代理出站四個環節。系統代理主要接管支援代理設定的應用程式流量,不一定會自動接管系統傳往 UDP 53 埠的查詢。TUN 模式則能在虛擬網卡層擷取更廣泛的連線,但仍須提供明確的 DNS 規則,否則查詢可能被錯誤送往直連出口,或在本地 DNS 與遠端 DNS 之間循環。
真正需要注意的是解析器的歸屬是否符合目前設定。例如,客戶端明確指定遠端 DNS,經代理存取檢測頁後卻仍反覆顯示目前寬頻或行動網路提供的解析器,就應繼續檢查。相反地,檢測結果出現多個不同城市,不一定代表洩漏:公共 DNS 可能採用任播節點,檢測網站也可能將同一項服務辨識為不同機房。
- 系統代理情境:瀏覽器網頁可能經過本地 HTTP 或 SOCKS 埠,但其他應用程式的 UDP 53 查詢仍可能直連。
- TUN 情境:應同時核對虛擬網卡、DNS 劫持、路由規則和遠端 DNS,只開啟單一開關並不足夠。
- 瀏覽器加密 DNS:瀏覽器內建的解析設定可能繞過客戶端方案,導致測試結果與系統設定不一致。
- 快取情境:系統、瀏覽器和客戶端都可能保留舊答案,修改設定後立即重新整理一次,通常不足以得出結論。
線上檢測:先建立基準,再進行代理對照
檢測前先關閉會改變網路路徑的其他代理程式,只保留一個待測客戶端。準備兩組結果:未連線代理時的基準,以及連線節點後的對照。建議分別執行標準測試與擴充測試;擴充測試通常會連續發起多組隨機子網域查詢,更容易揭露仍在直連的解析器。
- 中斷 v2rayN 或 v2rayNG 連線,記錄目前的出口位址、DNS 服務名稱、國家或地區,以及偵測到的伺服器數量。
- 清除 DNS 快取,再關閉並重新開啟瀏覽器,避免直接命中舊的查詢結果。
- 連線至穩定節點,確認一般網頁可以存取後,再執行第一輪標準檢測。
- 執行擴充檢測,等待所有查詢完成,不要只根據頁面剛開啟時的第一筆紀錄判斷。
- 間隔 30 秒再測試一次,比對兩輪結果是否穩定;若偶爾出現一筆舊紀錄,應再次清除快取後重測。
| 觀察結果 | 常見意義 | 下一步 |
|---|---|---|
| 只出現設定中的公共 DNS | 解析鏈路大致符合預期 | 再測試瀏覽器與其他應用程式 |
| 出現基準中的本地解析器 | 可能仍有查詢直連 | 檢查 DNS 擷取與出站規則 |
| 不同瀏覽器的結果不一致 | 瀏覽器解析策略可能獨立生效 | 統一瀏覽器的加密 DNS 設定 |
| 檢測頁逾時但網頁正常 | 隨機子網域查詢可能遭到阻擋 | 查看核心記錄中的 DNS 逾時 |
一筆可重現的實測紀錄應包含時間、客戶端版本、工作模式和結果數量。例如:v2rayN 7.15.4,系統代理模式,未連線時檢測到 2 個本地解析器;連線後仍出現相同的 2 個解析器。切換至 TUN 並重新啟動核心後,兩輪擴充檢測都只出現 1 組遠端解析服務。這樣的前後對照,比截圖中的單次結果更有價值。
結論:判斷洩漏要看「基準解析器是否再次出現」
伺服器數量和地理位置只能作為輔助判斷;最直接的訊號,是代理連線後仍穩定出現中斷代理時記錄的同一組本地 DNS。
v2rayN:遠端 DNS、DNS 出站與 TUN 設定
以下步驟以 v2rayN 7.15.4 的介面為例。不同 7.x 小版本的選單文字可能略有調整,但操作目標不變:為 Xray 核心指定遠端解析器,讓 DNS 查詢比對專用出站,並在需要涵蓋不支援代理的應用程式時啟用 TUN。修改前,先透過「伺服器」→「匯出所選伺服器」或設定備份功能,儲存目前可用的設定。
步驟一:確認本地監聽與系統代理
- 開啟「設定」→「參數設定」,記錄本地混合監聽埠。常見預設值為
10808;若已修改,請以介面顯示為準。 - 確認埠號未被其他程式佔用,然後回到主介面選擇「自動設定系統代理」。
- 開啟核心記錄,確認入站監聽已啟動,且沒有出現 bind 或 access denied 類型的錯誤。
- 先在系統代理模式完成一次檢測。如果瀏覽器正常,但其他應用程式仍有洩漏,再進入 TUN 設定,不要同時修改所有選項。
步驟二:指定遠端解析器
進入「設定」→「DNS 設定」,選擇目前使用的 Xray DNS 設定。遠端 DNS 可以使用支援加密查詢的位址,也可以使用一般 IP 解析器;關鍵在於後續路由必須讓該查詢依預期經由代理出站。以下是便於理解欄位關係的範例,實際儲存時應以客戶端產生的結構為準。
{
"dns": {
"hosts": {
"dns.google": "8.8.8.8"
},
"servers": [
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
},
"223.5.5.5"
],
"queryStrategy": "UseIP"
}
}
queryStrategy 控制回傳位址族群的偏好。網路只有穩定 IPv4 時,可使用 UseIPv4;雙堆疊環境則可保留 UseIP。若選擇無法正常連通的 IPv6 策略,通常不會表現為「檢測到洩漏」,而是網域解析變慢、記錄出現逾時,或部分網站無法開啟。
步驟三:核對 DNS 出站與 TUN
- 在路由設定中確認 DNS 查詢不會落入預設直連規則。使用專用 DNS 出站時,應讓對應的入站標籤或埠規則指向該出站。
- 進入「設定」→「參數設定」→「TUN 模式」,啟用虛擬網卡後重新啟動核心。首次啟用可能需要確認系統權限。
- 確認 DNS 劫持涵蓋
53埠,並保留區域網路所需的解析範圍;企業內網網域不應一律交給公共解析器。 - 觀察記錄中的 DNS 請求是否由遠端伺服器回傳。完成後清除快取,再執行兩輪擴充檢測。
錯誤:failed to find an available destination
原因與解法:節點網域或 DNS 伺服器位址沒有取得可用結果。先檢查節點位址拼寫,將查詢策略暫時改為 UseIPv4,儲存後重新啟動 Xray 核心。
錯誤:lookup dns.google: i/o timeout
原因與解法:遠端解析器連線逾時,常見原因是 DNS 請求被錯誤分配至直連出口。檢查 DNS 出站標籤與路由比對順序,再更換穩定線路重測。
錯誤:bind: Only one usage of each socket address is normally permitted
原因與解法:本地監聽埠已被佔用。在「設定」→「參數設定」中將混合埠從 10808 改為未佔用的埠,並同步更新系統代理後重新啟動核心。
v2rayNG:Android 端 VPN DNS 與本地 DNS 設定
v2rayNG 透過系統 VPN 介面接管流量,DNS 是否進入通道取決於 VPN DNS、本地 DNS、遠端 DNS 和路由設定。以下以 v2rayNG 1.10.16 為例。開始前先更新一次訂閱並選取可用節點,確認核心類型為 Xray,再記錄目前的路由模式,避免將節點失效誤判為 DNS 問題。
步驟一:填寫 VPN DNS
- 進入右上角選單的「設定」→「VPN DNS」,填入預計使用的解析器位址,例如
1.1.1.1。 - 進入「設定」→「遠端 DNS」,設定用於代理網域查詢的伺服器;使用加密 DNS 位址時,請確保其網域本身能完成初始解析。
- 依網路環境檢查「網域策略」。若只有穩定 IPv4,優先使用 IPv4,避免無法連線的 AAAA 位址拖慢連線。
- 返回主介面,中斷後重新連線,讓 VPN 介面和 DNS 參數重新建立。
步驟二:決定是否啟用本地 DNS
「啟用本地 DNS」的作用不是單純將所有查詢留在本機,而是讓客戶端依設定處理應用程式請求,再選擇遠端或直連解析器。啟用後應同時核對中國大陸 DNS、遠端 DNS 和網域規則。若只開啟開關,卻保留衝突的路由,可能出現同一網域先後請求兩個解析器的情況。
| 設定項目 | 建議檢查值 | 異常表現 |
|---|---|---|
| VPN DNS | 填入目前網路可連線的位址 | 連線後所有網域都無法解析 |
| 遠端 DNS | 與代理網域規則搭配 | 檢測結果仍出現本地解析器 |
| 網域策略 | 與實際 IPv4、IPv6 連線能力一致 | 首次開啟網頁需等待 5 至 10 秒 |
| 路由模式 | 測試階段保持規則穩定 | 切換模式後結果無法比較 |
完成設定後,先中斷連線 10 秒,再重新啟動。進入核心記錄,觀察是否持續出現 DNS timeout。若網頁可以開啟,請使用同一個瀏覽器連續執行兩輪檢測;接著再換一個一般應用程式存取新的網域,確認生效的不只是瀏覽器自身的加密 DNS。
修復後驗證與常見異常
驗證階段不要繼續修改節點、路由和 DNS。固定一條線路、一個瀏覽器和一組檢測步驟,才能確認是哪項設定產生效果。建議將每次結果記錄為「模式、解析器數量、是否出現基準解析器、首次開啟耗時」四項。
- 清除系統 DNS 快取。桌面端可重新連線網路或執行系統提供的重新整理操作;Android 端可中斷 VPN 後切換一次網路,再重新連線。
- 關閉瀏覽器所有視窗後重新開啟,先存取一個之前未開啟過的網域,避免直接命中快取。
- 執行標準檢測和擴充檢測,各做兩輪,間隔至少 30 秒。
- 查看核心記錄,確認沒有連續的解析逾時、循環查詢,或路由至錯誤出站的紀錄。
- 切換至不同的網路環境後重複測試。如果只有某個網路出現洩漏,應檢查該網路的 DNS 劫持或 IPv6 路徑。
錯誤:context deadline exceeded
原因與解法:加密 DNS 請求未能在逾時期限內完成。先確認其位址能經由目前代理出站存取,再減少並行設定的解析器數量,重新啟動核心後重測。
錯誤:network is unreachable
原因與解法:設定回傳了目前網路無法連線的位址族群。將網域策略調整為符合實際網路的設定,並檢查 TUN 路由是否錯誤接管區域網路網段。
連線正常,為什麼檢測頁仍顯示本地 DNS?
先關閉瀏覽器獨立的加密 DNS,再清除快取後重測。如果結果沒有變化,請檢查 v2rayN 的 DNS 出站與 TUN 劫持,或 v2rayNG 的 VPN DNS 與遠端 DNS 是否同時生效。
開啟 TUN 後所有網頁都顯示找不到位址?
查看核心記錄是否出現 DNS timeout,確認擷取 53 埠後有可用出站。v2rayN 還需檢查虛擬網卡權限,修改後退出核心並重新啟動。
檢測到三個公共 DNS,是否仍然洩漏?
不一定。對照未連線代理時的基準,只要沒有穩定重現本地解析器,而且三個結果都屬於設定使用的公共解析服務,就不能僅憑數量判定洩漏。
訂閱更新成功,但連線節點時出現網域解析失敗?
訂閱位址與節點伺服器位址是兩次獨立解析。檢查節點網域拼寫、遠端 DNS 可達性和網域策略,必要時先切換至 UseIPv4,再重新啟動核心。
瀏覽器檢測正常,其他應用程式還需要檢查嗎?
需要。瀏覽器可能使用自己的加密 DNS。保持 TUN 連線,從其他應用程式存取一個新網域,同時查看核心記錄中是否出現對應查詢,才能確認系統範圍的擷取結果。
設定取捨:分流、內網網域與穩定性
防止 DNS 洩漏不等於將所有網域強制交給同一個公共解析器。家庭儲存裝置、印表機和企業內部服務可能依賴區域網路 DNS;如果全部送往遠端伺服器,這些名稱會解析失敗。較穩妥的方式是依網域和網段分組:內網網域交給本地解析器,代理網域交給遠端解析器,再由對應的路由規則將解析請求送往直連或代理出站。
- 為內網網域保留明確的本地解析規則,不要使用寬泛規則覆蓋所有後綴。
- GeoSite 規則負責網域集合比對,GeoIP 規則負責目標位址比對,兩者不能取代 DNS 出站設定。
- VMess、VLESS 只描述節點連線方式,不會自動決定由誰處理系統 DNS。
- v2rayN 適合先使用系統代理進行單一應用程式驗證,再透過 TUN 擴大接管範圍。
- v2rayNG 應將 VPN DNS、遠端 DNS、網域策略和路由模式視為一組設定共同檢查。
結論:先固定解析鏈路,再最佳化分流規則
先讓兩輪檢測不再出現基準解析器,並確認記錄中沒有逾時;之後再加入中國大陸與其他地區的網域分流及區域網路例外,排錯路徑會更短。
如果修復後首次解析時間從約 200 毫秒上升至數秒,重點檢查遠端 DNS 是否繞路、加密 DNS 位址是否需要重複解析,以及路由是否形成循環。穩定設定應同時滿足三點:檢測結果可重現、常用網域解析速度正常、切換網路後能重新建立正確的 DNS 路徑。只追求檢測頁顯示某個地區,卻忽略逾時與相容性,反而會把洩漏問題變成連線故障。