ドメインの分類、IPアドレスの分類、出力タグをまず区別し、「個別の例外、国内ドメイン、国内およびプライベートアドレス、その他はプロキシ」の順にルールを並べます。ノードのインポート後にv2rayNの振り分けを調整したい方向けに、V2Ray/Xrayの従来型ルーティング設定例を示し、DNS、ルールデータ、クライアントが生成する設定の違いも解説します。
geosite・geoip・プロキシ出力を区別する
ルーティングで決めるのは「この接続をどの出力に渡すか」であり、「どのプロトコルのノードを使うか」ではありません。VMessやVLESSなどはプロキシ出力の接続方式で、geosite:cnとgeoip:cnは判定条件です。サブスクリプション内のノードプロトコルが変わっても、実際の出力タグが同じなら、ルーティングルールを変更する必要はありません。
| 記述 | マッチ対象 | ここからは判断できないこと |
|---|---|---|
geosite:cn | 現在のルールデータでcnに分類されているドメイン | 中国語のウェブサイトすべてではなく、中国本土のIPアドレスすべてを指すわけでもありません |
geoip:cn | 現在のルールデータでCNに分類されているIPアドレス範囲 | サイト運営者の所在地や接続品質は判断できません |
geoip:private | ルールデータで定義されたプライベートアドレスおよび特殊用途アドレス | OSのローカルネットワーク向けルーティングすべてを代替するものではありません |
outboundTag | 既存の出力に設定されたtag文字列 | proxyと書いても、プロキシノードが自動で作成されるわけではありません |
従来型の設定では、通常geosite.datとgeoip.datから分類データを読み込みます。ここでの「cn」はデータ上の分類名であり、コアがオンラインで判定した地理情報ではありません。ルールデータの提供元、公開日、分類の更新方法によって結果は変わります。新しく有効になったドメインが分類に含まれていない場合は、まず完全一致の例外を追加し、その後にデータの更新を検討してください。
ルールの順序を決めて中国本土は直結、その他はプロキシにする
ルーティングルールは通常、配列の先頭から順に判定され、最初に条件をすべて満たしたルールの出力が選ばれます。より「具体的」な次のルールを自動で探すことはありません。1つのルールにdomain、ip、portなど複数の条件を指定した場合、通常はすべての条件を満たす必要があります。同じdomainリスト内の複数項目は、いずれか1つに一致すれば対象です。
構成例:中国本土は直結、それ以外はプロキシ
ドメインルール
- まず、プロキシ経由または直結に固定するドメインの例外を指定します。
- 次に
geosite:cnで中国本土のドメイン分類にマッチさせます。 - ドメインルールに一致した接続は、それ以降のIPルールでは判定されません。
IPルールとフォールバック
geoip:privateでプライベートアドレスを処理します。geoip:cnで中国本土のIPアドレスを処理します。- 最後に、残りのTCP・UDP接続をプロキシ出力に渡します。
個別の例外は広範な分類より前に置きます。プロキシへのフォールバックは最後に置き、ドメインの名前解決方針と組み合わせてください。
たとえばcn分類に含まれるドメインでも、プロキシ経由にしたい場合は、そのドメイン用のプロキシルールをgeosite:cnより前に置きます。最後にプロキシルールを追加するだけでは、先行する直結ルールで判定が終わるため効果がありません。逆に「すべてのTCP・UDPをプロキシにする」ルールを先頭に置くと、後続の中国本土向け振り分けが機能しなくなります。
full:example.com:この完全一致ドメインだけにマッチし、サブドメインは含みません。domain:example.com:このドメインとサブドメインにマッチし、notexample.comにはマッチしません。regexp::正規表現を使う場合に指定します。一般的なサイトの例外には、広くマッチしすぎるのを避けるため、前の2種類を優先してください。
JSON設定とdomainStrategyを確認する
以下はルーティング部分の設定例であり、ノード、インバウンド、DNSを含む完全な設定ではありません。proxyというタグの使用可能なプロキシ出力と、directというタグでプロトコルがfreedomの直結出力が、すでに設定されている前提です。例のexample.comは個別例外の説明用です。不要な場合は最初のルールを削除してください。
{
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
ここでは意図的にIPOnDemandを指定しています。ドメインが最初の2つのルールにマッチせず、IPルールの判定に進むと、ドメインを名前解決して結果のIPアドレスを使い、中国本土またはプライベートアドレスに分類されるか調べます。cnのドメイン分類にマッチした接続は、その時点で直結が決まるため、後続ルールのために名前解決する必要はありません。リクエストが最初からIPアドレスの場合は、そのままアドレスの判定に進みます。
この記事の設定
- 名前解決の方針
IPOnDemand- 中国本土のドメイン
geosite:cn → direct- 中国本土およびプライベートIP
geoip:cn / private → direct- 最終フォールバック
tcp,udp → proxy
IP条件の判定時に必要に応じて名前解決します。この記事のように明示的なフォールバックを設ける構成に適していますが、名前解決の失敗や結果の誤りは判定に影響します。
別の設定方法
- 名前解決の方針
IPIfNonMatch- 名前解決のタイミング
- ドメインがどのルールにもマッチしなかった後
- 広範なフォールバック
- すべての接続を先に拾わない
- マッチしなかった場合の動作
- 通常は設定内で最初に定義された出力に渡されます
出力の並び順も確認が必要です。この記事の方針名だけを変更しても、同じ動作になるとは限りません。
AsIsでは、ルーティング判定のためにドメインをIPアドレスへ積極的に名前解決しません。主にドメインルールを使う構成には適していますが、ドメインだけのリクエストが自動的にgeoip:cnにマッチするわけではありません。また、ルーティングのdomainStrategyと直結出力にある同名の設定は役割が異なります。前者はマッチ方法を決め、後者は接続先アドレスの扱いに影響します。互いに代用はできません。
v2rayNでルールを保存して動作を確認する
ここでは、「設定」と「ルーティング設定」から操作できるv2rayNの中国語デスクトップ画面を前提に説明します。バージョンによってダイアログの配置やルール編集ボタンの表記は異なる場合があります。まず現在有効なルーティング設定を確認してから、ルールを変更してください。この記事の設定例はV2Ray/XrayのJSON形式です。JSONを受け付けない1行入力欄には貼り付けないでください。
-
元の設定を残す
「設定」→「ルーティング設定」を開き、現在有効なルールを記録して元の内容を保存します。ルーティング設定を追加できる場合は、既存の有効なルールを上書きせず、テスト用の設定を新たに作成してください。
-
出力を確認する
現在のノードが接続できることを確認し、クライアントのルールが使う直結・プロキシ出力の識別子を確認します。例の
proxyとdirectは、実際に生成される設定のタグに対応している必要があります。ノードの表示名で代用することはできません。 -
順番に入力する
「設定」→「ルーティング設定」で対象のルールを編集し、例と同じ順序でdomain、ip、network、出力先を設定します。ドメインの名前解決方針には
IPOnDemandを指定し、すべての条件を1つのルールにまとめないでください。 -
適用して再接続する
ルールを保存して有効にし、コアを再起動するか、画面の案内に従って設定を適用します。全通信をプロキシまたは直結にする強制モードが有効でないことを確認してから、新しい接続でテストしてください。既存の長時間接続はすぐに経路が切り替わるとは限りません。
-
ログを確認する
クライアントのログを開き、中国本土のドメイン、その他のドメイン、ローカルネットワークのアドレスにそれぞれアクセスします。アクセスログが使える場合は、接続先アドレスと選択された出力タグを確認してください。ルールデータの読み込み失敗や出力が見つからないエラーが出たら、先に設定を修正してからテストを続けます。
クライアントは、画面上の設定に基づいてコアの設定を再生成することがよくあります。一時的に生成されたファイルを直接編集すると、ノードの切り替えや再起動で上書きされる場合があります。ルールを継続して使うには、クライアントが対応するルーティング設定画面に保存してください。完全なカスタム設定を使う場合に限り、JSON全体を自分で管理します。
Androidでは、v2rayNGはXrayコア、v2flyNGはv2flyコアを使用します。ルール項目が似ていても、画面上の設定場所、内蔵ルールデータ、自作設定のインポート方法まで同じとは限りません。ルールを移行する際は、使用中のコアとクライアントが対応する設定機能を確認してください。サブスクリプションURLをルーティングルールとしてインポートすることもできません。
ポート・ログ・DNSを順に確認して通信を振り分ける
動作確認では、ウェブページの表示速度だけでなく、通信がコアに届いたか、どの出力にマッチしたかを確認します。DNSキャッシュ、接続の再利用、接続先のキャッシュだけでも表示速度は大きく変わりますが、正しいルーティングの証明にはなりません。以下の3つの数値はテスト用であり、本サイトで測定した結果でも、すべてのクライアントの初期値でもありません。
まず「設定」→「パラメーター設定」でローカルの待ち受けポートとSOCKS対応を確認します。ローカルSOCKSが実際に127.0.0.1:10808で待ち受けている場合は、ターミナルで次のコマンドを実行できます。Windowsではcurl.exeを明示的に呼び出してください。socks5hでは接続先ドメインの名前解決をプロキシ側に任せるため、ドメインルールの確認に適しています。socks5は通常ローカルで名前解決するため、コアに渡る時点ですでにIPアドレスになっている場合があります。
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://www.baidu.com/
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://example.com/
- 1つ目は中国本土のドメインへの接続経路を確認するコマンドです。実際に直結されるかどうかは、現在のgeositeデータとログで確認してください。
- 2つ目は最初の例外ルールを残した場合、ドメインの例外ルールによって
proxyが選ばれるはずです。 - リクエストがタイムアウトしても、ルールにマッチしていないとは限りません。プロキシノード、接続先サービス、DNSがそれぞれ利用可能か確認してください。
- 変更のたびに新しいリクエストを送信し、ブラウザーが既存の接続を再利用しないようにしてください。
アプリがIPアドレスだけをコアに渡す場合、ドメインルールにマッチさせるためのドメイン情報がない可能性があります。スニッフィングで一部のプロトコルや接続からドメインを補える場合もありますが、すべての通信を識別できるとは限らず、判定結果が変わることもあります。トラブルシューティングでは、まず実際に渡される接続先の形式を記録してから、スニッフィングの設定を検討してください。DNS、スニッフィング、ルーティングを同時に変更すると、原因を特定しにくくなります。
中国本土のサイトがプロキシ経由になる・ルールが効かない場合
geosite:cnを追加しても、中国本土のサイトがプロキシ経由になる場合
まず「設定」→「ルーティング設定」で対象のルールが有効か確認し、その前に全通信をプロキシにするルールがないか調べます。ログでドメインが分類に含まれていないと分かった場合は、domain:の例外を一時的に追加し、フォールバックより前に置いてください。IPアドレスとして受信している場合は、ドメインルールを追加し続けるのではなく、geoipとDNSを確認します。
geositeやgeoipの読み込みエラーが出る場合
エラーに示されたルールデータ名、分類名、パスを確認します。クライアントのデータ更新機能を使って該当ファイルを復元し、コアを再起動してください。別形式のルールファイルを.datにリネームして使わないでください。カスタムデータソースを使う場合は、cnやprivateなど必要な分類が実際に含まれているかも確認します。
IPIfNonMatchに変更したら、国内IPルールにマッチしなくなった場合
末尾にnetwork: tcp,udpのような全接続を対象にするルールが残っていないか確認します。ドメインが先にこのルールにマッチすると、「マッチしなかった場合に名前解決する」動作は行われません。この記事のIPOnDemandの構成に戻すか、先行するフォールバックを含めないルールに再設計し、最初に選ばれる出力も確認してください。
ローカルネットワークに接続できないとき、privateを追加すれば解決する?
まず、実際のアドレスを確認します。たとえばゲートウェイが本当に192.168.1.1かを調べてください。リクエストがコアに届いている場合は、プライベートアドレスがdirectにマッチしているか確認します。TUNの除外設定、OSのルーティング、ファイアウォールに阻まれている場合、コアのルーティングだけでは解決できません。直結はローカル側の出力を選ぶことを意味するだけで、接続先に必ず到達できるとは限りません。
サブスクリプションを更新しても通信の振り分けが変わらない理由
通常、ノードのサブスクリプションで更新されるのは接続パラメーターであり、ルールデータやローカルのルーティング設定まで同期されるわけではありません。サブスクリプションの更新、geoデータの更新、現在のルーティング設定を個別に確認してください。一度に変更する項目を1つに絞り、同じテスト用ドメインでログを再確認すると、変更の原因を特定できます。
設定を管理するときは、ドメイン、希望する出力、追加理由を記した簡潔な例外リストを保管してください。分類を増やす前に、広すぎるルールや並び順を見直しましょう。中国本土は直結、それ以外はプロキシという構成は、動作を説明しやすい初期設定の1つであり、あらゆるネットワーク環境における唯一の正解ではありません。実際の利用目的、名前解決の結果、コアのログを確認して判断してください。