FakeDNS 原理解析:假位址映射如何降低 DNS 解析延遲

解析 FakeDNS 回傳保留網段假 IP、連線時還原網域名稱的完整流程,說明適用與不適用情境,以及搭配 TUN 模式與分流規則時的注意事項。

本文速覽

本文適合已在使用 v2rayN、v2rayNG 或 v2flyNG,並想了解 TUN 接管與網域分流細節的使用者。內容將說明 FakeDNS 的映射表、保留位址池、網域還原、規則比對順序與故障判斷;讀完即可分辨「DNS 變快」與「連線變快」,並判斷目前網路是否適合啟用 FakeDNS。

FakeDNS 流程:先回傳假 IP,再還原原始網域

一般 DNS 流程會先將網域名稱傳送給解析伺服器,取得真實的 A 或 AAAA 記錄後,應用程式才連線至回傳的位址。這個過程至少包含一次 DNS 往返;若系統 DNS 回應緩慢、解析請求走錯出口,或本機快取未命中,建立連線就會卡在解析階段。

FakeDNS 改變的是本機解析路徑。應用程式查詢網域名稱時,核心不必立即向公共 DNS 取得真實位址,而是從預設位址池分配一個假 IP,同時記錄「網域名稱—假 IP」的對應關係。應用程式接著向假 IP 發起連線,TUN 入站擷取這條連線,核心依據映射表找回原始網域,再按照網域規則選擇代理、直連或封鎖出口。

應用程式查詢網域名稱 分配假位址 TUN 擷取連線 還原原始網域 依規則比對出站

常見的 IPv4 位址池是 198.18.0.0/15。這段位址用於網路設備基準測試,不屬於可在公網路由的位址,因此適合在本機內部作為映射標記。假 IP 不是目標伺服器位址,也不會作為最終目的地直接傳送至代理節點;它的作用類似本機索引,真正的代理請求仍以還原後的網域名稱為目標。

198.18/15
常用 IPv4 假位址池
65,535
常見映射池容量
1.2 ms
本機冷查詢中位數
43 ms
同網路遠端解析中位數

以上延遲數據來自同一台裝置連續執行 100 次冷查詢的範例:本機 FakeDNS 回應中位數約為 1.2 毫秒,遠端 DNS 往返中位數約為 43 毫秒。這只能說明首次解析回應可能更快,不代表網頁總載入時間一定減少 41.8 毫秒;TLS 交握、節點往返、封包遺失與伺服器回應仍會決定後續速度。

映射表、流量嗅探與出站如何協同運作

FakeDNS 能否正常運作,取決於三個環節是否同時成立:核心收到 DNS 查詢、假位址連線由對應入站擷取,以及在出站前能透過映射記錄還原網域。只啟用位址池,卻未讓 TUN 流量進入核心,就會出現應用程式取得 198.18.x.x 後無法連線的情況。

核心收到指向假 IP 的連線後,會檢查目標是否屬於 FakeDNS 位址池。若映射表中存在對應記錄,例如 198.18.0.27 對應 example.net,就能將目標還原為網域名稱。接著,路由器按照設定順序檢查網域規則、IP 規則、連接埠規則與入站標籤,最後選擇代理或直連出站。

TUN + FakeDNS 設定重點

IPv4 位址池
198.18.0.0/15
常見池容量
65535
目標還原
fakedns
路由依據
還原後的網域名稱
適用入口
TUN 入站

位址池、DNS 回應與目標還原必須來自同一套核心設定。

一般系統代理設定重點

HTTP 連接埠
10809
SOCKS 連接埠
10808
目標來源
應用程式提交的網域名稱
DNS 接管
通常不完整
適用入口
明確設定代理的應用程式

應用程式已將網域名稱交給代理時,FakeDNS 帶來的效益通常有限。

這裡容易混淆「協定嗅探」與「FakeDNS 還原」。HTTP、TLS 或 QUIC 嗅探會嘗試從流量內容辨識網域名稱;FakeDNS 還原則是直接讀取先前建立的映射。兩者可以並存,但映射還原不依賴每條連線都暴露可辨識的主機名稱,因此對不易從負載中擷取網域名稱的連線更穩定。

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

這段設定只展示位址池與 DNS 伺服器之間的概念關係,無法脫離入站、路由與出站單獨使用。由用戶端產生實際設定時,還要確認 TUN 入站已啟用目標還原,且本地網路沒有將同一網段用於實驗裝置或企業測試環境。

FakeDNS 對延遲與分流的實際影響

FakeDNS 最直接的效益,是將「應用程式等待真實 DNS 回應」改為「應用程式立即取得本機假位址」。當遠端 DNS 往返時間較長、首個封包容易逾時,或多個應用程式同時發起冷查詢時,差異會較明顯。已命中系統快取的網域不需再次承擔完整解析延遲,效益則會縮小。

第二項效益是保留網域資訊。一般解析後,應用程式只連線至真實 IP,進入 TUN 的資訊可能只剩目標位址;若同一個 IP 承載多個網域,單靠 IP 規則很難精確區分。FakeDNS 在連線階段還原原始網域後,像 domaindomainSuffixgeosite 這類規則就能在選擇出站前參與比對。

觀察項目 一般遠端 DNS FakeDNS 判斷方式
首次回傳位址 真實 A/AAAA 記錄 保留網段假 IP 查看應用程式端的解析結果
網域資訊 解析後可能只剩 IP 由映射表還原 查看路由命中記錄
冷查詢延遲 受 DNS 往返時間影響 通常為本機回應 連續測試並比較中位數
最終連線目標 真實 IP 或遠端解析結果 還原後的網域名稱 查看代理出站記錄

第三項影響是讓解析出口更加一致。若某個網域應該走代理,系統卻先透過本地網路查詢 DNS,解析路徑與流量路徑就可能分離。FakeDNS 讓本機先完成假位址分配,真實解析可延後至代理出站端處理,降低本地 DNS 對代理網域解析結果的干擾。

結論:先確認瓶頸是否在 DNS

若核心記錄顯示從查詢到回應已低於 5 毫秒,而連線階段仍耗時超過 300 毫秒,繼續調整 FakeDNS 也無法解決主要問題;應改為檢查節點往返時間、封包遺失、TLS 交握與路由繞行。

FakeDNS 也會改變故障排查方式。看到 198.18.x.x 不應立即判定為解析錯誤,應先檢查該位址是否屬於設定中的池、是否存在映射記錄,以及連線是否已進入 TUN。只有當應用程式收到假位址,而核心無法還原網域名稱時,才表示鏈路中途發生中斷。

搭配 TUN 模式與路由規則

TUN 模式透過虛擬網卡接管未主動使用系統代理之程序的流量,因此是 FakeDNS 最常見的搭配入口。在 v2rayN 中,可先進入「設定」→「參數設定」確認本機監聽連接埠,再啟用 TUN 模式;不同版本的 TUN 選項位置可能有所調整,最後應以狀態列顯示與核心啟動記錄為準。

Android 端的 v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心。啟用裝置層級的流量接管後,應檢查用戶端設定中的本地 DNS、網域策略與路由模式是否來自同一套設定方案。不要同時讓其他本地網路工具佔用 VPN 介面,否則 DNS 查詢可能繞過目前的核心。

  1. 先驗證 TUN 接管。關閉應用程式本身的 HTTP 或 SOCKS 代理設定,啟動用戶端後存取測試網域,確認連線仍出現在核心記錄中。
  2. 再觀察假位址。對未快取的網域執行查詢,檢查是否回傳設定池中的 198.18.x.x 位址。
  3. 確認網域還原。在路由記錄中尋找原始網域名稱,而不只是查看假 IP;若只記錄假 IP,應檢查目標還原設定。
  4. 驗證規則命中。分別測試一個代理網域與一個直連網域,確認兩者都連至預期的出站標籤。
  5. 最後測試回退。關閉 FakeDNS 後恢復一般 DNS,確保設定失敗時仍有明確可用的回退路徑。

代理網域規則

比對對象
還原後的網域名稱
規則類型
domainSuffix
預期出站
proxy
驗證位置
路由命中記錄

網域規則應排在可能覆蓋它的寬泛 IP 規則之前。

區域網路與直連規則

保留目標
私有位址網段
預期出站
direct
DNS 方式
本機或指定伺服器
優先檢查
位址池衝突

內部網域依賴區域網路 DNS 時,不應一律交由 FakeDNS 處理。

規則順序尤其重要。假位址只是暫時目標,如果寬泛的 IP 規則先匹配 198.18.0.0/15 並直接放行,連線可能在網域還原前被送往錯誤出口。較穩妥的做法是讓 TUN 入站完成 FakeDNS 還原,再依網域規則分流,同時明確排除區域網路與內部服務。

適合與不適合啟用的情境

適合啟用的典型環境包括:TUN 已穩定接管、遠端 DNS 往返時間較長、網域分流規則較多,且應用程式流量經常只以 IP 形式進入核心。此時 FakeDNS 不僅能縮短冷查詢等待,也能讓路由器重新取得原始網域,效益不只是單純減少幾十毫秒。

如果只使用瀏覽器明確連線至本機 HTTP 或 SOCKS 連接埠,瀏覽器通常會直接將網域名稱交給代理。核心已取得網域名稱時,FakeDNS 對分流準確度的提升很小。這類設定應優先確保 1080810809 等監聽連接埠沒有衝突,並檢查系統代理是否指向正確連接埠。

  • 建議啟用:TUN 接管全域流量,且核心記錄中經常只能看到目標 IP。
  • 建議啟用:遠端 DNS 冷查詢長期超過 50 毫秒,首次開啟應用程式時有明顯等待。
  • 謹慎啟用:單位內部網域必須由區域網路 DNS 解析,且存在分區網域解析結果。
  • 謹慎啟用:實際網路已使用 198.18.0.0/15 或自訂假位址池。
  • 效益有限:應用程式已透過明確代理提交網域名稱,本地 DNS 並非目前的瓶頸。

查詢結果變成 198.18.x.x,是不是 DNS 設定錯了?

先確認 FakeDNS 是否已啟用。啟用後回傳保留網段位址屬於預期行為;接著查看核心記錄,確認連線進入 TUN 後能還原為原始網域並命中路由規則。

啟用後網頁反而打不開,先檢查哪裡?

先關閉 FakeDNS,確認一般 DNS 是否可用,再檢查 TUN 入站、目標還原與位址池是否同時生效。若記錄中只有假 IP 而沒有網域名稱,通常表示入站未正確讀取映射。

FakeDNS 能讓所有連線都明顯變快嗎?

不能。它主要是減少冷查詢等待。若 DNS 原本只需 3 至 5 毫秒,而節點往返時間達到 180 毫秒,整體體驗仍由節點鏈路決定,應先比較連線階段與解析階段的耗時。

區域網路裝置名稱解析失敗怎麼處理?

將內部網域後綴交由區域網路 DNS 處理,並讓私有位址網段保持直連。若內部網路使用了 FakeDNS 位址池,還需更換位址池,或在該網路設定下關閉 FakeDNS。

訂閱更新也需要經過 FakeDNS 嗎?

訂閱更新與節點流量是兩個可以分開處理的請求。先確認訂閱網址能透過目前的代理或直連策略存取,不要直接將訂閱失敗歸咎於 FakeDNS;應查看更新請求使用的出站與 DNS 記錄。

依據記錄完成驗證與故障定位

驗證 FakeDNS 不應只看網頁能否開啟。完整檢查需涵蓋 DNS 回應、TUN 擷取、網域還原、規則命中與代理出站五個階段。任何一個階段缺失,都可能造成「偶爾可用」或「部分應用程式失效」。

建議選取兩個先前未存取過的網域:一個應走代理,另一個應直連。清除用戶端內部 DNS 快取後分別發起查詢,記錄回傳位址與時間;接著立即建立連線,在記錄中確認原始網域、入站標籤與出站標籤。測試期間不要頻繁切換節點,以免將節點差異誤判為 DNS 差異。

  1. 記錄用戶端目前的設定,確認本機 SOCKS 連接埠為 10808、HTTP 連接埠為 10809,或記下實際的自訂值。
  2. 啟動 TUN 後檢查核心記錄,確認虛擬網卡建立成功,且沒有新增路由失敗或介面遭佔用的提示。
  3. 查詢測試網域,確認回應位址位於設定的 FakeDNS 池內,回應時間通常應低於遠端 DNS 往返時間。
  4. 發起連線並在記錄中搜尋原始網域名稱,確認最終目標不是始終以 198.18.x.x 呈現。
  5. 確認代理網域命中 proxy,直連網域命中 direct,避免被更前面的寬泛規則覆蓋。
  6. 連續測試 20 次,分別記錄中位數與失敗次數,不要以單次最快結果下結論。

結論:看得到假位址,也必須能追蹤原始網域

應用程式端看到保留網段位址,只能證明 FakeDNS 已回傳結果;只有在記錄中能繼續看到原始網域、正確出站與成功連線,才代表「分配—擷取—還原—分流」整條鏈路已閉合。

若測試失敗,可依反向順序回退:先暫時停用網域分流規則,確認基礎代理出站可達;再關閉 FakeDNS,改用一般 DNS 檢查解析;最後停用 TUN,使用明確的系統代理驗證本機監聽連接埠。每次只變更一個變數,才能判定故障屬於位址池、DNS、TUN、路由或節點鏈路。

FakeDNS 的核心價值不是製造看似特殊的解析結果,而是在接管全域流量時,仍能穩定保留網域層級資訊。設定正確時,假位址只會短暫存在於本機,路由判斷使用還原後的網域名稱,代理出站則依照 VMess、VLESS 與訂閱節點的實際設定建立連線。是否啟用,應由 DNS 延遲、TUN 接管方式、內部網路結構與分流需求共同決定。

下載用戶端