サブスクリプションをインポートしたものの、中国国内・海外の振り分けが期待どおりにならないv2rayNユーザー向けです。まずドメイン用データベースとIP用データベースの違いを確認し、クライアントからGeoファイルを更新します。次に、使用中のコアが実際に読み込んでいる場所を確認し、ルールの順序とログをチェックします。データベースを更新してもサブスクリプションは更新されず、ルーティングの順序も自動では変わりません。掲載するJSONはXrayとV2Flyのrouting設定例であり、そのままインポートできる完全なクライアント設定ではありません。
2つのdatファイル:ドメイン用とIP用
geosite.datには地域、用途、サービスごとに分類されたドメインの一覧が保存されています。geoip.datには地域などのタグで分類されたIPアドレス範囲が保存されています。ルーティングのgeosite:cnはドメイン一覧を、geoip:cnはIP一覧を参照するため、互いに置き換えることはできません。データベースが「一覧に何が含まれるか」を提供し、ルールが「一致した通信をどの出口に送るか」を決めます。
| ファイル | ルーティング項目と設定例 | 使用条件 |
|---|---|---|
geosite.dat | domain: ["geosite:cn"] | ルーティング時にドメインを取得でき、データベースにcnカテゴリが含まれていること。 |
geoip.dat | ip: ["geoip:cn"] | 接続先がIPアドレスであること、またはコアがドメインを名前解決してIPの照合に使うこと。 |
geoip.dat | ip: ["geoip:private"] | データベースにprivateカテゴリがあり、プライベートアドレスや関連する特殊用途のアドレスが含まれていること。対象範囲はデータソースによって異なります。 |
たとえば、ブラウザーがドメインをローカルプロキシに渡す場合は、ドメインルールでそのまま判定できます。一方、アプリが接続先IPだけをプロキシに渡す場合、ドメインデータベースを参照できないことがあります。対応する通信ではスニッフィングでドメイン情報を補えますが、すべての接続で元のドメインを特定できるとは限りません。geositeファイルを更新するだけでは、「アプリからドメインが渡されない」問題は解決できません。
v2rayNでGeoファイルを更新:バックアップとログ確認を忘れずに
まずはクライアント内蔵のGeo更新機能を使いましょう。デスクトップ版では通常、「アップデートを確認」→「Geoファイルを更新」の順に操作します。画面によっては「Geoファイル」とだけ表示される場合もあります。メニューの場所や表記はバージョンや画面形式で異なるため、「サブスクリプションの更新」やクライアント本体の更新ではなく、更新メニュー内のGeo項目を探してください。
-
現在の設定を保存する
使用中のコアの種類、ルーティングプリセット、Geoデータソースを記録しておきます。ローカル設定をバックアップする場合は、クライアントを終了してから実際の設定ディレクトリをコピーしてください。書き込み中の設定を確実なバックアップとして扱わないでください。
-
データベースを更新する
「アップデートを確認」→「Geoファイルを更新」を選び、処理が終わるまで待ちます。出力にgeoip.datとgeosite.datの両方が表示されているか確認してください。ダウンロードの進行表示が終わっただけでウィンドウを閉じないようにしましょう。
-
更新結果を確認する
ログで成功・失敗を確認し、実際のデータディレクトリにあるファイルの更新日時とサイズもチェックします。ファイルが存在しても内容が使用可能とは限らず、更新日時が変わってもコアが再読み込みしたとは限りません。
-
コアを再読み込みする
クライアントから使用中のコアを再起動するか、クライアントを完全に終了してから起動し直します。その後、起動ログにファイル読み込み失敗、カテゴリの欠落、ルーティング設定エラーがないか確認してください。
-
振り分けをテストする
直接接続するサイト、プロキシ経由にするサイト、実際に使っているLANサービスをそれぞれテストします。ノード、ルーティングプリセット、プロキシモードは同じ状態に保ち、一度に複数の条件を変更しないようにしましょう。
更新がタイムアウトする場合は、まず現在のネットワークからクライアントに設定されているデータソースへ接続できるか確認します。プロキシ経由でダウンロードする設定がある場合は、動作確認済みのノードを選んでから再試行してください。その設定がない場合、「システムプロキシを設定する」だけで解決するとは限りません。更新リクエストがシステムプロキシを使うかどうかはクライアントの実装によります。接続タイムアウト、権限不足、データ読み込み失敗のどれに該当するかを確認してから、次の対応を決めましょう。
更新方法の選び方:通常は内蔵機能、手動置換はトラブルシューティング向け
クライアント内蔵の更新機能
推奨v2rayNが現在の設定に従ってファイルをダウンロード・保存するため、配置先やファイル名を間違えるリスクを抑えられます。更新後はコアを再起動し、使用中のルールが対象のカテゴリを参照していることも確認してください。
適した用途:日常的なメンテナンス、現在のデータソースに正常に接続できる場合。
ファイルを手動で置き換える
配布元が明確で、現在のコアが扱える形式のデータファイルだけを使用してください。まずコアを停止して元のファイルを保管し、コアが実際に読み込む場所にある同名ファイルを置き換えます。読み込みエラーが発生した場合は、保管しておいたファイルに戻してください。
適した用途:内蔵ダウンロードの失敗、配置先やデータ互換性の問題を調べる場合。
解説記事に載っている固定のパスを頼りに、ファイルの場所を決めつけないでください。インストール方法、OS、クライアントのバージョンによってデータの保存先は異なります。クライアントの設定、起動ログ、実際のファイル位置を照らし合わせ、コアが読み込むパスを確認しましょう。メインプログラムと同じ場所にdatファイルがあっても、実行中のコアがそれを使っているとは限りません。
- 形式を合わせる:この記事のdatルール構文はXrayとV2Fly向けです。他の形式のファイルは、拡張子を変えただけでは使用できません。
- データソースをそろえる:2つのファイルは、信頼できる同じ更新元から取得するのがおすすめです。カテゴリの定義が異なる場合に、原因を調べる手間を減らせます。
- 失敗したら元に戻す:置き換え後に起動できなくなったら、まず直前に使えていたファイルに戻してからエラーの詳細を確認します。クライアントの再インストール、ノードの変更、DNSの変更を同時に行わないでください。
ルールの書き方と順序:具体的なルールを先に、フォールバックを最後に
XrayとV2Flyの一般的なfieldルーティングは、ルールを上から順に評価し、最初に一致したルールで出口を決めます。すべてのTCP・UDP通信に一致するルールを先頭に置くと、後続の中国国内向け直接接続ルールが機能しにくくなります。以下は5つのルールの例です。プライベートアドレスを優先し、中国国内のドメインとIPを直接接続にし、最後にプロキシへフォールバックします。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["domain:localhost"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
ここで使うdirectとproxyは出口を示す例のタグであり、コアが自動で作成するキーワードではありません。完全な設定では、同じ名前のoutboundを定義しておく必要があります。クライアントが生成するタグは異なる場合があるため、実際の設定を確認してください。単一ルールだけを受け付ける入力欄にJSON全体を貼り付けたり、v2rayNが自動生成する実行設定を直接上書きしたりしないでください。次回起動時に再生成される可能性があります。
- プライベートアドレスを優先する:LAN内の接続先を先に直接接続できるようにします。ただし、OSのルーティング、ファイアウォール、TUNの除外設定の代わりにはなりません。
- ドメインとIPのルールを分ける:
geosite:cnはdomain配列に、geoip:cnはip配列に指定します。 - AND条件と誤解しない:1つのfieldルールにdomainやipなど異なる条件を同時に記述すると、通常はすべての条件を満たす必要があります。「ドメインまたはIP」で判定したい場合は、ルールを分けると明確です。
- 独自の例外を先に置く:特定のサイトを必ずプロキシ経由にしたい場合は、対象を明示したドメインルールを、広範囲に適用される中国国内向け直接接続ルールより前に置きます。
DNSとルールデータベース:ファイル更新だけでは結果が変わらないことも
domainStrategyはルーティング判定時にドメインをどう扱うかを指定するもので、DNS設定全体を表すものではありません。AsIsはルーティングのIP照合のためにドメインを積極的に名前解決しません。IPIfNonMatchはドメインルールに一致しなかった場合に名前解決を試み、その後も判定を続けます。IPOnDemandは照合の過程でIPが必要になった時点で名前解決します。後者2つを選ぶ場合は、DNSリゾルバー、ネットワークの到達性、プライバシーへの影響も考慮してください。「中国国内のサイトが直接接続になるか」だけで選ぶことはできません。
サイトを直接接続にするか判断するとき、IPアドレスの地域だけでサイトの所在地を決めないでください。CDNの影響で、同じドメインでもネットワークによって異なるIPアドレスが返ることがあり、データベースにも更新周期があります。特定のサイトに明確な要件がある場合、地域ルールを何度も調整するより、対象を絞ったドメインルールを使うほうが管理しやすくなります。
- まず、通信がコアに届いた時点で接続先がドメインかIPかを確認し、アプリの通信が本当にプロキシを経由しているか調べます。
- 次に、ルーティングログに記録された接続先と出口タグを確認します。必要であれば一時的にログの詳細度を上げ、調査後に元へ戻してください。
- 最後に、DNSの名前解決とデータベースのカテゴリを確認します。ブラウザーに表示される出口IPだけで、すべてのリソース通信を判断しないでください。
更新後も反映されない場合:エラーの種類に応じて確認
更新は成功したのに、中国国内のサイトがプロキシ経由になるのはなぜ?
まず、現在有効なルーティングプリセットを確認し、「すべてプロキシ」のような広範囲に一致するルールが先にないか調べます。現在のモードで振り分けが有効になっていることを確認したら、対象ドメインがコアに届いているか、ログに実際どの出口タグが記録されているかを確認してください。データベースを更新しても、ルーティングプリセットは自動で切り替わりません。
ログにgeositeのカテゴリがないと表示されたら、ノードを変更すべき?
まずノードを変更する必要はありません。エラーに記載されたカテゴリ名を控え、使用中のデータソースにそのカテゴリがあるか、コアが更新後のファイルを読み込んでいるかを確認します。以前のファイルに戻すか、未対応のカテゴリ参照を削除して設定を再読み込みしてから、接続をテストしてください。
geoip:privateを設定しても、LAN内の機器に接続できないのはなぜ?
まず、ルールがプロキシへのフォールバックより前にあることと、クライアントが対象の通信を処理していることを確認します。ルーターの管理画面にアクセスする場合は、実際のIPアドレスを直接指定してテストし、ドメインの名前解決失敗とIP接続失敗を切り分けます。その後、TUNのルーティング、LANへのアクセス権限、機器のファイアウォールを確認してください。
更新後に起動できなくなりました。データベースだけ元に戻せますか?
コアを停止し、以前使えていた2つのファイルに戻してから再起動してください。元に戻してもエラーが続く場合は、ルーティングやコアの種類も最近変更していないか確認します。データベース、ルーティング、コアを個別に戻せば、問題の原因となった変更を特定しやすくなります。
更新頻度は必要に応じて決めればよく、接続のたびに更新する必要はありません。データソースを変更したとき、カテゴリの不足に気づいたとき、ルールの不具合を調べるときに更新しましょう。サブスクリプションの更新はノード情報、Geoの更新はルールの一覧、ルーティングの編集は通信の行き先を扱います。この3つを分けて対応することで、トラブルシューティングの記録が役立ちます。項目をさらに確認する場合はルーティング設定リファレンスをご覧ください。接続自体に問題がある場合は、まず接続トラブルの対処方法で基本的な通信経路を確認してください。
クライアントとプラットフォームの選択
OSに合ったv2rayNのインストーラーを選び、サブスクリプションのインポートと基本的な接続確認を行います。まず接続できることを確認してから、ルーティングやデータベースを一つずつ調整すれば、問題が起きても元に戻しやすくなります。