サブスクリプションとノードの接続設定が済み、中国国内のサイトには直接接続し、中国国外のサイトにはプロキシを使いたいv2rayNユーザー向けです。ドメインセットとIPセットの違いを確認し、ドメイン解決方針を選んでから、ルールを順に設定してログで検証します。末尾に全通信をプロキシへ送るルールを置くとgeoipによる判定が機能しない場合がある点にも触れます。サンプルはコアのルーティング部分で、クライアントにそのままインポートできる完全な設定ではありません。
1. geositeとgeoipがそれぞれ照合する対象
v2rayNはクライアントの画面で、接続を実際に処理するのは選択中のコアです。サブスクリプションには主にサーバーアドレス、プロトコル、認証情報、通信方式が含まれ、ルーティングによってローカルコアに入った接続の出力先が決まります。サブスクリプションを更新してもルーティング用データベースは更新されず、カスタムルールの順序も自動では修正されません。
geositeはドメインの集合、geoipはIPアドレスの集合を照合します。いずれも対応するデータファイルに依存しており、名前だけを見てリアルタイムの位置情報サービスと考えることはできません。特にgeosite:cnはデータベースで管理されるドメイン分類を指します。「.cnで終わるすべてのサイト」という意味でも、サーバーの物理的な所在地を保証するものでもありません。
| 条件 | 照合対象 | 主な用途 | 注意点 |
|---|---|---|---|
geosite:cn | 接続先ドメイン | データベースに登録された中国国内サイトを直接接続 | 分類は使用するgeositeデータによって異なる |
geosite:category-ads-all | 広告関連ドメイン | block経由で遮断 | データファイルに該当カテゴリが必要 |
geoip:cn | 接続先IP | 中国のIPアドレス範囲を直接接続 | ドメイン接続では先に名前解決が必要な場合がある |
geoip:private | プライベート・ローカルアドレスの集合 | LAN内の機器へのアクセス | データセットの定義に従う。LAN内のすべてのドメインとは限らない |
full:example.com | 完全一致のドメイン | 特定ドメインへの例外ルール | サブドメインには一致しない |
domain:example.com | ドメインとそのサブドメイン | 同じサイト群の接続先を統一 | 完全一致のドメインルールより広い範囲に適用 |
ここでのexample.comは構文を説明するための例であり、実際に追加するルールではありません。自分の環境を確認するときは、ブラウザーやコアのログに表示された実際のホスト名を使ってください。1つのページから複数のドメインが読み込まれることがあります。トップページに直接接続できても、ログインAPIや画像、動画にも同じルールが適用されるとは限りません。
2. domainStrategyの選び方:ドメインとIPのどちらを先に判定するか
routing.domainStrategyは、ルーティングの判定時に接続先ドメインを名前解決するかどうかを決めます。DNSサーバーのアドレスでも、direct出力内部の名前解決方針でもありません。似た名前でも役割は異なります。一方は「出力先の選択」に使うIPを取得し、もう一方は「直接接続の確立時」にアドレスを解決する場合があります。
IPIfNonMatch
おすすめまず接続時点で得られている情報を使ってルールを照合します。ドメイン段階でどのルールにも一致しなければ、名前解決してIP条件を試します。この記事の「ドメイン優先、IPで補完」という構成に適しています。ただし、全通信を対象とするルールに先に捕捉されず、未一致の状態が保たれる必要があります。
適する構成:ドメインルールを中心にgeoipで補完し、デフォルトの出力先が明確な場合
AsIs
ルーティング段階で追加の名前解決を行いません。ドメイン名で渡された接続は主にドメインルールで判定し、IPアドレスで渡された接続は引き続きIPルールに一致します。接続処理全体でDNSが使われないという意味ではありません。
適する構成:ドメインルールで判定でき、ルーティング段階での追加照会を避けたい場合
IPOnDemand
判定中にIPが必要なルールがあると、ドメインを名前解決します。プライベートアドレスや国別IPのルールが前にある場合、ドメイン接続でも早い段階でDNS照会が発生することがあります。末尾のフォールバックより前にあるIPルールを判定できますが、名前解決の結果にも左右されます。
適する構成:接続先IPによる判定が必要で、DNSの動作も検証済みの場合
見落としやすいのは、IPIfNonMatchを使いながら末尾にnetwork: tcp,udp → proxyを追加するケースです。このルールは最初の判定で接続を捕捉できるため、「どのルールにも一致しない」状態になりません。その結果、ドメイン解決による再判定が行われず、先行するgeoip:cnでもこのドメイン接続を補完できない場合があります。
- この記事の構成を使う場合:全通信を対象にするフォールバックルールは置かず、生成された設定で最初の出力先が
proxyであることを確認します。どのルーティングルールにも一致しない場合、コアは最初の出力先を使います。 - 末尾に明示的なフォールバックを置く場合:
IPOnDemandへの変更を検討し、判定に必要なIPルールをフォールバックより前に配置したうえで、DNSと出力先のログを確認してください。 - ドメインだけで振り分ける場合:
AsIsを選べますが、ドメイン接続がgeoip:cnで自動的に補完されることは期待しないでください。
3. direct・proxy・blockとルールの順序
コアはルールを上から順に確認し、最初に一致したルールの出力先を使います。ここでのdirect、proxy、blockは出力タグであり、書くだけで有効になるキーワードではありません。完全な設定には同じ名前の出力先が必要です。カスタム設定で別のタグを使う場合は、ルーティング側の参照も合わせて変更してください。
直接接続とプロキシの出力先
- 直接接続タグ
direct- 直接接続の実装
- 通常はfreedom出力を使用
- プロキシタグ
proxy- プロキシの接続先
- 現在選択中の利用可能なノード
- どのルールにも一致しない通信
- この記事では最初の出力先をproxyに設定
ノードを切り替えるとプロキシの接続先は変わりますが、ルールの照合順は変わりません。
ブロックとルールの前提
- ブロック用タグ
block- ブロックの実装
- 通常はblackhole出力を使用
- ドメインデータベース
geosite.dat- IPデータベース
geoip.dat- 照合の原則
- 上から順に確認し、最初に一致したルールを適用
データファイルがない場合や分類が存在しない場合、コアが設定を読み込めないことがあります。まず起動ログのエラーを確認してください。
推奨順は、必要な個別サイトの例外、広告ブロック、LANアドレスの直接接続、中国国内ドメインの直接接続、中国国内IPの直接接続です。最後はデフォルトの出力先に任せます。例外ルールを先頭に置くのは、より広い分類に先に一致するのを防ぐためです。ただし後続の広告ルールにも優先するため、本当に必要なドメインだけを追加してください。
| 優先度 | ルールの用途 | 出力先 | 配置する理由 |
|---|---|---|---|
| 1 | 特定サイトへの個別例外 | directまたはproxy | 後続の広範な分類より優先 |
| 2 | 広告ドメインの集合 | block | 中国国内の直接接続ルールより先に判定 |
| 3 | プライベートIPとローカルネットワーク | direct | LAN内の接続をリモートノードへ送らない |
| 4 | 中国国内ドメインの集合 | direct | ドメインで判定できる場合、IPによる再判定を待たない |
| 5 | 中国国内IPの集合 | direct | IPアドレスを直接指定した接続や未登録ドメインを補完 |
| デフォルト | どのルールにも一致しない接続 | proxy | 生成された設定の最初の出力先を使用 |
4. v2rayNで独立したルーティング設定を作成する
以下のメニューは、v2rayN 7.xのWindows WPF版を基準にしています。デスクトップ版や細かなバージョンの違いにより、ボタン名が異なる場合があります。同じ名前の項目が見つからない場合は、現在の画面の設定メニューでルーティング編集機能を確認してください。以下のコアJSONをノードアドレス欄やサブスクリプション欄に貼り付けないでください。設定前に現在のルーティング設定を保存しておくと、元に戻しやすくなります。
-
ノードが使えることを確認
メイン画面で利用可能なノードを選び、使用中のサーバーに設定します。まず既存のルーティング設定でウェブサイトにアクセスできることを確認してください。ノード自体のタイムアウト、認証失敗、TLSハンドシェイク失敗が起きる場合は、先にトラブル対処を確認してください。ルーティングルールではリモート接続の問題を解決できません。
-
ルーティング設定を開く
「設定」→「ルーティング設定」を開き、新しいルーティング設定を作成して「中国国内直結テスト」と名付けます。画面に高度なルーティングを有効にする項目がある場合は、詳細ルールを有効にし、新しい設定を現在のルーティングとして選択してください。
-
ドメインの判定方針を選択
ルーティング設定のドメイン判定方針で
IPIfNonMatchを選びます。続けて、末尾に「すべてのTCP・UDPをプロキシ経由にする」ルールがないか確認してください。この記事の構成ではそのルールを使わず、デフォルトの出力先をproxyにします。 -
条件を分けて追加
広告ドメイン、プライベートIP、中国国内ドメイン、中国国内IPの順に4つのルールを追加します。
geosite:はドメイン条件に、geoip:はIP条件に使います。「どちらか一方に一致」という意味で、同じルールにドメイン条件とIP条件を同時に設定しないでください。 -
保存して確認
設定を保存し、コアに設定を再読み込みさせます。生成された設定のルール順、出力タグ、
outboundsの順序を確認してください。デフォルトの出力先がproxyでない場合は、使用中のバージョンにあるデフォルト出力先の設定を変更するか、前述の明示的なフォールバック方式を使ってください。 -
項目ごとにテスト
ノード、ブラウザー、プロキシの接続方式を変えずに、中国国内ドメイン、中国国外ドメイン、LAN内IPをそれぞれテストします。変更のたびに新しい接続を作り、ブラウザーが既存の接続を再利用しないようにしてください。ログの出力先が想定どおりであることを確認できて初めて、ルールが機能していると判断できます。
1つのfieldルール内では、通常、異なる種類の条件はすべて満たす必要があります。同じ条件配列に複数の値がある場合は、そのうち1つに一致すれば該当します。domainとipを同じルールにまとめても、2つの独立した直接接続ルールの代わりにはなりません。手書きの設定でもGUIでの編集でも起こりやすい間違いです。
5. コアのルーティング例:ドメイン優先、IPで補完
以下に示すのはroutingオブジェクトのみです。inbound、ノードの認証情報、DNS、outboundの定義は含まれていないため、完全な設定ではなく、v2rayNのルーティング設定にインポートできる形式でもありません。画面上でルールを1つずつ入力する際の参考にしてください。カスタムのコア設定に使う場合は、既存の設定構造に統合し、3つの出力タグがすべて存在することを確認してください。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"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"
}
]
}
}
- デフォルトのプロキシに関する前提:完全な設定で
outbounds[0].tagがproxyになっている必要があります。上記のルーティング部分だけでは、一致しない接続がプロキシ経由になるとは限りません。 - カテゴリに関する前提:使用中のデータファイルに
cn、private、category-ads-allが含まれている必要があります。データベースを入れ替えたら、これらのカテゴリを引き続き読み込めるか確認してください。 - IPアドレスを直接指定する接続:
192.168.1.1へのアクセスはIP条件で直接照合でき、ドメインの名前解決を待つ必要はありません。機器がこのアドレスを使っていない場合は、実際の機器アドレスでテストしてください。 - ドメイン接続:まず広告と中国国内ドメインの分類を照合します。一致しなければ、判定方針に従って名前解決し、IP条件を照合します。名前解決に失敗した場合、利用可能な接続先IPが自動的に得られるわけではありません。
中国国内の分類に含まれるサイトを常にプロキシ経由にしたい場合は、広告ルールより前に個別のドメイン例外を追加してproxyを指定します。特定のサブドメインだけに問題がある場合は、すぐに親ドメイン全体とすべてのサブドメインへ範囲を広げず、まずfull:で完全一致させてください。
6. 振り分けを検証する:接続経路・DNS・出力先を確認
ウェブページが開けても、何らかの接続経路が使えたことしか分からず、想定した出力先が使われた証拠にはなりません。テストではまずノードを固定し、アプリが使用するローカルプロキシポートを確認します。v2rayNでよく使われるローカル待ち受けポートは10808ですが、既存の環境で変更されている場合もあります。現在の設定とコアの起動ログを確認し、固定ポートと決めつけないでください。
| テスト対象 | 想定される結果 | 確認する内容 |
|---|---|---|
| cnセットに含まれることを確認したドメイン | direct | ログに表示された接続先ドメインと出力タグ |
| 直接接続の分類に一致しない中国国外のドメイン | proxy | デフォルトの出力先がプロキシかどうか |
192.168.1.1など、実際のLAN内アドレス | direct | 接続がコアに届いているか、プライベートIPルールに一致しているか |
| ログに実際に表示された広告ドメイン | block | 現在の分類に含まれているか、例外ルールが先に一致していないか |
特定のドメインを維持したままSOCKSプロキシに渡す必要がある場合は、以下のテストコマンドを使えます。socks5hのhは、接続先ドメインの名前解決をプロキシ側で行うことを意味します。ローカルで先に名前解決し、IPアドレスだけをコアに渡す動作を避けられます。コマンドの実行には、ローカルポートでSOCKSサービスが待ち受けていることと、curlがインストールされていることが必要です。
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://www.baidu.com/ --output /dev/null
上記の出力例はLinuxおよびmacOSのターミナル向けです。Windowsのコマンドプロンプトでは/dev/nullをNULに置き換え、必要に応じてcurl.exeを実行してください。接続タイムアウト10秒、全体のタイムアウト20秒はテスト用の上限であり、実測の遅延や速度を示すものではありません。このドメインを直接接続するかどうかは、使用中のデータファイルとログで確認してください。
- 接続ログがない:アプリがプロキシを迂回していないか、待ち受けポートが正しいか、コアが起動しているかを先に確認してください。最初からgeositeを変更する必要はありません。
- ドメインはログにあるが出力先が違う:ルールの順序、カテゴリの内容、現在のルーティング設定、先に一致する全通信ルールがないかを確認してください。
- ログにIPアドレスしか表示されない:アプリがローカルで名前解決している可能性があります。ドメインルールはIPアドレスだけの接続先には直接一致しません。対応プロトコルではスニッフィングでドメイン情報を取得できる場合がありますが、すべての通信で復元できるわけではありません。
- 名前解決に失敗する、または不審なアドレスが返る:現在のDNS設定と名前解決経路を確認してください。ルーティングによる出力先の選択と、DNSクエリの出力経路は関連しますが別の問題です。すべてのDNSリクエストを一律に直接接続させないでください。
7. よくある質問:ルールが効かない、広告を誤ってブロックする
geoip:cnを設定したのに、中国国内のサイトがプロキシ経由になるのはなぜ?
「設定」→「ルーティング設定」を開き、現在の設定とドメイン判定方針を確認します。IPIfNonMatchを使っている場合は、末尾にTCP・UDPをすべてプロキシへ送るルールがないか確認してください。このルールが最初の判定を終わらせている可能性があります。続いて、ログの接続先がドメインかIPか、実際の解決先アドレスが現在のgeoipデータのcn分類に含まれているかを確認してください。
広告ルールを最後に置いたのに、まったく効かないのはなぜ?
geosite:category-ads-all → blockを中国国内の直接接続ルールや広範なプロキシルールより前に移動し、保存後に設定を再読み込みして、ブラウザーで新しい接続を作成してください。それでも一致しない場合は、そのドメインが現在の分類に含まれているか確認します。ページに広告が表示されるだけで失敗と判断しないでください。コンテンツとドメインを共用する広告は、ドメイン単位のブロックに向かない場合があります。
ルーティングを変更したらコアが起動しなくなりました。まず何を確認すればよいですか?
まず元のルーティング設定に戻して接続を復旧し、コアの起動ログを確認してください。データファイルの読み込み失敗、カテゴリの欠落、出力タグの参照ミス、JSON構文エラーを重点的に確認します。geosite.datや指定したカテゴリを読み込めないというエラーがある場合は、ルールを追加し続けるのではなく、データの入手元とファイルの場所を修正してください。
LAN内の管理画面が開かない場合、どのルールを追加すればよいですか?
まず機器の実際のIPアドレスでアクセスし、プライベートIPルールの出力先がdirectになっていることを確認します。独自のLAN内ドメインを使う場合は、ローカルDNSで正しく名前解決できるかも確認してください。実際のドメインに対する完全一致の直接接続例外を追加する方法もあります。ドメインルーティングによって、存在しないDNSレコードがアクセス可能なアドレスに変わることはありません。
このルールをAndroidクライアントにそのままコピーできますか?
v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。基本的なルーティングの考え方は似ていますが、画面上の項目、インポート形式、データ分類、コアの機能はそれぞれ確認が必要です。「ルール条件と順序」は移行できますが、v2rayNのクライアントバックアップを汎用設定としてそのまま使わないでください。移行後もデフォルトの出力先とDNSを確認してください。
検証済みのルーティング設定を1つ保存しておきましょう。その後、特定サイトで問題が起きたら、ドメイン分類、IP分類、DNS、ノード接続のどこに原因があるかを確認し、一度に変更する項目は1つに絞ります。そのうえで必要最小限の例外を追加します。こうすれば変更の原因を把握しやすく、改善しなかった場合も元に戻しやすくなります。
- 保存前の確認:ドメイン条件とIP条件を正しい欄に入力し、広告ルールがより広いルールに上書きされていないこと。
- 有効化後の確認:デフォルトの出力先がproxyで、LAN内および中国国内のテスト接続がdirectを使うこと。
- データ更新後の確認:コアが正常にデータを読み込み、必要なカテゴリが存在し、主要サイトの振り分けに予期しない変化がないこと。
- トラブルの情報を共有する場合:必要なルールと個人情報を伏せたログだけを提示し、サブスクリプションURLやノードの認証情報は公開しないでください。