適用於網頁已透過代理連線,但 DNS 檢測仍顯示本地電信業者的解析器,或變更 DNS 後部分網域無法開啟的情況。先區分瀏覽器、作業系統與核心的三種解析路徑,再透過對照測試找出請求來源,最後依目前使用的核心合併 DNS 與路由設定片段。本文設定並非完整節點設定檔,不能取代現有的代理出站。
如何判斷 DNS 洩漏:檢查解析路徑,不只看地區
DNS 洩漏是指原本應沿預期代理路徑處理的網域查詢,實際上卻交由非預期的解析器處理。例如,網頁連線已經透過代理,但應用程式先向路由器查詢網域,再由路由器轉交本地電信業者。網頁的出口 IP 位址改變,不代表 DNS 解析路徑也跟著改變。
瀏覽器的安全 DNS、作業系統的 DNS,以及 V2Ray 內建的 dns 可能同時存在。只有請求進入對應的處理流程,相關設定才會生效。系統代理通常只會接管遵循代理設定的應用程式連線,不代表所有 UDP 查詢都會被攔截;在 JSON 中加入 dns.servers,也不會自動接管網路介面的 DNS。
- 瀏覽器自行解析:啟用安全 DNS 後,瀏覽器可能直接向指定的 DoH 服務查詢,而不使用系統解析器。
- 系統先行解析:應用程式先取得 IP 位址,再將連線交給代理。此時核心可能只收到 IP 位址,無法攔截已送出的查詢。
- 核心依需求解析:路由進行 IP 比對、部分出站連線或 DNS 入站轉送,都可能觸發內建解析,但不保證涵蓋其他處理程序。
判斷方式:先確認解析器所屬服務
檢測頁面顯示的國家與節點不同,還不足以判定發生洩漏。先記錄解析器位址與營運者,再確認是否為預期的 DNS 服務;公共解析器的任播部署方式與檢測資料庫,都可能影響地區顯示。
檢測步驟:比較直連與代理兩種情況
測試時固定使用同一個瀏覽器、網路與檢測服務。每一輪記錄網頁出口 IP、解析器 IP、瀏覽器安全 DNS 狀態及用戶端路由模式。以下說明操作方法,並非本站實測結果;不要將單次測試出現的解析器數量視為通用合格標準。
記錄基準狀態
暫時中斷代理連線,使用瀏覽器執行一次 DNS 洩漏檢測,記下解析器位址與營運者。若使用共享辦公室網路或公用設備,請先確認是否允許變更網路設定。
固定瀏覽器設定
在瀏覽器「設定」中搜尋「安全 DNS」,並記錄目前狀態。排查時可暫時關閉,以排除瀏覽器自行解析的影響;完成後請恢復原設定。不要同時變更系統 DNS。
啟用代理
啟動 v2rayN,在系統匣選單的「系統代理」中選擇「自動設定系統代理」,並確認使用中的伺服器與路由模式。重新開啟檢測頁面,再進行一輪測試。
清除快取
在 Windows 終端機執行
ipconfig /flushdns,接著完全關閉並重新開啟瀏覽器。這個命令只會清除系統快取,無法取代清除瀏覽器本身的快取。逐項重新測試
每一輪只變更一個變數:先檢查瀏覽器解析,再檢查核心 DNS,最後檢查接管方式。至少重複測試兩輪;若結果不穩定,請保留時間與記錄,避免將舊快取誤認為新設定已生效。
命令列可協助判斷請求從何處進入。以下使用範例 SOCKS 連接埠 10808,實際連接埠請以用戶端設定為準。--socks5-hostname 會將目標網域交由 SOCKS 代理處理;這能驗證該應用程式連線如何交接網域,但無法證明整個系統都沒有 DNS 旁路。
curl.exe --proxy socks5h://127.0.0.1:10808 https://example.com/ --head
ipconfig /flushdns
Resolve-DnsName example.com -Type A
最後一個命令請在 PowerShell 中執行;它通常使用系統 DNS 路徑,不會因為設定了 HTTP 系統代理就自動交由 V2Ray 處理。結果與瀏覽器不同,正好說明兩者的請求入口不同;不能因此直接判定核心設定失效。
連接埠與協定:分辨本機代理、DNS 和 DoH
除非本機確實有 DNS 服務在對應連接埠監聽,否則不要將網路介面的 DNS 直接設為 127.0.0.1。SOCKS 監聽與 DNS 監聽使用不同協定:將查詢送到 10808 不會自動取得 DNS 回應。用戶端也可能使用混合式監聽,仍須依目前產生的設定檔判斷。
| 設定位置 | 主要作用 | 無法據此判斷 |
|---|---|---|
| 系統網路介面 DNS | 供遵循系統解析設定的程式使用 | 無法保證瀏覽器內建的 DoH 使用相同服務 |
核心 dns.servers | 指定內建 DNS 查詢所使用的上游 | 不會自動接管其他程式送出的查詢 |
routing.rules | 決定進入核心的連線使用哪個出站 | 無法改寫已在核心外完成的解析 |
| TUN DNS 接管 | 依實作方式攔截或重新導向 DNS 流量 | 無法保證所有加密 DNS 都會被識別並改寫 |
dns.servers 設定方式:明確指定解析流量的代理路由
以下是 V2Ray/Xray 格式的合併設定片段,用來示範遠端 DoH 與 DNS 流量標籤。使用前提是目前的核心支援這些欄位,而且現有 outbounds 中已有名為 proxy 的可用代理出站。若實際使用的標籤不同,必須改成對應名稱。請勿將此片段當作完整設定檔啟動。
{
"dns": {
"tag": "dns-query",
"servers": [
"https://1.1.1.1/dns-query"
],
"queryStrategy": "UseIPv4"
},
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"inboundTag": ["dns-query"],
"outboundTag": "proxy"
}
]
}
}
dns.tag:為內建 DNS 發出的查詢流量設定路由標籤。此處使用inboundTag比對dns-query,並非新增 SOCKS 入站。servers:範例採用 IP 格式的 DoH 位址,減少解析 DNS 服務網域時所需的初始查詢。仍須在目前的網路與代理路徑下,確認服務是否可連線。queryStrategy:UseIPv4會將內建 DNS 查詢限制為 IPv4,方便先排除 IPv6 路徑差異;在雙堆疊環境確認設定無誤後,可再評估使用UseIP。- 規則順序:將這條精確的 DNS 規則放在範圍較廣的直連規則之前,並保留其他現有規則。若前面的規則已經比對成功,後續的 DNS 代理規則就不會生效。
DoH 會加密用戶端與解析服務之間的查詢連線;查詢是否經過代理,仍取決於路由設定。部分核心支援名稱帶有 +local 的本機處理模式,其路由行為與一般遠端模式不同,不要只為了「更快」就直接替換本例。若需要分流解析,再新增限定網域的上游規則,並檢查回退解析是否會使用非預期的服務。
domainStrategy:分別檢查路由解析與出站解析
domainStrategy 並非全域防洩漏開關。相同的欄位名稱出現在不同物件中,控制的階段也不同。排查時必須連同 JSON 層級一起確認,不能只搜尋欄位名稱後批次取代。
| 欄位位置或值 | 作用方式 | 排查重點 |
|---|---|---|
routing.domainStrategy: AsIs | 路由階段不主動解析網域以比對 IP 規則 | 網域規則與預設出站是否完整 |
routing.domainStrategy: IPIfNonMatch | 網域未符合規則時,嘗試解析後再比對 IP | 解析請求使用哪個 DNS 上游 |
routing.domainStrategy: IPOnDemand | 遇到需要判斷 IP 的規則時才觸發解析 | IP 規則位置與額外解析量 |
freedom.settings.domainStrategy | 控制直連出站如何處理目標網域 | 實際使用系統解析或內建 DNS,取決於設定值與核心 |
AsIs 只限制路由階段,並不代表目標連線完全不會解析。若請求最後交由直連出站處理,仍須取得目標位址;若以網域形式交給代理端,通常會由遠端繼續處理。若要讓台灣本地網站直連,也應先規劃這些網站的解析方式,而非將所有本地 DNS 請求一概視為異常。
操作方式:先固定 DNS 出站,再調整比對策略
先確認帶有 dns-query 標籤的流量確實使用代理出站,再依分流需求選擇 AsIs 或其他策略。單純將 IPIfNonMatch 改為 AsIs,無法修復應用程式進入核心前就已完成的本機解析。
FakeDNS:位址映射不能取代流量接管
FakeDNS 回傳的是保留位址範圍中的映射位址,而非真實目標位址。核心會保存網域與映射位址的關聯;後續連線必須回到相同的處理流程,才能透過映射還原網域。這適用於具備 DNS 接管與連線回收能力的環境,不能只複製一個欄位就啟用。
{
"fakedns": [
{
"ipPool": "198.18.0.0/15",
"poolSize": 65535
}
],
"dns": {
"servers": ["fakedns"]
}
}
這是支援 FakeDNS 的 V2Ray/Xray 核心概念片段,不包含 DNS 入站、轉送與系統路由。若要還原映射,也須依核心支援情況,將下列嗅探設定合併至既有入站;不要為此建立一個實際流量無法命中的空入站。
{
"sniffing": {
"enabled": true,
"destOverride": ["fakedns"]
}
}
- DNS 必須進入核心:只在 JSON 中設定
"servers": ["fakedns"],不會讓 Windows 網路介面自動向它查詢。 - 映射連線必須回到處理流程:
198.18.0.0/15不是公網網站位址。若系統直接將其送往實體閘道,常見結果是網頁逾時。 - 路由必須一致:確認此位址範圍未與現有網路規劃衝突,且由目前的接管流程處理;不要將它加入直連略過清單。
- 切換後清除快取:停用 FakeDNS 或重新啟動導致映射遺失後,舊快取中的映射位址可能失效,應重新查詢並建立連線。
v2rayN 可管理不同核心;TUN 模式的 DNS 接管也可能採用另一種設定結構。請先確認實際執行的核心,再決定是否使用上述 V2Ray/Xray 設定方式。其他核心的 TUN DNS 頁面不能直接貼上這段 JSON。
v2rayN 設定位置與常見錯誤
桌面版先檢查「設定」→「參數設定」中的本機監聽連接埠,再開啟「設定」→「DNS 設定」,檢查目前核心對應的 DNS 項目。部分版本會將 DNS 選項放在參數設定中,欄位也可能因核心不同而異。儲存後重新啟動服務,並查看執行記錄,確認實際使用的核心與設定載入結果。更新用戶端、更新訂閱或切換設定檔後,都應再次確認產生的設定檔是否保留變更。
排查系統代理時,請使用系統匣選單中的「系統代理」;排查 DNS 接管時,則檢查主畫面的「TUN 模式」及其設定,兩者不是同一個開關。TUN 可能需要提升權限,也可能與現有虛擬網路介面衝突,變更前請記錄原本狀態。比較結果時,不要同時啟用多套流量接管程式。
錯誤:failed to find an available destination
原因:可能是節點網域解析失敗,也可能是所有連線候選位址都無法使用,不能只憑這一行就判定 DNS 洩漏。解決方式:查看前後的記錄,先確認節點位址能否解析,再檢查 DNS 出站依賴與節點連線狀態。
錯誤:lookup example.com: no such host
原因:目前的解析路徑未取得該網域的有效記錄,記錄中實際出現的網域也可能不同。解決方式:檢查網域拼寫、上游回應與分流限制,並使用另一個已知可解析的網域進行對照;不要先變更監聽連接埠。
錯誤:context deadline exceeded
原因:操作超過等待時間,可能發生在 DNS 查詢階段,也可能發生在後續連線。解決方式:根據記錄中的目標位址判斷逾時階段;若目標是 DoH 服務,請確認流量是否使用預期出站,以及代理是否可用。
Android 端也須區分核心:v2rayNG 使用 Xray,v2flyNG 使用 V2Fly。系統 VPN 接管、應用程式略過清單與 Android「私人 DNS」都可能改變解析路徑,不能直接套用桌面系統代理的判斷。相同節點在兩端結果不同時,先比較請求入口與解析器,不要直接認定節點有問題。
- 確認修復完成:重複檢測時,受測應用程式只顯示預期的解析器;記錄中的 DNS 流量也使用預期出站。
- 確認分流正常:分別測試直連網域與代理網域,檢查解析結果,也確認對應網頁能否建立連線。
- 系統層級驗證:若要涵蓋更多應用程式,還須另外檢查 UDP/TCP 53、瀏覽器加密 DNS 與 IPv6 路徑;單一網頁檢測無法涵蓋所有處理程序。
- 還原方式:先保存變更前的設定,每次只調整一個層級;發生異常時,還原該項設定、重新啟動服務並清除快取,避免在多項錯誤設定上繼續疊加。