V2Rayのルーティング設定|中国国内サイトは直結、海外通信はプロキシへ

v2rayNのカスタムルーティングを例に、domain・ip・outboundTagの役割を解説。直結・プロキシ・ブロックのルール順と設定例を紹介します。

この記事の概要

ノードを追加して接続できているものの、中国国内への直結範囲や海外向けプロキシの適用範囲を調整したい方向けの記事です。まず通信の取り込みとコアのルーティングを分けて考え、v2rayNで専用のルート設定を作成します。V2Ray/Xray形式のJSON例、ルールの順序、確認方法を解説します。例はクライアント設定全体ではないため、適用前に実際のoutboundタグを確認してください。

1. システムプロキシとルーティングの違い

システムプロキシは、アプリが接続をv2rayNのローカル入口に渡すかどうかを決めます。ルーティングは、コアが受け取った接続を直結・プロキシ・ブロックのどれに振り分けるかを決めます。この2つは別の層です。システムプロキシを有効にしても、すべてのアプリが利用するとは限りません。ターミナルや独自のネットワークスタックを使うアプリ、プロキシ除外設定のあるブラウザーは、入口を経由しない場合があります。

アプリのリクエスト ローカル入口 ルール判定 outboundの選択 接続先サービス

この記事では、動作確認の環境としてブラウザーの通信をシステムプロキシ経由にし、TUNは同時に変更しません。VMessやVLESSなどのプロトコルはプロキシ接続の方式であり、中国国内のドメインを直結するかどうかを決めるものではありません。サブスクリプションはノード情報を提供しますが、現在選択中のローカルルート設定の代わりにはなりません。

10808
ローカル入口のポートを確認(実際の設定値を要確認)
3種類
直結・プロキシ・ブロックのoutbound用途
1件
最初に一致したルールで今回の経路が決まる

10808は後述のコマンドで使う例示ポートで、すべての環境のデフォルト値ではありません。まず「設定」→「パラメーター設定」で、ローカルの待ち受けポートと入口の種類を確認してください。そのポートが実際にHTTPプロキシのリクエストを受け付ける場合に限り、記事内のHTTPプロキシ確認コマンドを使用できます。

2. v2rayNで専用のルート設定を作成する

まず現在のルート設定をバックアップし、テスト用の設定を新規作成します。v2rayNの画面はバージョンやデスクトップUIの種類によって異なります。以下では一般的な中国語メニュー名を使っています。ルールJSONをサブスクリプションURL欄に貼り付けたり、実行中に一時生成されたファイルを直接上書きしたりしないでください。

  1. 「設定」→「ルーティング設定」を開き、現在有効な設定を記録してから、画面にエクスポート機能があればコピーを保存します。現在のバージョンにエクスポート機能がない場合は、既存のルールをコピーして控えてください。
  2. ルーティング設定で新しい設定を作成するか、既存の設定を複製し、「中国国内直結テスト」と名付けます。元の設定には手を加えず、ルール一覧の追加・編集・並べ替えでルールを設定してください。
  3. geoip.datとgeosite.datが利用できるか確認します。ログに読み込み失敗やタグが見つからないというメッセージが出る場合は、ルーティングをテストする前にルールファイルの問題を解消してください。
  4. 保存後、メイン画面のルート選択欄で新しい設定に切り替え、コアが正常に再起動したか、設定が再読み込みされたかを確認します。編集しただけで設定を選択していない場合、現在の接続には反映されません。
  5. 問題が発生したら元の設定に戻し、テスト接続を作り直してください。一度の切り分けでノード、DNS、通信の取り込み方式を同時に変更しないでください。

3. domain・ip・outboundTagによるマッチング

ルールは一覧の上から順に評価され、最初に一致したルールのoutboundが適用されます。同じフィールド内に複数の候補がある場合、通常は「いずれかに一致」の条件です。一方、1つのルール内で異なる条件フィールドを併用すると「すべて一致」が条件になります。たとえばdomainとportを指定した場合、ドメインとポートの両方が一致して初めてルールが適用されます。ドメインとIPを同じルールに記述し、どちらか一方が一致すればよいと誤解しないでください。

マッチング対象のフィールド

domain
ドメイン条件の配列。例:domain:example.com
ip
IP、CIDR、geoip分類の配列
port
宛先ポート。例:443 または 80,443
network
ネットワーク種別。例:tcp,udp

異なるフィールドを組み合わせると対象範囲が狭まります。まず単一条件で確認し、その後に条件を追加してください。

ルーティング制御フィールド

type
この記事のルールでは一貫してfieldを使用
outboundTag
既存のoutboundを指すtag
domainStrategy
routing内に置き、ルーティング時のドメイン解決を制御
rules
優先順位順に並べたルール配列

タグは設定内の識別子であり、プロトコル名ではありません。大文字・小文字を含め、outboundのタグと正確に一致させてください。

記述例マッチする範囲注意点
full:example.com指定した完全一致のドメインのみwww.example.comは含まない
domain:example.com指定ドメインとそのサブドメインサイト単位の例外設定に適する
geosite:cnルールファイルに含まれるcnドメインの一覧中国語のすべてのウェブサイトを指すわけではない
geoip:cnルールファイルに含まれる中国のIPアドレス範囲宛先IPまたはルーティング時の名前解決結果に依存
geoip:privateデータファイルで定義されたプライベート・予約済みアドレスの一覧LANなどのアドレスに使用。対象範囲はデータソースによって異なる
192.168.1.0/24指定したIPv4サブネットプライベートアドレス全体より対象を限定できる

プレフィックスのない通常のドメイン文字列は、この種のルールでは部分一致として扱われることがあり、想定より広い範囲にマッチする可能性があります。対象サイトを正確に限定するには、full:またはdomain:を明示してください。また、geosite:cnとgeoip:cnは異なるデータ分類であり、互いに置き換えられる同義の条件ではありません。

4. 直結・プロキシ・ブロックのルール例

ルールの順序は、指定ドメインのブロック、プライベートアドレスの直結、指定ドメインのプロキシ、中国国内ドメインの直結、中国国内IPの直結、その他のTCP/UDPをプロキシ、です。例にあるads.example.comとremote.example.comは記述方法の説明用で、実際の広告リストや利用可能なテストサービスを示すものではありません。

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

これはrouting部分のみの例で、入口・DNS・outboundの定義は含みません。完全な設定にはdirect、proxy、blockの3つのタグがすでに定義されている必要があります。V2Ray/Xrayの設定では、通常、直結にはfreedom outbound、ブロックにはblackhole outboundを使用します。プロキシタグは、選択したノードの実際のoutboundを指します。例を埋めるためだけに、不完全なノード定義を追加しないでください。

要点:ドメインとIPの分類で振り分け、特定サービスには個別ルールを設定する

海外のサイトでも、中国国内のCDNアドレスを使用しているとgeoip:cnに一致し、直結になることがあります。特定のサービスを常にプロキシ経由にするには、「海外サイト」といった自然言語の分類に頼らず、明示的なドメインルールを追加して中国国内向けの分類より前に配置してください。

5. domainStrategyとDNSが実際の通信に与える影響

ドメインルールを適用するには、まずコアが接続先のドメインを取得できる必要があります。アプリからIPアドレスしか渡されない場合、geositeでサイト名を復元することはできません。スニッフィングによって一部の接続からドメイン情報を補える場合もありますが、すべてのプロトコルや接続でドメインを識別できるわけではなく、常に機能するとは限りません。

ポリシールーティングの動作確認するポイント
AsIsルーティング判定のために追加のドメイン解決を行わないドメイン宛ての通信は通常、geoipルールだけでは分類できない
IPIfNonMatchドメイン段階で一致しなかった場合に解決し、IP条件を試す広範囲のフォールバックにすでに一致すると、通常はこの段階で解決されない
IPOnDemandIP条件が必要なルールに達した時点で名前解決を試みる先に評価されるIPルールによって、ドメイン例外より前にoutboundが決まる場合がある

前節では明示的なプロキシのフォールバックを残しています。そのためIPIfNonMatchでは、まだ解決されておらず、中国国内ドメインの一覧にも一致していないドメインが、末尾のプロキシルールに直接一致し、後からgeoip:cnで判定されないことがあります。この例の中国国内IPルールは、主にIPアドレスとしてコアに渡された宛先を対象にしています。未分類ドメインにもIPの地域判定を適用したい場合は、フォールバックと名前解決の方針を見直してください。スイッチを1つ切り替えるだけでは解決できません。

6. 新しい接続とログでルーティングを確認する

ウェブページが表示されても、何らかの経路でアクセスできたことしか確認できず、想定したoutboundを通った証明にはなりません。接続が再利用されると、変更前の経路が残る場合もあります。設定を保存して適用するたびに、古いテスト接続を閉じてからリクエストを送り直してください。必要であればログレベルを一時的にinfoにし、確認後は元に戻します。

  1. v2rayNのログ欄でコアが正常に起動したことを確認します。ルールファイルの欠落、JSONの構文エラー、存在しないoutboundタグなどの問題を先に解消してください。
  2. ブラウザーが実際にローカル入口を使っているか確認し、システムプロキシ設定を書き換える拡張機能は一時的に無効にします。ブラウザーのキャッシュ済みページや別の通信取り込み方式を同時に使って、ルールを判定しないでください。
  3. 中国国内のドメイン、未分類のドメイン、アクセス可能なLANアドレスをそれぞれテストします。宛先・時刻・想定するoutboundを記録し、同じ時間帯のログからルーティング結果を探してください。
  4. 現在のバージョンの通常ログにルールの詳細が表示されない場合は、短時間だけ詳細ログを有効にします。アクセス先がすべて記録されたログを長時間残さないでください。共有する前に機密情報を削除してください。
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://www.baidu.com/
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/

Windows PowerShellでcurlが別のコマンドに割り当てられている場合は、curl.exeを使用してください。この2つのコマンドは指定した入口を通じて新しいリクエストを送るためのものです。HTTPステータスコード、タイムアウト、レスポンスヘッダーだけでは、outboundの選択を確認できません。HEADリクエストを受け付けないサービスもあるため、それだけを根拠にルーティングエラーと判断しないでください。

7. カスタムルーティングでよくある質問

中国国内のサイトがまだプロキシ経由です。まず何を確認すればよいですか?

まずメイン画面で、編集したルート設定が選択されていることを確認します。次にgeosite:cnが正常に読み込まれているかを確認してください。ログで実際のアクセス先ドメインを特定し、そのドメイン用のdomain:直結ルールをフォールバックより前に追加します。サイトのトップページ、ログイン、画像配信で異なるドメインを使う場合があるため、個別に確認してください。

プロキシ対象のドメインを追加したのに、なぜ直結するのですか?

指定したドメインルールを、広範囲な中国国内分類より前に移動し、リクエストからドメインが取得できているか確認してください。必要に応じた名前解決を使う場合は、先に評価されるプライベートIPルールに一致することもあります。接続を作り直してoutboundタグを確認し、古い接続を再利用しているタブを再読み込みするだけで済ませないでください。

サブスクリプションの更新でカスタムルーティングは上書きされますか?

通常、ノードのサブスクリプション更新とローカルのルート設定は別々に管理されます。更新後も、現在選択されているルート設定を確認してください。完全な設定のインポートやバックアップの復元では、ルーティング内容が変わる可能性があります。専用の設定を残し、エクスポートしたコピーを保管しておくと、どの層で変更が起きたかをすばやく確認できます。

同じJSONをAndroidクライアントにそのまま貼り付けられますか?

コア設定の一部を、どのクライアントでも使える画面インポート形式として扱うことはできません。v2rayNGはXray、v2flyNGはv2flyを使用します。関連フィールドの基本構造は共通していますが、画面上のルール編集方法やコアのバージョンはそれぞれ異なります。まずクライアントのルーティング編集機能で同等のルールを作成し、データファイル、タグ、実際の適用結果を確認してください。

安定したルーティング設定に必要なのは、ルールを増やすことではありません。明確な例外を少数に絞り、中国国内向けの分類ルールと最後のフォールバックを適切に使い分けましょう。一度に変更するのは1か所だけにし、再現できるテスト対象を記録してください。「中国国内サイトが直結しない」「指定したサービスがプロキシを通らない」といった問題も、入口、宛先の種類、ルールの順序、outboundの4段階に分けて切り分けられます。

v2rayNをダウンロードデスクトップ・Androidクライアント