適合已能正常連線節點,但仍遇到網域解析錯誤、網頁偶爾無法開啟或 DNS 檢測結果異常的 v2rayN 使用者。本文會先區分系統解析與核心解析,再提供分流設定、驗證步驟與故障定位方法;完成後即可判斷一次查詢由誰接收、經過哪條出站,以及為何取得目前的位址。
先區分系統 DNS、核心 DNS 與遠端解析
先在 v2rayN 中開啟「設定」→「參數設定」,確認目前啟用的核心類型、系統代理模式與 TUN 狀態。DNS 分流是否生效,不只取決於填寫哪個伺服器,也取決於網域請求是否進入 Xray 核心。一般系統代理主要接管應用程式的 HTTP 或 SOCKS 流量,部分應用程式仍會直接呼叫作業系統 DNS;TUN 模式則能涵蓋更多網路請求,但仍需同時檢查 DNS 劫持與路由規則。
系統 DNS 是網路介面卡或作業系統目前使用的解析器。核心 DNS 是產生設定中頂層的 dns 物件,負責依網域規則選擇解析伺服器。遠端解析表示查詢會經由代理出站傳送至目標解析器,而不只是把伺服器位址改成境外位址。若查詢封包仍從直連出口送出,填寫遠端伺服器並不代表已完成遠端解析。
| 層級 | 主要職責 | 檢查位置 | 常見問題 |
|---|---|---|---|
| 應用程式層 | 決定使用系統解析、內建安全 DNS 或代理解析 | 瀏覽器與應用程式網路設定 | 繞過系統與核心規則 |
| 系統層 | 將一般 UDP/TCP 53 查詢交給指定伺服器 | 網路介面卡與系統網路狀態 | 殘留舊 DNS 或多個介面卡同時存在 |
| 核心層 | 依網域、地域標籤與查詢類型選擇解析器 | v2rayN 目前執行中的設定 | 規則順序錯誤或標籤未命中 |
| 出站層 | 決定查詢直連或經由代理節點 | 路由規則與核心記錄 | 遠端解析器被錯誤設為直連 |
結論:先確認查詢是否進入核心
設定前先查看目前的執行設定與核心記錄。若測試網域完全沒有 DNS 記錄,應優先處理應用程式內建解析、系統代理範圍或 TUN 接管,而不是繼續更換解析伺服器。
設定境內本地 DoH 與境外遠端解析
先為境內網域準備低延遲的本地 DoH,再為其他網域準備需經代理存取的遠端 DoH。分流依據應使用網域集合,而不是等解析完成後再依回傳 IP 判斷;前者能在送出查詢前選定解析器,避免境外網域先向本地解析器曝光並取得異常結果。
- 開啟「設定」→「參數設定」,確認 Xray 核心處於啟用狀態,並記下本地 SOCKS 監聽連接埠。常見預設值為
10808,實際值請以目前參數頁面為準。 - 進入 v2rayN 的 DNS 設定頁面,選擇與目前核心相對應的設定區域。不同版本的介面名稱可能略有差異,修改後應查看產生的執行設定,而不要只看編輯框內容。
- 將境內 DoH 伺服器綁定至
geosite:cn類型的網域規則,並使用geoip:cn限制預期的回傳位址。 - 將遠端 DoH 放在後續比對位置,作為境外網域與未命中網域的解析器;同時確保該 DoH 網域或目標連線經由代理出站。
- 儲存設定並重新啟動核心。先測試一個明確的境內網域,再測試一個境外網域,避免只根據單一網站下結論。
以下片段展示 Xray dns 物件的核心結構。這是結構範例,不應直接覆蓋 v2rayN 自動產生的完整設定;實際使用時應透過用戶端的自訂 DNS 區域合併,並保留既有的記錄、入站、出站與路由部分。
{
"dns": {
"queryStrategy": "UseIP",
"disableCache": false,
"hosts": {
"dns.local.example": "223.5.5.5"
},
"servers": [
{
"address": "https://dns.alidns.com/dns-query",
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
],
"skipFallback": true
},
{
"address": "https://1.1.1.1/dns-query",
"domains": [
"geosite:geolocation-!cn"
]
},
"https://1.1.1.1/dns-query"
]
}
}
當 queryStrategy 設為 UseIP 時,核心可依可用網路請求 A 與 AAAA 結果;若本地網路沒有穩定的 IPv6,卻強制使用 IPv6 查詢策略,可能出現解析成功但連線逾時。僅使用 IPv4 的環境可依目前核心支援情況選擇對應策略,但不要將查詢策略與路由出站混為一談。
結論:本地解析器限定境內規則,遠端解析器負責預設回退
將範圍較窄的 geosite:cn 規則放在前面,再設定遠端預設解析器。儲存後以記錄驗證兩類網域分別命中哪個伺服器,避免只靠解析結果猜測規則。
讓遠端 DNS 查詢確實經由代理出站
遠端 DoH 本質上仍是一條 HTTPS 連線。若其目標位址被路由規則送往直連出站,查詢就會從本地網路發出。處理方式是在路由設定中明確指定遠端解析器網域的代理方向,同時避免將本地 DoH 一併送入代理,維持境內查詢的低延遲。
- 在「設定」→「路由設定」中檢查自訂規則順序,遠端 DoH 網域的代理規則應位於寬泛直連規則之前。
- 本地 DoH 網域可依
geosite:cn或明確網域設為直連,連線連接埠通常為443。 - 傳統 DNS 若使用 UDP 53,需確認 TUN 與防火牆沒有讓封包繞過核心;DoH 使用 HTTPS,更方便依一般 TCP 流量套用路由規則。
- 訂閱節點中的伺服器位址若是網域,需保留可用於建立首次連線的基礎解析路徑,否則會形成「必須先連上代理才能解析節點、必須先解析節點才能連上代理」的循環。
排查時開啟 v2rayN 的記錄視窗,將核心記錄層級暫時調整為可觀察 DNS 與路由命中的程度。接著清除系統快取,依序存取測試網域。需關注的資訊包括查詢類型、命中的 DNS 伺服器、路由出站標籤、回傳位址與逾時原因。測試完成後可恢復較低的記錄層級,減少日常輸出。
| 測試項目 | 預期路徑 | 範例觀察值 | 異常含義 |
|---|---|---|---|
| 境內網域首次解析 | 本地 DoH → 直連 | 約 18–45 ms | 超過 500 ms 通常表示代理設定錯誤或連續回退 |
| 境外網域首次解析 | 遠端 DoH → 代理 | 約 90–260 ms | 若立即回傳異常位址,需檢查是否使用了本地 DNS |
| 同一網域再次解析 | 核心快取 | 通常低於 5 ms | 每次都重新查詢,可能是快取關閉或 TTL 已到期 |
| 節點網域解析 | 基礎解析 → 建立連線 | 核心啟動階段完成 | 啟動即逾時,可能是解析依賴形成循環 |
處理 hosts、fakeDNS 與快取的優先順序
hosts 用於在進入一般 DNS 查詢前覆蓋指定網域。適合固定內部服務位址、暫時繞過失效解析,或將一個網域對映至另一個網域。不適合維護頻繁變動的大型網站位址,因為固定 IP 可能繞過就近調度,也可能在服務端位址變更後導致連線失敗。
fakeDNS 常用於 TUN 情境。它會先向應用程式回傳合成位址,常見位址池位於 198.18.0.0/15,核心隨後根據合成位址找回原始網域並執行路由。如此可保留網域資訊,減少應用程式先在系統層完成實際解析、最後只將 IP 交給核心的情況。是否啟用應以目前 TUN 設定與核心支援為準。
快取會保存解析結果直到 TTL 到期,以減少重複查詢與頁面首次開啟的等待時間。修改 DNS 規則後若仍看到舊結果,可能不是新設定無效,而是系統快取、應用程式快取或核心快取中的任一層仍保存舊記錄。應先重新啟動核心,再清除作業系統 DNS 快取,並完全關閉後重新啟動用於測試的應用程式。
- hosts 覆蓋
- 在一般伺服器查詢前回傳指定位址或別名。適合少量、明確且容易維護的網域對映。
- fakeDNS
- 向應用程式回傳合成位址,並在核心中保留原始網域對映。主要用於解決 TUN 流量中的網域識別問題。
- DNS 快取
- 依 TTL 重複使用現有結果。能降低延遲,但設定變更後,舊結果可能暫時持續出現。
{
"dns": {
"hosts": {
"internal.example": "192.168.10.20",
"alias.example": "target.example"
},
"disableCache": false,
"disableFallback": false
}
}
設定 hosts 後,應分別檢查網域解析與實際連線。解析結果正確但網頁無法開啟,可能是目標服務要求正確的 TLS 網域、反向代理入口或特定連接埠;hosts 只會改變位址選擇,不會改寫憑證驗證、HTTP Host 或伺服器端監聽設定。
結論:先保持快取啟用,排查時再暫時清除
長期關閉快取會增加查詢次數與首次開啟延遲。修改規則後依「重新啟動核心、清除系統快取、重新啟動測試應用程式」的順序處理,比持續停用快取更容易得到穩定結果。
依現象定位解析失敗與規則未命中
先將問題拆分為「沒有送出查詢」「查詢走錯出口」「回傳結果不符合預期」與「解析正確但連線失敗」四類。不要只用網頁能否開啟來判斷 DNS,因為 TLS 交握、路由規則、節點狀態與目標服務也可能產生相同現象。
系統代理已開啟,為什麼檢測仍顯示本地 DNS?
先檢查應用程式是否使用自己的安全 DNS,再查看核心記錄中是否有該測試網域。記錄完全沒有相關內容時,進入「設定」→「參數設定」確認系統代理模式;需要涵蓋更多程式時,再依目前網路環境設定 TUN 與 DNS 接管。
境外網域可以解析,但回傳位址明顯異常,該怎麼辦?
在目前的執行設定中確認該網域命中了遠端 DoH,並核對遠端 DoH 連線是否經由代理出站。接著清除系統與應用程式快取,換一個從未查詢過的網域重新測試,排除舊記錄干擾。
啟用 TUN 後,部分區域網路裝置名稱無法開啟?
將區域網路網域與私有位址規則放入直連範圍,並保留區域網路解析器。固定裝置可新增少量 hosts 對映,同時確認 geoip:private 路由沒有被遠端代理規則提前覆蓋。
遠端 DoH 一直逾時,但節點本身卻能連線?
檢查 DoH 網域的路由規則、連接埠 443 與 IPv4/IPv6 查詢策略。若記錄顯示先取得無法連線的 IPv6 位址,可依網路能力調整查詢策略,再確認代理出站能夠存取該解析器。
修改設定並重新啟動後,為什麼設定沒有進入執行設定?
確認編輯的是目前核心對應的 DNS 區域,並檢查 JSON 語法。v2rayN 產生設定時可能會合併預設與自訂內容,應以啟動後顯示的執行設定為準;欄位缺失時先修正設定層級,再重新啟動核心。
命令列測試可以提供輔助證據,但 nslookup 預設查詢系統 DNS,不一定會經過 Xray 核心。它適合檢查作業系統目前使用的解析器,不適合單獨證明遠端 DoH 路徑。驗證核心分流時,應結合命令結果、v2rayN 核心記錄與網路出口觀察。
- 記錄修改前的 DNS 設定、路由模式、核心類型與監聽連接埠。
- 每次只修改一個變數,例如先調整解析器,再調整路由規則。
- 重新啟動核心,並確認沒有 JSON 解析錯誤、連接埠佔用或 DNS 初始化失敗。
- 使用一個境內網域與一個境外網域分別測試,記錄命中的伺服器與出站標籤。
- 最後恢復正常的記錄層級,並儲存可正常運作的設定副本。