本文重點

本文適合已匯入訂閱、能正常瀏覽網站,卻發現 DNS 檢測結果異常的使用者。先分辨正常直連解析與意外繞行,再透過系統查詢、核心日誌和網卡封包擷取交叉驗證;接著設定遠端 DNS 與直連 DNS 的分工,最後確認 TUN 接管範圍及 FakeDNS 的網域還原流程。範例是核心設定片段,不能直接取代完整用戶端設定檔。

1. 什麼是 DNS 洩漏:解析出口與連線出口不一致

DNS 負責將網域名稱轉換為 IP 位址。代理連線已建立,不代表先前的網域查詢也經過代理。例如,應用程式先向家用路由器查詢目標 IP,再將連線交給本機代理連接埠;網頁看起來是透過代理瀏覽,但本機解析器仍可能得知造訪過哪些網域。判斷是否洩漏,應確認查詢是否違反預先設定的分流規則,而不是看到本機解析器就立刻判定有問題。

應用程式查詢網域 比對解析規則 選擇查詢出口 傳回目標位址 比對連線規則

若中國大陸網站依規則直連,使用直連 DNS 通常合乎預期;若某個網域應透過代理連線,查詢卻送往本機網路的解析器,才是本文要排除的繞行。VMess、VLESS 負責代理傳輸,不會自動接管系統中的所有 DNS 查詢。訂閱提供節點設定,也不代表已涵蓋完整的本機 DNS 規則。

運作方式容易忽略的解析路徑檢查重點
系統代理不使用系統代理的程式仍會使用系統 DNS應用程式是否先在本機解析,或使用自訂 DNS
SOCKS 代理應用程式只提交 IP,未將網域名稱交給代理應用程式是否啟用代理端網域解析
TUN 接管確認排除路由、IPv6 或自訂加密 DNS 未造成繞行確認虛擬網卡、DNS 劫持與出口規則是否同時生效

2. 如何檢測 DNS 洩漏:建立基準,再檢查實體網卡

瀏覽器檢測頁面顯示的是它觀察到的遞迴解析器出口,不一定是用戶端直接連線的伺服器。公用 DNS 可能使用不同地區的出口;頁面顯示的城市也可能來自過時的 IP 位址資料庫。因此,不要只憑「解析器所在城市與節點所在城市不同」就判定有問題。還需要確認查詢經過哪張網卡,以及是否符合目前的規則。

53
傳統 DNS 使用的 UDP/TCP 連接埠
443
DoH 常用的 HTTPS 連接埠
853
DoT 常用的 TLS 連接埠
  1. 記錄基準狀態。關閉 TUN 和系統代理,記下系統 DNS 位址、瀏覽器安全 DNS 狀態,以及檢測頁面列出的解析器。測試期間請勿造訪敏感網站。
  2. 固定測試條件。使用同一個節點和同一套路由,再測試同一個頁面。不要同時切換節點和更改瀏覽器 DNS,否則無法判斷是哪項設定影響結果。
  3. 清除快取。在 Windows 終端機執行 ipconfig /flushdns,關閉後重新開啟瀏覽器。核心內建的 DNS 快取通常也需要重新啟動核心才能清除。
  4. 檢查系統查詢。執行下方指令,記錄預設解析器與查詢結果。此結果用來觀察系統的解析路徑,不代表瀏覽器一定使用相同路徑。
  5. 檢查實體網卡。在封包擷取工具中選取目前使用的乙太網路或無線網卡,查看目標查詢是否直接送往本機解析器;虛擬網卡出現 DNS 封包,本身不代表封包已離開裝置。
ipconfig /all
ipconfig /flushdns
nslookup example.com

# 封包擷取顯示篩選器:檢查傳統 DNS 與常見 DoT 連線
udp.port == 53 || tcp.port == 53 || tcp.port == 853

example.com 是用來示範查詢方法的範例網域,不是 DNS 洩漏檢測服務。正式複測時,請選擇一個依照你的規則明確走代理的網域。瀏覽器內建的 DoH 使用 HTTPS,無法只靠連接埠 53 的篩選器識別;請一併檢查安全 DNS 設定、連線目的位址與用戶端路由日誌。

結論:確認「目標網域是否繞行」,不要以解析器數量判斷

先選一個明確走代理的測試網域。如果實體網卡上仍出現傳送至本機解析器的明文查詢,就逐項檢查系統 DNS、應用程式 DNS 和 TUN 排除規則;如果看到多個公用解析器出口,先確認它們是否來自同一項服務。

3. v2rayN 遠端 DNS 與直連 DNS:設定解析器,也要設定出口

在 v2rayN 中先開啟「設定」→「參數設定」,確認目前使用的核心與監聽設定;再開啟「設定」→「DNS 設定」,檢查對應核心的 DNS 設定。不同版本的選單位置和欄位名稱可能不同,請以目前介面及產生的設定為準。尤其要分清一般代理使用的核心與 TUN 使用的核心,勿將一份 DNS JSON 貼到另一個核心的設定區。

遠端 DNS 用於需要透過代理連線的網域,直連 DNS 則用於明確設定為直連的網域。設定遠端解析器只是第一步:若連線至解析器的請求仍走直連,即使使用加密查詢,也無法達成「解析流量走代理出口」的目標。DoH 保護的是裝置與解析器之間的連線,不會自動替你選擇代理出站。

Xray DNS 設定片段:直連網域個別比對,其餘使用遠端查詢

以下使用 Xray 設定格式示範。需要有 geosite.dat 才能使用 geosite:cn 分類;若缺少規則資料,請先修復資料檔,或改用明確列出的自訂網域清單。範例位址僅用來說明設定分工,是否可連線仍須在目前的網路環境中確認。disableFallbackIfMatch 可避免已符合的網域群組在查詢失敗後改用其他解析器,但無法限制瀏覽器或應用程式自行發出的查詢。

{
  "dns": {
    "queryStrategy": "UseIP",
    "disableFallbackIfMatch": true,
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"],
        "skipFallback": true
      },
      {
        "address": "https://1.1.1.1/dns-query"
      }
    ]
  }
}

還要將下列規則合併至現有的 routing.rules,不要取代整套路由。此處假設設定中確實有名為 proxy 和 direct 的出站;若用戶端產生的標籤不同,請改用實際標籤。範例依解析器 IP 選擇出口,可能影響傳送至這些 IP 的其他連線;正式設定前應配合現有規則一併評估。

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["1.1.1.1/32"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "ip": ["223.5.5.5/32"],
        "outboundTag": "direct"
      }
    ]
  }
}

4. TUN 模式防 DNS 洩漏:接管流量後,也要處理 DNS 與 IPv6

TUN 會將系統流量導入虛擬網卡,適合處理不使用系統代理的應用程式。但它不是「所有請求一律走代理」的開關:流量最後走直連或代理,仍由路由規則決定。DNS 是否會被攔截並送入受控解析流程,也取決於 TUN 設定。請先儲存目前參數,再於 v2rayN 主畫面啟用「啟用 TUN」,依照系統提示授予權限,並檢查啟動日誌。

  1. 確認虛擬網卡已建立。若核心啟動失敗,請先排除權限、驅動程式或設定錯誤,不要繼續調整 DNS 來掩蓋啟動問題。
  2. 確認 DNS 已接管。檢查 TUN 設定是否包含適用的 DNS 劫持或重新導向規則,再透過系統查詢與封包擷取驗證。只修改網卡 DNS 位址,無法控制應用程式中寫死的解析器。
  3. 檢查路由排除項目。可依需求讓區域網路流量直連,但請確認排除範圍沒有一併放行應走代理的 DNS 查詢。遠端解析器位址也不應被廣泛的直連規則提前比對。
  4. 同時檢查 IPv6。IPv4 已進入 TUN,不代表 IPv6 也已接管。請檢查 IPv6 預設路由及 DNS 伺服器;若不需要 IPv6,可先確認影響範圍,再暫時關閉進行比較,別將關閉 IPv6 當作通用修復方式。
  5. 驗證重新連線與休眠喚醒。切換無線網路、從休眠狀態恢復後,請再次執行查詢。網卡 DNS、系統路由和虛擬網卡狀態都可能已經改變。

v2rayN 的 TUN 功能可能使用 sing-box 核心,其 DNS 與 FakeIP 設定結構不同於 Xray 的 FakeDNS,應透過對應設定或核心格式進行設定。v2rayNG 使用 Xray,v2flyNG 使用 V2Fly,但 Android VPN 接管、應用程式排除項目及 DNS 行為仍受用戶端設定影響。桌面版 JSON 不能直接照抄到 Android 介面。

結論:先確認流量接管範圍,再增加解析功能

先確認目標應用程式的 IPv4、IPv6 和 DNS 查詢都進入預期的處理流程,再考慮使用 FakeDNS。若只有瀏覽器正常,其他程式仍然繞行,請優先檢查應用程式排除項目、寫死的解析器與代理端解析選項,而不是反覆更換節點。

5. 如何設定 FakeDNS:假位址必須在同一條流程中還原為網域

FakeDNS 不會直接傳回網站的真實 IP,而是從位址池傳回一個對應位址。應用程式連線至該位址時,核心會透過映射還原原始網域,再執行網域路由與代理連線。這能減少事先取得真實 IP 的需求,但它不是加密 DNS,也無法單獨保證不發生洩漏。節點網域的引導解析、直連目標,以及不受控應用程式發出的 DNS 查詢,仍須另外處理。

查詢目標網域 指派映射位址 應用程式發起連線 核心還原網域 比對代理規則

以下是支援此功能的 Xray 核心示意片段。198.18.0.0/15 是此類映射常用的基準測試位址範圍,不是網站的真實位址;使用前請確認它不會與區域網路、其他 VPN 或現有路由衝突。poolSize 表示映射池容量,不代表網速或可同時處理的連線數。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}

接收後續連線的相關入站也必須能還原 FakeDNS 網域,例如為該入站設定下方的嗅探欄位。請將其合併至現有入站物件,不可單獨作為入站使用。這只示範「產生映射與還原映射」,尚未包含 DNS 流量接入、節點引導解析及直連網域的例外規則。

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"],
    "metadataOnly": true
  }
}

6. 常見 DNS 錯誤:先找出問題發生在哪一層

以下列出日誌中可能出現的錯誤片段。完整前綴與文字會隨核心版本而異,單一錯誤只能提供排查方向。複測時一次只變更一項設定,並記錄錯誤發生於節點連線、遠端解析器連線,還是目標網站連線。

錯誤:failed to lookup ip for domain

原因與解決方式:網域查詢未取得可用位址——先確認解析失敗的是節點位址還是造訪目標,再檢查對應 DNS 是否可連線、網域比對規則及 IPv4/IPv6 查詢設定。

錯誤:context deadline exceeded

原因與解決方式:操作未能在期限內完成,這不一定是 DNS 錯誤——查看前後日誌,確認是否發生於 DNS 查詢,再檢查解析器出口、連線逾時與引導解析循環。

錯誤:network is unreachable

原因與解決方式:目前網路沒有可通往目的位址的路徑——檢查錯誤中的 IP 位址類型、TUN 路由與出站介面,尤其確認是否只有 IPv6 查詢結果,但網路沒有 IPv6 路徑。

錯誤:no such host

原因與解決方式:目前使用的解析路徑無法解析主機名稱——檢查網域拼字、系統解析器與節點引導路徑,不要只憑這段訊息就認定遠端 DNS 遭到封鎖。

7. 複測問答:瀏覽器正常,不代表整台裝置都正常

檢測頁面仍顯示本機解析器,就一定是 DNS 洩漏嗎?

不一定。先確認這次測試的網域是否依規則直連,並檢查瀏覽器的安全 DNS 設定。若該網域明確應走代理,再到實體網卡檢查是否出現對應的明文查詢;依規劃直連解析的中國大陸網域,不應視為同一種故障。

啟用 DoH 後,為什麼解析出口還是本機網路?

DoH 只會改變查詢的傳輸方式。請檢查連往遠端解析器的 HTTPS 連線是否使用代理出站、是否由瀏覽器自行建立,以及查詢方式是否繞過核心路由。先修正出口,再重新測試。

啟用 TUN 後,訂閱更新反而失敗,該怎麼辦?

檢查訂閱網址與節點位址的引導解析。先暫時恢復先前可用的 DNS 與路由,確認訂閱能順利更新,再逐項啟用新設定;不要讓訂閱更新依賴尚未建立、且建立時也需要相同解析路徑的代理連線。

啟用 FakeDNS 後,部分軟體一直逾時?

先重新啟動核心並執行 ipconfig /flushdns,再重新啟動目標軟體。檢查它連線的映射位址是否進入具備還原能力的入站;若仍不相容,請將該應用程式或網域改用真實解析,再確認解析出口。

如何確認修復後不會在切換網路時再次失效?

分別在目前網路、切換網路後,以及從休眠狀態恢復後重新測試。每次記錄系統 DNS、TUN 狀態,以及一個代理網域和一個直連網域的結果,同時檢查 IPv6;單次瀏覽器測試只能證明當下那條請求路徑正常。

最終驗收應形成完整流程:代理網域使用受控解析路徑,遠端解析器連線走預期的出站,直連網域依規則解析,節點位址可獨立完成引導,TUN 與 IPv6 的接管範圍也清楚明確。若要檢查基本設定,請參閱訂閱匯入指南、DNS 設定文件和TUN 模式說明。