ノードのインポートが済み、プロキシ接続は使えるものの、ルーティングルールをまだ整理していない方向けです。デスクトップ版v2rayNのXrayコアを対象に、3種類のアウトバウンドと6つの基本ルールを設定し、システムプロキシの入口、ルールの優先順位、ドメイン解決の条件を確認します。基本方針は、中国本土向けのカテゴリを直結し、それ以外はプロキシへ送る保守的な構成です。広告カテゴリは最上位に独立して配置するため、誤ブロックが起きても個別に無効化できます。
1. リクエストの入口を確認する
ルーティングは、ブラウザーに表示されたURLを見て自動的に「国内・海外」を判定する仕組みではありません。コアが受け取った宛先ドメイン、宛先IP、ポートなどをルールと照合します。リクエストがv2rayNのローカルインバウンドに届かなければ、この記事のルーティングは適用されません。システムプロキシの設定が反映されるのは、通常、その設定に従うアプリだけです。独自に直接接続するプログラムは、個別にプロキシを設定するか、Tunで通信を取り込む必要があります。
この記事では、v2rayN 7.xデスクトップ版の設定項目を例に、まずシステムプロキシで動作を確認します。Tunは同時に有効にしません。小規模なバージョン更新でボタンの位置が変わる場合があります。「設定」→「パラメーター設定」でローカルの待ち受けポートを確認し、「設定」→「ルーティング設定」でルールセットを管理してください。別のコアが有効な場合は、先にXrayへ切り替え、ノードに接続できることを確認してから、以下のXrayルール例を適用します。
- 接続を確認済みのサーバーを選び、アクティブサーバーに設定します。まずはノード接続自体の問題を切り分けてください。
- ローカルのHTTPまたは混合インバウンドで実際に使われているポートを確認します。SOCKS専用ポートをHTTPプロキシのポートとして扱わないでください。
- トレイメニューの「システムプロキシ」から「システムプロキシを自動設定」を選び、ブラウザーの拡張機能がシステムプロキシを上書きしていないことを確認します。
- 現在のルーティングルールセットをバックアップし、テスト用のコピーを作成します。入口が書き換えられないよう、ほかのプロキシソフトは一時的に終了してください。
10808は後述のコマンドで使う例示値です。この数値に変更する必要があるという意味でも、すべての環境での既定ポートという意味でもありません。「パラメーター設定」で、HTTPまたは混合プロキシのリクエストを受け付けるポートとして表示されている場合に限り、そのままコマンドを実行できます。
2. 直結・プロキシ・ブロックの3種類の出口を設定する
v2rayNは、アクティブサーバーと画面上の設定を組み合わせて、コアの設定を生成します。通常、ルールのアウトバウンド項目ではdirect、proxy、blockを選択できます。これらは生成設定内のタグであり、ノードのプロトコル名ではありません。VMessやVLESSのノードもプロキシアウトバウンドとして利用でき、ルーティングの構文を別の形式に書き換える必要はありません。
接続先の出口
- 直結タグ
direct- プロキシタグ
proxy- プロキシの接続先
- 現在のアクティブサーバー
- 適用範囲
- 中国本土のカテゴリは直結、それ以外のリクエストはプロキシ
直結でも、この端末のネットワークを経由して宛先にアクセスします。ルールに一致しても、宛先に必ず到達できるとは限りません。
ブロックとフォールバック
- ブロックタグ
block- ブロックするカテゴリ
geosite:category-ads-all- フォールバック先
proxy- フォールバック対象のネットワーク
tcp,udp
ブロックされるのはルールに一致したリクエストだけです。Webページの表示内容を判別して、あらゆる広告をブロックするものではありません。
「設定」→「ルーティング設定」でテスト用のルールセットを作成し、ルールごとにドメイン、IP、ネットワーク、アウトバウンドタグを指定します。保存した後、そのルールセットを現在使用する設定として選択してください。編集しただけでアクティブなルールセットを切り替えていない場合、アクセス結果は変わりません。画面に表示されるタグがこの記事と異なる場合は、現在の生成設定にあるoutbounds[].tagを確認し、存在しないタグを指定しないでください。
3. 6つのルールを順番に設定する
Xrayのルーティングは上から順に評価され、最初に一致したルールが適用されます。同じルールにドメインとポートを両方指定した場合、両方の条件を満たす必要があります。一方、同じドメインリスト内の複数の項目は、いずれか1つに一致すれば対象です。すべてのドメイン、IP、ポートを1つのルールに詰め込むと、本来の「または」を誤って「かつ」として設定しやすくなります。
| 順序 | 一致条件 | アウトバウンド | 用途 |
|---|---|---|---|
| 1 | geosite:category-ads-all | block | 広告カテゴリのドメインを先にブロック |
| 2 | geoip:private | direct | プライベートアドレス(イントラネット、ループバックなど)を直結 |
| 3 | geosite:cn | direct | 中国本土のドメインカテゴリを直結 |
| 4 | geoip:cn | direct | 宛先IPが中国本土のアドレスと判明している場合は直結 |
| 5 | full:example.com | proxy | ドメインを完全一致させるプロキシルールの例 |
| 6 | network: tcp,udp | proxy | 残りのリクエストはすべてプロキシへ |
5つ目のルールには、動作確認しやすいようドキュメント用のサンプルドメインを使っています。通常の運用では削除できます。先行するカテゴリルールに含まれているサイトをプロキシへ強制的に送るには、そのサイト専用のルールを該当カテゴリより前に移動してください。ルールの条件が「具体的」でも、自動的に優先されるわけではありません。適用順を決めるのは配置位置です。
以下はXrayのrouting設定例です。各フィールドの意味を確認するための抜粋であり、単体で起動できる完全な設定でも、v2rayNのGUIにインポートできるルール形式でもありません。GUIのインポート機能を使う場合は、現在のバージョンからエクスポートしたルールの構造を確認してください。この抜粋を完全なルールファイルとして読み込むことはできません。
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
geosite:cnはドメインのカテゴリであり、サイトのサーバー所在地をリアルタイムに判定するものではありません。geoip:cnはIPアドレスの集合で、サイト運営者の所在地を示すものでもありません。国境をまたぐCDNや、海外でホスティングされている中国本土のサイトは、想定と異なる結果になることがあります。特定のサイトで経路が合わない場合は、カテゴリ全体を何度も変更するより、ドメイン例外を追加するほうが管理しやすくなります。
4. AsIsを選び、フォールバックルールで名前解決条件を覆わない
この例ではAsIsを明示的に使用し、ルーティングのためにドメインを積極的に名前解決しません。リクエストにドメイン名が含まれていれば、主にドメインルールで判定します。最初からIPアドレスが含まれているリクエストには、IPルールを適用できます。したがって、4つ目のルールがあるからといって、未分類のドメインがすべて先に名前解決され、中国本土のIPなら直結するわけではありません。
- AsIs:まず安定したドメイン振り分けの基準を作るのに適しています。中国本土のドメインカテゴリに一致しないリクエストはプロキシへ送られるため、ローカルの名前解決結果によって経路が変わる可能性を抑えられます。
- IPIfNonMatch:ドメインルールに一致しなかった場合に限り、名前解決を試みてIPルールでもう一度照合します。IPルールに遭遇するたびに、ただちに名前解決が行われるわけではありません。
- IPOnDemand:照合にIP情報が必要になると、名前解決が行われる場合があります。利用するかどうかは、DNSへの到達性、名前解決の待ち時間、CDNが返すアドレスも含めて検討してください。
結論:全リクエストに一致するフォールバックを残すなら、まずAsIsを使う
最後のtcp,udpルールはドメイン照合の段階でも一致するため、IPIfNonMatchの「一致しなかった場合に名前解決する」処理が実行されないことがあります。IP情報も使って振り分けたい場合は、フォールバックの構成を見直すか、IPOnDemandを検討してください。ポリシー名だけを変更して、設定が有効になったと判断しないようにしましょう。
ルーティングのドメイン戦略と、DNSクエリがどの出口を通るかは別の問題です。AsIsを選んでも、システムがDNSクエリを行わないわけではなく、すべての名前解決がプロキシ経由になるわけでもありません。アプリが事前にドメインをIPへ解決する場合、プロキシプロトコルがドメインをリモート側へ渡す場合、コアが直結先を解決する場合では、それぞれ名前解決の経路が異なります。まずリクエストがコアに届いた時点でドメイン名とIPのどちらを含んでいるかを確認し、そのうえでドメインルールに一致しない理由を調べてください。
5. 出口アドレスだけでなく、カテゴリごとに動作を確認する
ルールセットを保存して有効にしたら、まずコアが正常に起動するか確認します。ドメインカテゴリが見つからない、geoデータの読み込みに失敗するといったエラーが出た場合は、クライアントのデータ更新機能を使って、現在のコアに対応するデータファイルを更新し、コアを再起動してください。起動に失敗していると、ブラウザーのキャッシュや残ったシステムプロキシ設定によって、一部だけ動作しているように見えることがあります。
- プロキシの確認:以下のコマンドでサンプルドメインにリクエストし、アクセスログにプロキシのアウトバウンドタグが記録されるか確認します。ポートが10808でない場合は、画面に表示されている実際のHTTPまたは混合ポートに置き換えてください。
- 直結の確認:現在の
geosite:cnデータに含まれていることが分かっているドメインを選び、ドメイン名、時刻、アウトバウンドタグを記録します。サイトが開けたことだけでは、直結した証拠にはなりません。 - ブロックの確認:現在の広告カテゴリから既知の項目を選び、ログで
blockが使われているか確認します。ブロック機能を検証する場合は、full:example.comの単独ルールを一時的に最上位へ移動してブロックに設定できます。確認後は元に戻してください。 - フォールバックの確認:先行ルールの対象外となる宛先を使い、プロキシへ送られることを確認します。UDP通信が失敗する場合は、ノードと転送方式が該当するUDP転送に対応しているかも確認してください。
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
コマンドの10秒は接続タイムアウトの上限、20秒はリクエスト全体の制限時間であり、実測の遅延ではありません。HTTPステータスが返ればリクエストへの応答があったことを示しますが、接続が閉じられたからといって、必ずブロックに一致したとは限りません。ログもあわせて確認してください。HEADリクエストに対応していないサイトでは、通常のGETに切り替えてルーティング結果を比較できます。
- 通常のログにアクセス記録が出ない場合は、「設定」→「パラメーター設定」のログ関連項目でアクセスログの設定を確認してください。詳細度を一時的に上げ、検証が終わったら元に戻します。
- 1回の検証で変更するルールは1つにし、「宛先」「想定するアウトバウンド」「実際のアウトバウンド」の3項目を記録します。DNS、ノード、ルーティングを同時に変更しないでください。
- ルールを変更したら、接続を新たに開始してください。ブラウザーの既存の長時間接続は、以前の接続を使い続けることがあります。必要に応じて対象のタブを閉じてから再試行します。
6. よくあるルーティングの問題と対処法
中国本土のサイトがプロキシ経由になるのは、どこを見直せばよいですか?
まず、編集したルールセットが現在有効になっているか確認し、次にプロキシのフォールバックが中国本土向けルールより上にないかを確認します。順序に問題がなければ、コアが受け取っているのがドメイン名かIPかを調べ、現在のgeositeデータにそのドメインが含まれているか確認してください。直結が必要な場合は、フォールバックより前にdomain:のドメイン例外を追加します。未知のリクエストをすべて直結に変更するのは避けてください。
広告ブロックを有効にした後、ログインページが正しく表示されない場合は?
まず広告カテゴリのルールを一時的に無効にして再試行し、問題が解消するか確認します。誤ブロックが原因なら、ログからログイン、認証コード、静的ファイルの各ドメインを特定し、直結またはプロキシの例外を追加して、広告ブロックより前に配置してください。ページが白いという理由だけで、ドメインのサフィックス全体を広く許可しないようにしましょう。
ブラウザーは振り分けられるのに、別のプログラムには反映されないのはなぜですか?
そのプログラムがシステムプロキシに従うか確認してください。手動設定に対応している場合は、127.0.0.1と実際の待ち受けポートを入力し、HTTPまたはSOCKSの適切な種類を選びます。プロキシ設定に従わない通信を取り込む必要がある場合に限り、Tunを個別に検証してください。有効にする前に、システムの権限とイントラネットへのアクセス要件も確認します。
サブスクリプションを更新すると、自分で作成したルーティング設定は上書きされますか?
ノードのサブスクリプションとローカルのルーティングルールセットは別の設定項目です。通常のノード更新で、独立して保存したルーティングが書き換えられることはありません。ただし、クライアント設定全体のインポートや、リモートルーティングルールセットの更新によって、ルールの内容が変わる場合があります。個別の例外は管理可能なローカルルールセットに保存し、更新後はアクティブなルールセット、ルール順、アウトバウンドタグを確認してください。
管理しやすいルーティング設定では、各ルールの目的を説明できます。ブロック対象を先に処理し、条件に応じてイントラネットと中国本土のカテゴリを直結し、特殊なドメインは個別のルールで上書きし、それ以外は明示的にプロキシへ送ります。まずこの基本構成を十分に検証してから、ゲーム、ダウンロード、業務サービス向けの専用ルールを追加しましょう。問題が起きても、どの変更が原因か特定しやすくなります。