GeoIP 與 GeoSite 資料庫更新教學:路由規則未生效的排查方法

說明 geoip.dat 與 geosite.dat 在路由比對中的作用,示範如何在 v2rayN 與 v2rayNG 更新資料庫,並針對規則未生效、分流錯誤等情況,依資料版本與規則寫法逐項排查。

節點能夠連線,只代表代理伺服器的出站功能基本可用;中國大陸網站繞道、區域網路位址進入代理、某個網域始終未走指定線路時,通常還需要繼續檢查路由層。GeoIP 與 GeoSite 正是路由層常用的兩組比對資料。它們不會取代 VMess、VLESS 等協定設定,也不負責更新訂閱,而是為 Xray、V2Fly 核心提供可查詢的 IP 與網域集合。

本文速覽

適合已匯入訂閱、節點連線正常,但在 v2rayN 或 v2rayNG 中遇到規則未命中、中國大陸流量誤走代理、啟動時出現資料檔案錯誤的使用者;操作重點是確認檔案位置與更新時間、更新兩份資料庫、核對規則前綴與順序,再透過日誌和實際連線逐項驗證。

GeoIP 與 GeoSite 各自處理什麼

geoip.dat 儲存依國家、地區或用途整理的 IP 網段集合。規則中的 geoip:cn 會將目標 IP 與對應集合比對,geoip:private 通常用來比對區域網路、迴路位址和其他私有位址。它適合處理已取得目標 IP 的連線,也可作為網域規則之後的補充判斷。

geosite.dat 儲存網域集合。規則中的 geosite:cngeosite:category-ads-all 等標籤不是一般網域,而是從資料檔案讀取一組網域項目。核心會依完整網域、子網域或正規表示式項目進行比對,因此能在連線真正發往目標伺服器前完成網域分流。

2 個檔案
geoip.dat 與 geosite.dat
10808
v2rayN 常見本機 SOCKS 連接埠
10.6 MB
一次測試中的 GeoSite 檔案大小
1.3 MB
同批次 GeoIP 檔案大小
應用程式發起連線 取得目標資訊 讀取規則集合 依序比對 選擇出站線路

兩類資料的作用無法互換。網域請求可能先由 GeoSite 命中;如果應用程式直接連線至 IP,GeoSite 就沒有網域可供比對,只能依靠 GeoIP、連接埠或其他條件。啟用 TUN 後還要配合嗅探與 DNS 設定判斷:嗅探還原出網域時,網域規則可能重新參與比對;未還原網域時,連線仍會套用 IP 規則或最終規則。

在 v2rayN 更新 Geo 檔案

以下以 v2rayN 7.15.0 的繁體中文介面為例。不同小版本可能會將更新入口放在主選單或系統匣選單中,但選單項目通常仍包含「檢查更新」和「Geo files」。更新前先讓目前連線保持穩定;如果資料來源只能透過代理存取,需先確認系統代理或 TUN 已正常運作。

  1. 確認核心類型

    開啟「設定」→「參數設定」→「Core 類型」,確認目前設定實際使用的是 Xray 核心還是 V2Fly 核心。訂閱名稱中出現 VLESS 或 VMess,不代表已確認執行中的核心。

  2. 開啟更新入口

    返回主視窗,選擇「檢查更新」→「Geo files」。若目前版本顯示為「更新 Geo 檔案」,選擇該項即可,請勿誤按「更新訂閱」。

  3. 等待寫入完成

    觀察訊息區域,確認 geoip.dat 與 geosite.dat 都已完成下載並寫入。一次測試中兩個檔案合計約 11.9 MB,網路穩定時通常會在 5 至 30 秒內完成。

  4. 重新啟動執行中的核心

    使用「重新啟動服務」,或先停止再啟動目前設定。僅關閉設定視窗不會讓已執行的核心重新載入資料檔案。

  5. 核對啟動日誌

    開啟「日誌」視窗,確認沒有出現 load geosite、load geoip 或 failed to start 等訊息,再測試目標網域的出站結果。

便攜版 v2rayN 需要特別檢查寫入權限。如果程式位於受系統保護的目錄,介面可能顯示下載完成,但舊檔案並未被取代。可退出客戶端後查看程式目錄中的兩個檔案修改時間;修改時間應接近剛才的更新時間,而不是安裝包解壓縮的時間。

更新完成後不建議立即同時修改 DNS、路由和節點設定。先保留原有規則,只重新啟動核心並再次測試,可以判斷變化是否確實來自資料檔案。若同時變更三處設定,發生分流錯誤時很難確認是哪一項造成。

結論:先確認檔案已重新載入

「下載成功」只代表檔案傳輸結束;修改時間已變更、核心完成重新啟動、啟動日誌沒有載入錯誤,三項同時符合後,才能視為新資料已生效。

在 v2rayNG 更新 Geo 檔案

以下以 v2rayNG 1.10.31 的繁體中文介面為例。Android 端的選單配置會隨螢幕寬度略有不同,相關入口可能位於右上角選單中。操作期間先保持一個可用設定處於選取狀態,以便更新位址需要代理時能正常存取。

  1. 檢查檔案位址

    進入右上角選單的「設定」→「Geo files 設定」,檢查 GeoIP 與 GeoSite 下載位址是否分別指向對應的 dat 檔案,避免在兩個輸入框填入相同的檔案位址。

  2. 執行資料更新

    返回主介面,開啟右上角選單並選擇「更新 Geo files」。等待頁面提示兩份檔案處理完成,中途不要強制結束客戶端程序。

  3. 重新啟動連線服務

    中斷目前連線,等待約 2 秒後重新連線。這樣可以讓 Xray 核心重新初始化路由模組並讀取新檔案。

  4. 開啟執行日誌

    從主介面進入「日誌」,搜尋 geoipgeositerouting 等關鍵字,確認啟動階段沒有檔案讀取錯誤。

  5. 重新測試目標連線

    先測試一個明確應直連的中國大陸網域,再測試一個應走代理的網域。分別記錄出口位址與連線耗時,避免只憑頁面能否開啟來判斷規則是否命中。

若目前版本沒有獨立的 Geo 更新選單,應先確認客戶端版本及使用的核心,不要把「更新訂閱」當成資料庫更新。訂閱更新處理的是伺服器設定清單,Geo 更新處理的是路由集合,兩者的儲存位置和載入時機都不同。v2flyNG 同樣採用 Geo 資料概念,但應使用與其 V2Fly 核心和規則標籤相符的資料檔案。

檢查規則寫法與比對順序

資料庫是新的,規則仍可能因為寫法錯誤而完全不生效。最常見的問題是漏掉前綴、把網域標籤填入 IP 條件、使用資料檔案中不存在的標籤,或讓範圍更大的規則排在前面。路由通常會依序判斷,連線命中第一條可用規則後,後續規則不會再覆蓋它。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

這段範例會先放行私有 IP,再依中國大陸網域直連,接著依中國大陸 IP 直連,最後讓其餘 TCP 與 UDP 連線進入代理出站。實際設定中的 directproxy 必須與現有出站標籤一致;如果客戶端產生的標籤是 freedomblock 或其他名稱,應以目前的完整設定為準。

  • geosite:cn 應填入網域條件,不應填入 IP 條件。
  • geoip:cngeoip:private 應填入 IP 條件。
  • domain:example.com 用於比對該網域及常見的子網域範圍,完整比對可依核心支援的規則格式設定。
  • 自訂資料標籤必須確實存在於所使用的 dat 檔案中,不能根據檔名猜測標籤。
  • 阻擋規則、直連規則和代理規則應依實際範圍由窄到寬排列,最後再放置兜底規則。

domainStrategy 也會影響結果。AsIs 主要依原始網域資訊比對;IPIfNonMatch 會在網域規則未命中時解析 IP,再嘗試 IP 規則;IPOnDemand 可能會更早觸發解析。修改此選項會牽涉 DNS 路徑,不應把它當成單純的「加強分流」開關。

結論:先檢查第一條命中的規則

規則結果與預期相反時,優先向前檢查是否存在範圍更廣的網域、IP、連接埠或全網路規則;只把目標規則移到清單末端,通常不會提高它的優先順序。

排查啟動錯誤與資料庫異常

檔案不存在、內容損壞或標籤缺失時,核心通常會在啟動日誌中留下比「連線失敗」更具體的資訊。排查時應保留完整的錯誤鏈,尤其是檔名、標籤名稱和底層讀取原因,不要只截取最後一行。

錯誤:failed to load geosite: geosite.dat: no such file or directory

原因與解法:核心工作目錄中找不到 geosite.dat,或客戶端指向錯誤路徑——重新執行 Geo files 更新,確認檔案已寫入目前核心目錄後重新啟動服務。

錯誤:failed to load GeoIP: geoip.dat: no such file or directory

原因與解法:GeoIP 檔案遺失、被移動或更新未完成——退出客戶端,確認 geoip.dat 存在且大小不是 0 位元組,再重新下載。

錯誤:failed to decode geosite.dat: invalid wire-format data

原因與解法:下載結果不是有效的資料檔案,常見原因是傳輸中斷或位址回傳了網頁內容——刪除異常檔案,透過客戶端更新入口重新取得並重新啟動核心。

錯誤:failed to load geosite: list not found

原因與解法:規則引用的標籤不在目前的 geosite.dat 中——核對標籤拼寫和資料來源,暫時移除該規則後確認核心能否正常啟動。

如果更新後客戶端無法啟動,可以先備份路由設定,再暫時停用所有引用 Geo 標籤的自訂規則。核心能夠啟動時,表示節點協定和基礎出站大致正常,問題集中在資料檔案或規則標籤;仍然無法啟動時,則應繼續檢查連接埠占用、設定語法和核心路徑。

還要檢查檔案是否被重複放置。客戶端目錄、核心子目錄和自訂資源目錄中可能各有一份同名檔案,實際讀取的未必是剛更新的那份。最直接的方法是查看啟動日誌顯示的資源路徑,再比對該路徑下檔案的修改時間與大小。

規則命中但仍然分流錯誤

日誌沒有錯誤,不代表分流結果一定符合預期。Geo 資料依集合維護,網域歸屬與伺服器 IP 都可能變更;大型網站還會使用多地解析和內容傳遞,同一網域在不同網路下可能得到不同位址。此時需要區分「規則未命中」和「規則命中後選擇的出站不符合預期」。

現象 優先檢查 驗證方式
中國大陸網域進入代理 GeoSite 標籤與規則順序 將目標網域單獨加入直連規則,並放在寬泛代理規則之前
直接連線 IP 時未命中 GeoIP 條件與目標 IP 歸屬 記錄目標 IP,再檢查是否命中 geoip:cn 或私有位址集合
TUN 下的結果與系統代理不同 嗅探、DNS 與 domainStrategy 保持節點不變,分別記錄兩種模式下日誌中的目標網域與 IP
更新後只有部分規則失效 自訂標籤是否存在 逐條停用擴充標籤,保留 geosite:cn 與 geoip:cn 進行基準測試
區域網路裝置無法存取 geoip:private 的位置 將私有 IP 直連規則放在代理兜底規則之前,再重新連線

建議建立最小測試設定:保留一個可用節點、一條私有位址直連規則、一條中國大陸網域直連規則、一條中國大陸 IP 直連規則和一條代理兜底規則。確認這組規則正常後,再分批恢復廣告網域、自訂網域、程序或連接埠規則。每恢復一批就測試一次,比一次載入數十條規則更容易定位衝突。

驗證時至少記錄三項結果:目標網域解析出的 IP、核心選擇的出站標籤、最終出口位址。網頁開啟速度容易受到快取、伺服器負載和網路抖動影響,不能單獨證明分流是否正確。若本機 SOCKS 監聽連接埠設為 10808,還要確認測試工具確實連線至該連接埠,而不是繞過客戶端使用系統直連。

結論:用最小規則集區分資料問題與順序問題

基本的 geosite:cn 與 geoip:cn 能正常運作,逐步恢復擴充規則後才出現分流錯誤,問題通常在新增規則的範圍或順序,而不是兩份資料庫本身。

更新後的完整驗證清單

一次可靠的更新應同時涵蓋檔案、核心、規則和連線四個層面。只看到選單提示「完成」,不足以證明路由已依新資料運作。完成以下檢查後,再恢復自動啟動、定時更新訂閱等日常設定。

  1. 確認 geoip.dat 與 geosite.dat 都存在,檔案大小大於 0 位元組,修改時間接近本次更新時間。
  2. 確認目前執行的是預期核心,v2rayN 可從「設定」→「參數設定」→「Core 類型」核對。
  3. 中斷並重新連線,確保舊核心程序已退出,新程序重新讀取資源檔案。
  4. 查看啟動日誌,排除 file not found、decode、list not found 等載入錯誤。
  5. 檢查 GeoSite 標籤位於網域條件、GeoIP 標籤位於 IP 條件,出站標籤與現有設定一致。
  6. 將私有位址、精確網域等窄範圍規則放在寬泛代理兜底規則之前,避免提前命中。
  7. 分別測試網域連線與直接 IP 連線,記錄實際選擇的出站,而不是只看頁面是否開啟。
  8. 確認系統代理或 TUN 模式下的應用程式流量確實進入客戶端,測試工具未繞過本機代理連接埠。

Geo 資料不需要在每次更新訂閱後重複下載。訂閱變更主要影響節點清單,Geo 檔案變更主要影響路由集合。可以依實際需要定期更新,也可以在出現新網域無法分類、舊 IP 歸屬明顯變更、擴充標籤缺失時手動更新。頻繁覆蓋檔案卻不重新啟動核心,反而容易讓磁碟版本與執行版本不一致。

如果最終確認某個網域長期被集合錯誤分類,最穩妥的暫時處理方式是新增一條範圍更窄的自訂網域規則,並放在對應集合規則之前。這樣既能修正目前的連線,也不必刪除整組 GeoSite 或 GeoIP 規則。後續資料更新後,再重新測試該網域是否仍需保留例外項目。

客戶端下載與安裝 前往下載頁選擇平台