サブスクリプションをインポートしてノードに接続できるものの、システムプロキシとルーティングモードの違いがわからない方向けの記事です。まずブラウザーの通信をv2rayNに通し、「中国本土を除外」プリセットで直結とプロキシを振り分け、最後に接続ログで結果を確認します。プリセットは維持し、本当に必要なドメインだけ例外ルールを追加します。
システムプロキシとルーティングの違い
システムプロキシは「リクエストをクライアントに渡すか」を決め、ルーティングルールは「渡された通信をどこへ出すか」を決めます。別々の設定です。「中国本土を除外」を選んでも、システムプロキシを使わず、個別にプロキシを設定していないアプリは、通常のネットワークから直接アクセスする場合があります。
ブラウザーでWebページを開く場合を例にすると、システムプロキシを有効にすると、設定に対応したブラウザーは接続をローカルの待ち受けポートに渡します。コアは接続先ドメインやIPアドレスなどを条件にルールを照合します。直結ルールに一致した通信は端末のネットワークから送信され、プロキシルールに一致した通信は選択中のノードに渡されます。
つまり、「システムプロキシを設定する」ことは「すべてのサイトをノード経由にする」ことではなく、「システムプロキシを解除する」ことも「クライアント内のルーティングルールを無効にする」ことではありません。原因を調べる前に、リクエストがコアに届いているか、どのルールに一致したかを確認しましょう。誤った段階の設定を繰り返し変更せずに済みます。
「中国本土を除外」を選び、元の設定を残す
v2rayNのバージョンによって、メニューの場所やプリセット名が多少異なる場合があります。一般的なデスクトップ版では、「設定」→「ルーティング設定」でルールを管理し、メイン画面下部のルーティング選択欄で方式を切り替えます。ここでいう「中国本土を除外」は、中国本土のドメインやアドレスには直結し、それ以外のリクエストは通常プロキシに送るプリセットです。実際の出力先は、ドメインとIPアドレスの照合ルールで決まります。
- 現在の設定を記録します。ルーティング方式、システムプロキシの状態、接続中のサーバーを控えておきます。プリセットを変更する場合は、まず自分用の設定として複製しましょう。画面からエクスポートできる場合は、バックアップも保存します。
- ノードが使えることを確認します。サブスクリプションをインポートしたら、使用するサーバーを選び、正常に接続できることを確かめます。サブスクリプションURLはサーバー設定を提供するもので、ルーティング方針をすべて自動で決めるものではありません。
- ローカルの入口を確認します。「設定」→「パラメーター設定」を開き、ローカル待ち受けポートに関する項目を探します。画面に表示されたアドレス、ポート、対応プロキシプロトコルを控えてください。他の人のポート番号をそのまま使わないでください。
- システムプロキシを設定します。メイン画面またはトレイメニューの「システムプロキシ」から「システムプロキシを自動設定」を選びます。「システムプロキシを解除」のままになっていないことを確認してください。
- 振り分けプリセットを選びます。ルーティング選択欄で「中国本土を除外」または同等の方式に切り替えます。中国本土向けの通信が直結になるルールと、どのルールにも一致しない場合の既定の出力先を確認してください。
- 接続をやり直します。設定を保存し、画面の案内に従ってコアを再起動します。切り替え前の接続が再利用されないよう、古いWebページ接続を閉じてからテストサイトにアクセスしてください。
「グローバルプロキシ」を国内・海外の振り分け設定として常用しないでください。接続先サービスにノード経由でアクセスできるか、一時的に確認する用途には使えますが、国内サイトの接続元も変わります。テスト後は目的の振り分け方式に戻し、接続を確立し直してください。
この3つの数値は、それぞれローカルの入口、Webの接続先、ドメイン名の名前解決に使われ、互いに置き換えることはできません。以下の10808は説明用の値で、すべての環境の既定ポートを示すものではありません。実際の待ち受けポートが異なる場合は、テストコマンドも合わせて変更してください。
直結・プロキシ・ブロックとルールの順序
ルーティングルールは通常、上から順に照合され、最初に一致したルールで出力先が決まります。範囲の広いルールを前に置きすぎると、後続の細かな例外ルールが適用されないことがあります。カスタマイズを始めるときは、必要な例外を1つだけ追加し、競合する広範囲ルールより前に配置してください。
| 出力先の種類 | 接続経路 | 用途 | 確認ポイント |
|---|---|---|---|
| 直結 | 端末のネットワークから接続先へ直接接続 | 中国本土のサイト、ローカルネットワーク上の機器 | ログでノード経由ではなく直結になっている |
| プロキシ | 接続中のサーバーを経由して接続先に接続 | プロキシ経由でのアクセスが必要な海外サービス | ログでプロキシ経由になっており、ノードも正常に接続している |
| ブロック | コアが一致した接続を拒否または破棄 | アクセスさせたくない特定のドメイン | リクエストが失敗し、該当するブロック記録がある |
画面上の「直結」と、設定に記載される出力先のラベルは別物です。設定によってはdirect、proxy、blockなどのラベルを使いますが、ラベルは単なる名前で、実際に定義された出力先と対応している必要があります。単語だけを書き換えても、対応する接続方式が設定されたことにはなりません。
中国本土向けの直結ルール
- ドメイン条件
geosite:cn- IP条件
geoip:cn- 出力先
- 既存の直結出力先
- ルールの構成
- ドメインとIPを別々のルールにする
同じルールにdomainとipの両方を設定すると、通常は両方の条件を満たす必要があります。「どちらかに一致すれば直結」という意図なら、ルールを分ける方が適切です。
海外サービス向けのプロキシ例外
- 完全一致するドメイン
full:example.com- ドメインとサブドメイン
domain:example.com- 出力先
- 既存のプロキシ出力先
- ルールの位置
- 競合する広範囲ルールより前に配置
example.comは構文説明用です。実際の設定では、振り分けを変更したいサービスのドメインを入力してください。例示用のドメインをサービス一覧として扱わないでください。
geosite:cnはドメインの分類であり、「中国語のWebページすべて」を指すものではありません。geoip:cnはIPアドレスの分類であり、サイト運営者の所在地と同じ意味でもありません。サービスが海外CDNを使う場合もあれば、中国本土のドメインが別地域のアドレスに名前解決される場合もあります。Webサイト名だけで判断せず、実際のリクエストと一致したルールのログを確認してください。
最小限のルールで振り分けを理解する
以下は、Xrayのルーティング構造の一部です。ドメインの例外、中国本土のドメインの直結、中国本土のIPアドレスの直結という順序を理解するための例で、クライアント設定全体ではありません。また、どのv2rayNのルールインポート画面にもそのまま貼り付けられる形式ではありません。画面から編集する場合は、同じ条件を対応するルールにそれぞれ入力してください。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
}
]
}
}
- まず出力先のラベルを確認します。この例では、
proxyとdirectという名前の出力先が設定済みであることを前提にしています。実際の名前が異なる場合は、参照先も合わせて変更してください。 - 名前解決のタイミングを確認します。
IPIfNonMatchは、ドメインがどのルールにも一致しなかった場合にIPアドレスを解決して、IPルールとの照合を続ける設定です。ドメインルールに一致したリクエストは、ルーティングのためにこの処理を行う必要はありません。 - 分類データを確認します。
geositeとgeoipの条件を使うには、コアが対応する分類データを読み込める必要があります。データの読み込みエラーが出た場合は、まずクライアントの更新機能でデータを修復してください。 - 既定の出力先を維持します。この例には、どのルールにも一致しない場合の既定プロキシが定義されていません。Xrayでは通常、ルールに一致しない通信は最初の出力先が使われます。v2rayNでは生成される最終ルールで既定の方針が示される場合もあるため、実際に生成された設定を確認してください。
ブロックルールも、最初に一致したルールが適用されます。対象ドメインの用途を把握している場合に限って追加し、まずは完全一致するドメイン1つで試してください。共有ドメインの分類全体をブロックすると、ログイン、認証コード、静的リソースまで影響し、ページは開いても重要な機能が使えないことがあります。
国内サイトの直結と海外サービスのプロキシ接続を確認する
確認では「接続できたか」だけでなく、「正しい出力先を通ったか」も見ます。ページの表示が速くても直結とは限りません。また、出口IPを確認するページにノードのIPが表示されても、そのページのリクエスト経路がわかるだけで、他のサイトも同じ経路を使う証明にはなりません。
- コアのログを確認します。v2rayNのログ欄で新しい接続記録を探します。現在のログレベルで接続情報が表示されない場合は、「設定」→「パラメーター設定」のコア関連項目でログレベルを一時的に
infoに変更し、適用してからテストし直してください。 - 国内サイトを個別にテストします。普段使っている中国本土のサイト、たとえば
www.baidu.comにアクセスします。ドメインまたは名前解決後の接続先アドレスでログを検索し、直結出力先になっていることを確認してください。 - 海外サービスを個別にテストします。プロキシ経由で使う必要のあるサービスにアクセスし、新しい接続がプロキシ出力先を通っていることを確認します。1つのページが複数のドメインにリクエストする場合は、メインページ、ログインAPI、画像リソースを区別してください。
- 変更前後の結果を記録します。テスト日時、ルーティング方式、対象ドメイン、出力先ラベル、エラーメッセージを記録してください。原因を特定できなくなるのを避けるため、変更は一度に1項目だけにします。ノード、DNS、ルーティングを同時に切り替えないでください。
コマンドラインでローカルのHTTPプロキシを明示的に指定すれば、アプリがシステムプロキシ設定を読み取っていない可能性を切り分けられます。以下はWindowsのcurl.exe用です。127.0.0.1:10808がHTTPプロキシを提供していることが前提です。そのポートがSOCKSにしか対応していない場合、この書き方は使えません。
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://www.baidu.com/
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://www.wikipedia.org/
コマンドの10秒は接続タイムアウトの上限、20秒はリクエスト全体の制限時間であり、速度の測定値ではありません。2つ目のドメインは海外サービスのテスト対象にすぎず、実際にプロキシを通るかは現在のルールとログで確認してください。HTTPステータスコードが返れば応答を受け取ったことになりますが、具体的なステータスはサイト側のアクセス方針にも左右されます。
まとめ:新しい接続を2つ確認する
中国本土のサイトと、プロキシが必要な海外サービスにそれぞれリクエストを送り、ログから各接続の記録を探してください。前者が直結、後者がプロキシ経由になっていることを確認できて初めて、このテストで目的の振り分けができたと判断できます。出口IPを表示するページ1つだけで結論を出さないでください。
振り分けの誤り、ページが開かない問題、サブスクリプション更新の疑問を解決する
DNSは、ルーティングで見落とされやすい要素です。ブラウザーでセキュアDNSを有効にすると、ブラウザー自身がドメインを名前解決する場合があります。リクエストがIPアドレスでコアに届いたときにドメインルールが一致するかは、受信時の情報やスニッフィング設定にも左右されます。問題が起きたからといって、すぐに全体のスニッフィングを有効にしないでください。まずログでドメイン名を取得できているのか、IPアドレスしかないのかを確認しましょう。
「中国本土を除外」を選んだのに、国内サイトがプロキシ経由になるのはなぜ?
まず、上位にすべての通信を対象にしたプロキシルールがないか確認し、次にアクセス先のドメインが分類データに含まれているかを確認します。特定のサービスだけに明確な要件がある場合は、そのサービスの完全一致する直結ルールを中国本土向けの分類ルールより前に追加してください。1つのドメインのために、ルールに一致しない通信をすべて直結に変更しないでください。
ブラウザーは使えるのに、他のアプリがプロキシを使わないのはなぜ?
そのアプリを起動したとき、新しいコア接続の記録が出るか確認します。記録がなければ、アプリがシステムプロキシを参照していない可能性があります。まずアプリ内で実際のローカルプロキシのアドレスとプロトコルを指定してください。そのようなアプリの通信も取り込む必要がある場合は、既存のルーティング方針を維持したうえで、TUNの利用を個別に検討します。
海外のWebページが開かない場合、まずDNSを変更すべき?
まず一時的にグローバルプロキシへ切り替え、同じノードと接続先でテストします。グローバルではアクセスできて振り分け時に失敗するなら、一致したルールと名前解決を重点的に調べます。どちらのモードでも失敗する場合は、ノード接続とログを確認してください。DNSを変更する前に元の設定を記録し、一度に1項目だけ変更してから接続し直します。
サブスクリプションを更新すると、カスタムルールは消える?
通常のサブスクリプション更新で更新されるのは主にサーバー情報で、カスタムルーティングは別に保存されます。設定一式のインポート、バックアップからの復元、設定のリセットは別の操作です。変更前にルーティングをエクスポートするか設定を複製し、更新後は接続中のサーバーと現在のルーティング方式を確認してください。サブスクリプション更新をルールの管理手段として扱わないでください。
テストが終わったら、一時的に変更したログレベルを通常の設定に戻し、動作確認済みのルーティング方式を保存しておきます。相談するときは、必要な対象ドメイン、エラー内容、機密情報を除いた設定の一部だけを共有してください。サブスクリプションURL、ノードの認証情報、アクセス履歴を含む完全なログは公開しないでください。
- まず通信がクライアントに届いていることを確認し、その後にルーティングルールを調べます。
- まずはプリセットを使い、例外ルールは競合するルールより前に置きます。
- ページが開くかだけでなく、中国本土への直結と海外サービスへのプロキシ接続の両方を確認します。
- 問題が起きたら、直前の設定に戻してから項目ごとに原因を調べます。