この記事は、サブスクリプションをインポートし、ルーティングを調整しようとしている方向けです。まずIPデータベースとドメインデータベースの違いを整理し、v2rayNでGeoファイルを更新して、実際にカーネルが読み込む場所を確認します。そのうえで、国別ルールと広告カテゴリのルールを設定します。例ではV2Ray/XrayのDAT形式のルーティング構文を使用します。設定前に、現在使用中のカーネルと、参照するカテゴリがデータソースに含まれているかを確認してください。
GeoIPとGeoSiteの違いと照合対象
geoip.datには、国やその他のタグごとに整理されたIPアドレス範囲が保存されています。geosite.datには、タグごとに分類されたドメインルールが保存されています。どちらもカーネルが読み込むデータファイルであり、ノード一覧やサブスクリプションURLではありません。サブスクリプションを更新してもサーバー設定が更新されるだけで、Geoファイルも更新されたとは限りません。
| 項目 | GeoIP | GeoSite |
|---|---|---|
| 主なファイル名 | geoip.dat | geosite.dat |
| 照合対象 | 宛先のIPv4またはIPv6アドレス | 接続に含まれるドメイン、またはスニッフィングで取得したドメイン |
| ルールの例 | "ip": ["geoip:cn"] | "domain": ["geosite:cn"] |
| 主な注意点 | IPアドレスの割り当て先だけでは運営元の所在地を判断できない | 利用できるカテゴリはデータソースによって異なり、ドメイン情報も必要 |
geoip:cnは、データベース内のcn IPアドレス集合を参照する指定であり、「中国語のWebサイトすべて」を意味するものではありません。geosite:cnが参照するのはドメインカテゴリで、両者は一対一に対応しません。Webサイトが複数国にまたがるCDNを利用している場合もあり、同じドメインでも接続するネットワークによって異なるIPアドレスに解決されることがあります。ドメインルールとIPルールは分けて考えましょう。
v2rayNでGeoファイルを更新する
まず、現在のノードでV2RayとXrayのどちらを使っているか、どのルーティング設定が有効かを確認します。v2rayNは設定の生成とカーネルの管理を担い、データベースを読み込んでルーティングを照合するのはカーネルです。以下では、デスクトップ版の「更新を確認」→「Geoファイルを更新」から実行する例を紹介します。画面のバージョンによって項目名や場所が異なることがあります。また、サブスクリプションの更新はGeoファイル更新の代わりにはなりません。
-
現在の設定を記録する
有効なルーティング設定、ノードで使うカーネル、今回修正するドメインを控えておきます。ルールの変更とデータベースの更新を同時に行わないよう、先にルーティング設定のコピーを保存してください。
-
更新を実行する
メイン画面から「更新を確認」→「Geoファイルを更新」を選択します。画面の通知やログを確認し、ダウンロードが完了したことを確かめてください。メニューをクリックしただけでは、ファイルの書き込みが成功したとは判断できません。
-
ファイルを確認する
現在実行中のクライアントのデータディレクトリを特定し、
geoip.datとgeosite.datの更新日時、ファイルサイズ、更新ログを確認します。同じ名前のファイルが複数ある場合は、カーネルが実際にどのファイルを使っているかも確認してください。 -
再起動して動作を確認する
現在のカーネルを再起動します。画面に個別の再起動項目がない場合は、クライアントを完全に終了してから起動し直してください。Geoファイルの読み込みエラーがログにないことを確認した後、テスト接続を新たに確立し、想定したアウトバウンドにルールが適用されるかを確認します。
更新に失敗した場合は、エラーの種類に応じて対処します。ダウンロードがタイムアウトする場合は更新元へのネットワーク経路を確認し、証明書エラーの場合はシステムの日付と時刻を確認してください。書き込みに失敗する場合は、ディレクトリのアクセス権と、ファイルを別のプロセスが使用していないかを確認します。サブスクリプショングループの「プロキシ経由で更新」はサブスクリプション更新の設定です。Geoファイルのダウンロードにも適用されるとは限りません。
保存場所は現在のインスタンスとカーネルのログで確認
インターネット上で見つけた固定パスを根拠にファイルを上書きしないでください。ポータブル版、インストール先、ユーザーデータディレクトリ、配布パッケージによって、リソースの配置は異なります。特に、v2rayNを2つ残している場合、古い方のディレクトリにあるファイルを更新しても、現在のインスタンスが読み込むデータは変わりません。
保存場所の特定方法:実行中のインスタンスからリソースディレクトリを確認
Windows
- タスクマネージャーで現在のプロセスを右クリックし、「ファイルの場所を開く」を選択して、実行中のプログラムを確認します。
- 現在のインスタンスに関連するディレクトリで2つのDATファイルを検索し、更新後の変更日時を確認します。
- クライアントのログ、生成された設定、カーネルの起動情報を照らし合わせ、実際のリソースパスを特定します。
macOS・Linuxの場合
- アプリのインストール先と現在のユーザーのデータディレクトリを区別し、リソースがすべてプログラムと同じ場所にあるとは考えないでください。
- 起動環境とカーネルのログを確認し、リソースディレクトリが明示的に指定されていないか調べます。
- 手動で置き換える場合は、先にカーネルを停止し、元のファイルを保存したうえで、配置先への書き込み権限を確認してください。
同名のファイルがあっても、そのファイルが読み込まれているとは限りません。現在のインスタンス、起動環境、読み込みログを照らし合わせて確認してください。
たとえばWindowsのPowerShellでは、クライアントの場所を確認してから、以下の読み取り専用検索を実行できます。検索結果には指定したディレクトリ以下のファイルだけが表示され、内容が自動的に上書きされることはありません。リソースがユーザーデータディレクトリにある場合は、そのディレクトリでも検索してください。
Get-ChildItem -Path . -Recurse -File -Filter '*.dat' |
Where-Object { $_.Name -in @('geoip.dat', 'geosite.dat') } |
Select-Object FullName, Length, LastWriteTime
カーネルを手動で管理している場合は、V2RayのV2RAY_LOCATION_ASSETやXrayのXRAY_LOCATION_ASSETなど、リソースディレクトリを指定する環境変数にも注意してください。クライアント管理のカーネルでは、これらの変数をむやみに追加しないでください。更新したディレクトリをカーネルが読み込まなくなる場合があります。起動方法と実際の読み込み先を確認してから、手動でファイルを置き換えてください。
ルールの設定例:広告ブロック、ドメインの直接接続、IPの直接接続
以下はV2Ray/Xray設定のrouting部分で、単独で動作する完全なクライアント設定ではありません。広告カテゴリの通信をブロック用アウトバウンドへ、中国本土のドメインとIPアドレスを直接接続用アウトバウンドへ振り分ける3つのルールを示しています。使用前に、実際のアウトバウンドタグを確認してください。blockとdirectはここでは例示用のタグであり、ルールに記述しただけでアウトバウンドが自動作成されるわけではありません。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": [
"geosite:category-ads"
],
"outboundTag": "block"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
- 広告ルールを先に配置:ルールは記述順に照合され、最初に一致したルールで接続先が決まります。広範囲を対象とする直接接続ルールを先に置くと、後続の広告ルールが適用されないことがあります。
- ドメインとIPは別々のルールにする:同じ
fieldルールにdomainとipを両方指定しても、単純に「どちらか一方が一致すればよい」という意味にはなりません。どちらかの条件に一致した場合に直接接続させるには、ルールを分けてください。 - ブロックには対応するアウトバウンドが必要:
blockは、たとえばblackholeプロトコルを使用するなど、定義済みのブロック用アウトバウンドを参照する必要があります。直接接続用のタグはfreedomアウトバウンドを参照してください。実際の名前は生成された設定で確認します。 - デフォルトの接続先を設定:この設定例には、どのルールにも一致しない通信の接続先がありません。V2Ray/Xrayでは通常、未一致の通信には最初のアウトバウンドが使われます。クライアントが生成した設定でアウトバウンドの順序やフォールバックルールを確認してください。
v2rayNのルーティング編集画面では、ドメイン条件にgeosite:category-ads、IP条件にgeoip:cnを指定してください。JSONオブジェクト全体を単一の条件入力欄に貼り付けないでください。保存後、この設定が現在有効なルーティング設定になっていることも確認します。各フィールドの詳しい関係は、当サイトの設定ガイドをご覧ください。
ドメイン解決の方針:IPルールに一致しない理由
この例ではAsIsを選択しているため、ルーティング段階でIPルールとの照合を目的としたドメインの追加解決は行われません。接続先が最初からIPアドレスであれば、geoip:cnに一致することがあります。一方、接続先がドメイン名で、ドメインルールに一致しなかった場合、必ず中国本土向けのIP直接接続ルールに進むとは限りません。
AsIs:まずドメインで分類
おすすめこの記事の問題切り分けを始める設定として適しています。ドメインカテゴリとIP条件の役割を明確に分けられ、同じテスト中に追加のDNS解決が入るのを避けられます。ただし、あらゆるネットワーク環境で常にこの設定を使うべきという意味ではありません。
適しているケース:GeoSiteルールとその順序が正しいかを先に確認したい場合。
IPIfNonMatch:解決後に照合
ドメインが既存のルールに一致しない場合、名前解決を試みてからIP条件で照合を続けます。使用前に、カーネルのDNS設定、名前解決の結果、デフォルトの接続先を確認してください。解決結果の違いをデータベースの古さと誤認するのを防げます。
適しているケース:ドメイン通信の振り分けに、解決後のIPアドレスも使いたい場合。
アプリがIPアドレスに直接接続すると、GeoSiteでドメインを取得できないことがあります。スニッフィングで一部のプロトコルからドメインを取得できますが、すべての接続で復元できるわけではありません。アプリが使う通信方式や暗号化方式も結果に影響します。geosite.datを更新しても、ルーティングで照合できるドメイン自体が存在しない問題は解決しません。
更新後も問題がある場合:ログで原因を絞り込む
動作確認では、Webページが開くかどうかだけを見ないでください。テストするドメイン、想定する接続先、アクセス時刻を記録してから、同じ時間帯のカーネルログを確認します。ログの詳細度は現在のログレベルによって異なります。必要に応じて一時的に詳細度を上げ、確認後は元に戻してください。サブスクリプションURLや認証情報を含むログ全体を公開しないよう注意してください。
category-adsが見つからないと表示される。ファイルは更新済みなのに、なぜ?
まず、データソースにこのカテゴリが含まれているか確認してください。別の広告カテゴリしか提供されていない場合は、実際に用意されているタグに合わせてルールを変更します。同じファイルを何度もダウンロードし直す必要はありません。設定を修正したらカーネルを再起動し、カテゴリの読み込みエラーが解消されたことを確認してからアクセスをテストしてください。
geoip.datを開けないと表示される。どこに配置すればよい?
ログに表示された失敗時のパスを確認し、ディレクトリの有無、ファイル名、プロセスの読み取り権限を調べてください。次に、起動環境で別のリソースディレクトリが指定されていないか確認します。手当たり次第に複数のディレクトリへファイルをコピーしないでください。
広告ルールを保存したのに、広告が表示されるのはなぜ?
現在有効なルーティング設定、ルールの順序、ブロック用アウトバウンドのタグを確認し、広告リクエストのドメインがカテゴリに含まれているか調べてください。本文と広告で同じドメインを共有している場合、ドメインリストだけで区別するのは困難です。ページキャッシュや既存の接続が以前の結果を保持していることもあります。
中国本土のWebサイトがプロキシ経由になる。GeoIPが古い?
まず、接続先がドメインかIPアドレスかを確認してください。AsIsでは、ドメインがルールに一致しなくても、IPとの照合が必ず行われるわけではありません。さらに、より前にあるプロキシルール、接続先が中国本土以外のCDNを使っているか、DNSの解決結果が想定どおりかを確認してください。
同じルールが別のカーネルで使えないのはなぜ?
まず、対象カーネルが対応しているルール形式を確認してください。この記事で扱うDATファイルとgeosite:、geoip:による指定はV2Ray/Xray向けです。拡張子を変更しても、別のカーネル用のルールセットには変換できません。対象カーネルに対応したデータ形式と設定項目を使用してください。
継続的なメンテナンス:データベースとルールを個別に更新
データベースの更新ではカテゴリに含まれる項目が変わり、ルーティング設定の更新では条件、順序、接続先が変わります。どちらも振り分け結果に影響します。変更は一度に一つに絞ると、原因がデータの変更、ルールの優先順位、DNSの解決結果のどれなのかを判断しやすくなります。サブスクリプションを更新するたびに、すべてのファイルを手動で置き換える必要はありません。
- 変更前にバックアップ:現在正常に使えるGeoファイルとルーティング設定を保存し、データソースと更新日時を記録しておくと、問題が起きた際に元へ戻せます。
- 更新後に起動を確認:まずカーネルが正常に読み込まれているか確認し、直接接続、プロキシ、ブロックの3種類の動作をテストしてください。Webページを1つ確認するだけでは不十分です。
- 接続を確立し直す:既存の接続は、接続開始時の経路を使い続けることがあります。カーネルを再起動してリクエストを新たに送ると、変更後の設定を確認しやすくなります。
- デスクトップ版とAndroid版を区別:v2rayNGはXrayカーネル、v2flyNGはV2Flyカーネルを使用します。ただし、クライアントのデータ管理画面やリソースディレクトリは異なるため、デスクトップ版のファイルパスをそのまま使うことはできません。
起動できない、またはネットワークが切断された場合は、まず直前の正常な設定に戻してから、項目ごとに原因を調べてください。よくある接続の問題については、トラブルシューティングもご覧ください。Geoデータはルーティング条件の一部にすぎません。通信の取り込み、ルールの順序、DNSの方針、アウトバウンドタグが組み合わさって、最終的な接続経路が決まります。