V2Ray DNS 分流設定教學:網域分流解析與 DNS 污染防護

說明 dns 區段中 servers、domains 與 expectIPs 的設定方式,掌握不同網域的解析路徑,並搭配路由規則降低 DNS 污染風險。

本文重點

先確認網域由哪個解析器處理,再為中國大陸網域設定專用解析器,其他網域則使用加密解析器,最後透過路由規則指定 DNS 請求的出口。本文適合已能連線至節點、準備修改核心設定的使用者;範例僅為設定片段,並非可直接匯入的完整節點檔案。

一、先確認 DNS 請求是否進入核心

先釐清兩件事:DNS 解析會將網域轉換為 IP 位址,路由分流則決定連線採直連或代理。只修改 dns 區段,不會自動讓所有應用程式的 DNS 請求進入 V2Ray;只新增代理規則,也無法確保應用程式先前取得的位址正確。

應用程式提交網域 核心比對規則 視需要解析位址 選擇連線出口

以上是應用程式將網域交給核心處理的典型流程。如果應用程式已在本機完成解析,只提交 IP 位址,核心收到的輸入就會不同。瀏覽器內建的安全 DNS、系統 DNS 與用戶端內建 DNS 可能同時運作,不能只憑一個 DNS 輸入欄位判斷實際解析流程。

二、了解 servers、domains 與 expectIPs

先將網域分組,再為各組指定解析器。servers 是解析伺服器清單;清單項目可以是簡單位址,也可以是附帶比對條件的物件。若要分別解析不同網域,使用物件格式會更容易確認設定效果。

欄位用途設定要點
servers列出可用的解析器不要以為清單永遠只會查詢第一個項目;比對條件與回退設定都會影響選擇結果。
domains指定優先使用此解析器的網域geosite:cn 須由核心讀取相應的網域資料檔案才能使用。
expectIPs檢查回傳位址是否符合預期範圍geoip:cn 是依位址歸屬地篩選,不代表內容安全,也不能證明網域真實性。
skipFallback控制此伺服器是否參與未符合網域的回退查詢設為 true 後,符合其 domains 條件的查詢仍可使用此伺服器。
queryStrategy選擇查詢的位址類型UseIPv4 用於只查詢 IPv4;不代表停用整個系統的 IPv6。
tag為內建 DNS 查詢標記來源查詢經過核心路由時,可透過路由規則的 inboundTag 進行比對。

geosite 是網域分類資料,geoip 是 IP 位址分類資料,兩者不可互換。domains 也支援 domain:example.com 這類可比對網域及其子網域的寫法。排查單一網站時,先新增一條明確的網域規則,比同時更換整套分類資料更容易找出問題。

判斷重點:將 expectIPs 視為篩選條件,而非防污染開關

只有在明確希望該網域回傳中國大陸位址時,才保留 geoip:cn 限制。如果網站使用海外 CDN,請先檢查遭拒絕的位址及其實際歸屬,再縮小規則範圍;不要一概將所有非中國大陸位址判定為遭污染。

三、設定中國大陸網域優先解析,其他網域使用加密解析

以下提供一段方便核對的基礎設定:中國大陸網域分類優先使用 223.5.5.5 查詢,其他網域則使用 https://1.1.1.1/dns-query。後者是 DoH,也就是透過 HTTPS 傳送 DNS 查詢。範例採用 IPv4,目的是先減少雙協定排錯變因,並不代表 IPv6 本身有問題。

{
  "dns": {
    "tag": "dns-query",
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ],
        "expectIPs": [
          "geoip:cn"
        ],
        "skipFallback": true
      },
      {
        "address": "https://1.1.1.1/dns-query",
        "skipFallback": false
      }
    ]
  }
}
53
範例中的中國大陸 UDP DNS 連接埠
443
HTTPS 預設連接埠
2 組
解析伺服器設定範例

此處設定 skipFallback: true,是為了避免中國大陸解析器參與未命中網域的一般回退查詢,並非「中國大陸解析失敗後絕不回退」。若中國大陸解析器未回傳符合 expectIPs 的結果,在未停用回退的情況下,仍可嘗試其他適用的伺服器。請勿將回退機制與強制隔離混為一談。

四、搭配路由規則,指定 DNS 請求的出口

先檢查現有的出站標籤。以下範例假設已有標籤為 direct 的直連出站,以及標籤為 proxy 的可用代理出站。這些只是範例名稱,不會由 DNS 設定自動建立。若現有標籤不同,請逐一改成實際名稱;VMess 或 VLESS 的節點參數維持原設定。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "inboundTag": ["dns-query"],
        "ip": ["223.5.5.5"],
        "port": "53",
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": ["dns-query"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:private", "geoip:cn"],
        "outboundTag": "direct"
      }
    ]
  }
}

規則會依序比對。第一條只讓標記為 dns-query、目的地為 223.5.5.5:53 的請求直連;第二條則將其他帶有相同標籤的查詢交給代理。如果先設定範圍較廣的 DNS 代理規則,中國大陸解析請求也會先被比對到,導致「已設定中國大陸解析器,請求卻繞遠路」的情況。

  1. 將 DNS 專用規則放在涵蓋範圍較廣的規則之前。如果原設定已有全連接埠直連、全域代理或依入站統一分流的規則,請確認各規則的優先順序。
  2. 了解 IPIfNonMatch。網域未符合適用規則時,核心可以呼叫內建 DNS 取得位址,再嘗試比對 IP 規則。這不代表每個網域都必須先解析。
  3. 保留原有的預設出口設計。此片段沒有提供最後的全流量兜底規則;未命中的流量會受到完整設定中的預設出站影響,合併時務必檢查出站順序。
  4. 檢查代理伺服器的引導解析。若代理伺服器位址使用網域名稱,請勿讓其唯一的解析路徑又依賴尚未建立的代理連線。可為該伺服器網域另行安排可連通的引導解析路徑。

五、透過記錄與對照測試驗證分流結果

先確認「由誰解析、使用哪個出口」,再檢查網頁是否能開啟。單獨執行 nslookup 通常是在測試系統指定的解析器,不能直接證明 V2Ray 內建 DNS 已依規則運作。DNS 洩漏測試頁面顯示的通常也是遞迴解析服務的出口,而非本機的代理出口。

  1. 暫時提高記錄層級。在現有的 log 物件中,將 loglevel 改為 debug,再重新啟動核心。測試完成後請恢復為 warning,避免長時間記錄大量網域與連線細節。
  2. 重新啟動並測試連線流程。重新啟動核心可排除本次測試受到的核心快取干擾;關閉後重新開啟測試應用程式,必要時清除應用程式自己的 DNS 快取。只重新整理網頁不一定會觸發新的查詢。
  3. 測試一個明確符合中國大陸規則的網域。確認記錄中出現相應的 DNS 查詢,並檢查前往 223.5.5.5:53 的請求是否經由 direct 出站。已快取或直接符合網域路由規則的請求,不一定會產生新的核心解析記錄。
  4. 測試一個未列入中國大陸網域組的網域。確認是否使用 DoH 解析器,以及相關連線是否經由 proxy 出站。不同核心的記錄格式不盡相同,可交叉比對伺服器位址、目標網域與出站標籤。
  5. 分別測試應用程式路徑與本機解析路徑。桌面版可使用下方兩條命令進行對照;請先將連接埠改為用戶端顯示的實際 SOCKS 監聽連接埠。
curl --socks5-hostname 127.0.0.1:10808 -I https://example.com
curl --socks5 127.0.0.1:10808 -I https://example.com

第一條命令會讓 SOCKS 代理處理目標網域,第二條則由 curl 在本機解析後提交位址。10808 只是命令範例,不保證與你的監聽連接埠相同。兩條命令都成功,也不代表核心一定執行了解析:代理出站可能會將網域繼續交給遠端伺服器處理,最後仍須搭配記錄確認。

排查重點:先找出請求在哪個步驟停住

如果記錄中沒有查詢,先檢查快取及應用程式是否提交網域;已有查詢但逾時,檢查解析器的出口;已取得位址卻連線失敗,再檢查路由、節點與目標服務。依這三個階段逐步排查,比反覆更換 DNS 位址有效。

六、DNS 分流常見問題與復原方式

修改 DNS 後所有網站都無法開啟,該先檢查哪裡?

先還原備份,確認節點仍可正常使用,再檢查核心啟動記錄。優先處理 JSON 語法錯誤、分類資料載入失敗及不存在的出站標籤。核心能正常啟動後,再確認 DoH 是否依賴同一個尚未完成引導解析的代理伺服器網域。

中國大陸網站偶爾無法連線,是 expectIPs 設錯了嗎?

先確認回傳位址是否遭 geoip:cn 排除。針對單一網域,可暫時移除此限制或建立範圍更小的專用規則,重新啟動後再測試。如果網站確實使用境外 CDN,應調整該網站的解析策略,而不是直接認定解析器受到污染。

使用 DoH 後,為什麼測試頁面仍顯示本地電信業者?

檢查瀏覽器「設定」中的安全 DNS、系統 DNS,以及應用程式是否繞過代理。接著確認核心記錄是否真的收到該網域的查詢。DoH 只會加密通往指定解析器的那條查詢路徑,不會統一接管所有應用程式的 DNS。

更新訂閱後,DNS 設定為什麼又變了?

先區分訂閱節點資料與用戶端產生的核心設定。不要修改每次啟動都會重新產生的暫存 JSON;請透過用戶端的持久化 DNS 設定或自訂設定入口儲存。更新後重新檢視實際生效的設定,確認 dns 與規則順序。

只查詢 IPv4 會讓部分應用程式異常嗎?

可能影響依賴 IPv6 的目標。先使用 UseIPv4 完成基本驗證,再於支援雙協定的環境改用 UseIP,同時檢查 IPv6 路由與出口。請勿只恢復 AAAA 查詢,卻忽略相應的連線路徑。

最後保留一份能啟動、能解析、能連線的設定副本。每次只調整一個變數,例如先更換解析器,再調整網域分組,最後才修改回退與位址篩選。需要查閱更多欄位時,可開啟本站的設定欄位說明,並依實際核心版本逐項確認。

下載用戶端