V2Ray FakeDNS 原理與虛擬 IP 對應機制解析|適用情境

了解 FakeDNS 如何以保留網段的虛擬 IP 取代真實解析結果、核心如何還原網域,以及適用情境、限制與常見副作用。

本文重點

FakeDNS 要解決的是透明接管連線時「只能看到 IP,無法取得原始網域」的問題。它先提供虛擬位址給應用程式,連線進入核心後再查表還原網域。本文依序說明解析、對應、接管、還原與出站的運作條件,適合正在設定 TUN、網域分流,或排查 198.18 網段連線失敗的使用者。讀完即可判斷是否需要啟用,以及故障時該檢查哪個環節。

FakeDNS 與一般 DNS 解析的差異

一般 DNS 的 A、AAAA 查詢分別用來取得 IPv4、IPv6 位址。應用程式取得結果後,通常會直接連線至該位址。進入透明代理時,原始連線可能只剩下「目標 IP+連接埠」,但網域規則需要的是應用程式最初查詢的名稱。FakeDNS 改變了流程前半段:它不會立即回傳伺服器的真實位址,而是分配一個只在受控連線路徑中有意義的虛擬 IP。

例如,應用程式查詢 www.example.com,FakeDNS 分配 198.18.0.2 並記錄兩者的對應關係。接著應用程式連線至 198.18.0.2:443,接管連線的核心查到對應資料後,就能將目標還原為 www.example.com:443。這裡的位址僅供說明機制,並非可直接連線的測試節點,也不是任何用戶端固定分配的第一個位址。

比較項目一般 DNSFakeDNS
回傳結果網域對應的真實位址由本機位址池分配的虛擬位址
連線條件所選網路可連線至真實位址虛擬位址的流量必須正確接管
網域資訊保留透明入口不一定能取得原始網域透過對應表還原查詢時的網域
最終解析通常在連線前已完成可能延後至本機直連出站或交由遠端代理處理

虛擬 IP 對應的完整流程

查詢網域 分配虛擬位址 應用程式發起連線 透明入口接管 查表還原網域 選擇路由並出站

這條流程的關鍵不在於「DNS 回傳了什麼」,而在於回傳結果能否與後續連線重新連結。負責回應 DNS 的對應表,必須與處理目標連線的核心共用對應狀態,或透過支援此機制的整合元件銜接。若某個執行個體產生虛擬位址,卻把連線交給另一個沒有對應資料的執行個體,後者看到的只會是無法直接連線的特殊用途位址。

  1. 查詢進入受控 DNS:應用程式的 A 或 AAAA 請求必須進入已設定的解析路徑。只接管傳統 DNS 的 UDP 53 連接埠,不代表也涵蓋應用程式內建的加密 DNS。
  2. 寫入對應表:FakeDNS 為網域分配虛擬位址。位址池容量有限,部分實作可能在容量吃緊時回收舊的對應資料;位址分配順序不應視為固定介面。
  3. 接管虛擬位址連線:TUN 或透明代理規則會將連線送至支援還原的入口。FakeDNS 本身不會建立 TUN 網卡,也不會自動設定完整的系統路由。
  4. 查表並還原目標:核心透過虛擬 IP 找回網域,供網域規則及後續出站使用。是否會改寫連線目標,也會受入口的嗅探等設定影響。
  5. 完成實際連線:選擇代理出站時,支援網域目標的協定可以將網域交由遠端處理;選擇直連時,通常仍須透過真實 DNS 取得可連線的位址。

因此,FakeDNS 並非「不再需要 DNS」,而是延後真實解析並保留網域關聯。它也不能取代 VMess、VLESS 等代理協定,不會修改節點驗證資料,更無法修復伺服器無法連線、傳輸路徑錯誤或 TLS 設定不符等問題。

設定欄位:位址池、DNS 與入口還原

「V2Ray FakeDNS」常被用來泛指這類機制,但 V2Ray 與 Xray 的設定功能、欄位及用戶端整合方式各有不同,請分別確認。以下以支援這些欄位的 Xray-core JSON 設定為例,展示明確填入的範例值,不表示這些是所有版本的預設值。v2rayN、v2rayNG 與 v2flyNG 的介面和產生設定檔的方式不同,不可跨核心直接套用。

DNS 與位址池

位址池欄位
fakedns
範例網段
198.18.0.0/15
範例容量
poolSize: 65535
DNS 伺服器項目
"fakedns"

這是明確指定參數的範例;位址池項目的容量不等於該網段的總位址數量。

接收連線的入口

啟用嗅探
enabled: true
還原類型
destOverride: ["fakedns"]
僅供路由使用
routeOnly: false
必要條件
虛擬位址連線確實進入此入口

此處展示的是需要還原連線目標的組合;不要只看選項名稱就認定接管已成功。

以下是根物件中的 DNS 與位址池片段,並非可獨立執行的完整設定。內容未定義監聽入口、出站與系統路由,且只展示 IPv4 位址池;不能據此認定 AAAA 查詢也會以相同方式處理。實際部署時,請參照目前核心的文件設定 IPv6 行為與真實 DNS 備援路徑。

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

接收虛擬位址連線的對應入站,也需要設定還原機制。以下僅展示該入站中的 sniffing 欄位,不會自動補齊其他入站參數。routeOnly 通常表示嗅探結果只用於路由、不改寫目標;本例明確設為 false,避免將尚未還原的虛擬目標繼續交給出站。

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

適用與不適用的情境

FakeDNS 最適合已採用 TUN 或透明代理,且需要依網域分流的環境。透明入口從網路層接收連線,不一定能從連線本身取得網域;透過對應表,網域規則便不必完全依賴 HTTP Host 或 TLS 握手資訊。若希望將真實解析延後至代理出口處理,也可考慮使用;但能否達成仍取決於出站、路由與真實 DNS 的組合。

使用情境建議做法需確認事項
由 TUN 接管並依網域分流可考慮啟用查詢與連線是否進入同一套對應流程
明確代理已傳遞網域通常不必另外啟用應用程式是否已將網域交給 HTTP 或 SOCKS 代理
辦公室內網與本地域名優先設定例外解析內部 DNS、直連路徑與網段是否衝突
應用程式會檢查真實解析位址先進行相容性測試應用程式是否拒絕特殊用途位址,或依 IP 判斷位置
應用程式直接連線至固定 IPFakeDNS 無法補回網域沒有 DNS 查詢,就不會有相應的網域對應資料

明確代理與透明代理應分開判斷:支援網域目標的 SOCKS 請求或 HTTP CONNECT 請求可以直接傳送網域,不一定需要 FakeDNS;但如果應用程式先在本機解析,再向代理提交 IP,網域仍可能遺失。是否需要啟用,應以實際請求形式為準,不要只看到「系統代理」四個字就直接判斷。

結論:先確認入口是否已收到網域

在記錄檔中檢查一筆目標連線:若入口已收到正確網域,先維持現有解析方式;若只看到目標 IP,且需要套用網域規則,再驗證 FakeDNS 的接管與還原流程,避免為了解決不存在的問題而增加狀態依賴。

常見副作用:快取、內網與解析繞道

FakeDNS 會建立一份具有存續期限的本機對應表,但應用程式與系統可能仍會快取舊的 DNS 回應。核心重新啟動後,若原有對應已消失,應用程式仍以舊的虛擬 IP 發起連線,就可能出現「剛啟動時正常,切換模式後卻無法連線」的狀況。此時反覆更換節點通常無效,因為問題發生在選擇出站之前。

FakeDNS 並不等同於「不會發生 DNS 洩漏」。本機直連出站仍可能觸發真實解析,應用程式也可能繞過受控 DNS。若要確認解析路徑,應分別觀察查詢送往何處、連線使用哪個出站,不要只因某次解析回傳虛擬位址就下結論。

依序排查虛擬 IP 連線失敗

建議先固定一個網域、一個應用程式和一個節點,記錄切換前後的狀況。以下以 www.example.com 為查詢範例;命令用來查看本機目前的解析路徑,但不保證查詢一定會進入 FakeDNS。Windows、macOS 與 Linux 的解析工具,也可能採用與瀏覽器不同的解析路徑。

nslookup -type=A www.example.com
nslookup -type=AAAA www.example.com
  1. 先確認解析是否進入虛擬位址池:若 A 記錄結果是設定的位址池中的位址,表示該次查詢取得了虛擬結果;若仍是實際 IP,請確認查詢是否繞過受控 DNS,以及目標網域是否符合真實解析例外規則。
  2. 再確認連線是否進入核心:應用程式建立連線時,請查看存取記錄。若解析結果是虛擬位址,但核心沒有相應的連線記錄,應優先檢查 TUN 路由與入口接管,不要先修改節點的 VMess 或 VLESS 參數。
  3. 確認對應資料能否還原:若記錄中始終只有虛擬 IP,請確認接收連線的入站是否啟用了相符的還原設定,以及是否曾重新啟動核心、更換位址池或切換多個執行個體。記錄的顯示格式會因版本而異,不要只憑單行內容就判定失敗。
  4. 最後檢查路由與出站:若網域已成功還原但仍無法連線,再確認網域規則選中了哪個出站。直連需要可用的真實解析路徑;代理出站則需繼續檢查節點連線、伺服器端解析與傳輸設定。

Windows 可使用下列命令清除系統 DNS 快取,但不會清除所有應用程式的快取。清除前請先確認目前的接管模式正確,否則應用程式只會再次取得無法使用的結果。若瀏覽器或常駐背景程式仍有異常,請先關閉相關程序再試。

ipconfig /flushdns

解析結果以 198.18 開頭,代表網域被改錯了嗎?

先確認該位址是否屬於目前設定的虛擬位址池。若是,請繼續檢查應用程式連線是否已由 TUN 接管並還原網域;不要手動將虛擬位址寫入 hosts,也不要把它當成網站長期使用的真實位址。

啟用 FakeDNS 後,公司內部網站無法開啟怎麼辦?

先記錄內部網域在原有網路環境下的真實解析結果,再將內部網域設定為使用辦公室 DNS 與直連規則。確認辦公網路沒有與虛擬位址池重疊後,重新解析並啟動相關應用程式,再次測試。

重新啟動用戶端後,只有部分應用程式無法連線怎麼辦?

優先檢查應用程式是否仍快取舊的虛擬位址。請恢復原本的接管模式,清除系統 DNS 快取並重新啟動受影響的應用程式;若仍無法連線,再確認查詢與連線是否由同一個核心執行個體處理。

啟用後一定會更快嗎?

不一定。它可能減少連線前等待真實解析的步驟,但最終連線仍受出站解析、建立連線的時間與網路品質影響。請使用相同網域、節點與接管方式進行比較,先確認規則正確,再評估是否保留。

下載v2rayN