この記事は、Shadowrocketに自分のサーバー設定を読み込み済みで、特定のサイトだけをPROXY経由にしたい方を対象としています。Global Routing → Configを有効にし、現在の設定に対象ドメインを先に記述してから、残りのリクエストをFINAL,DIRECTで処理します。設定後は接続アイコンだけで判断せず、リクエストログで実際に適用されたルールを確認してください。
1. Global Routingと設定ファイルの役割を確認する
「特定のサイトだけをPROXY経由にする」には、ルールによる振り分けが必要です。接続スイッチをオンにするだけでは実現できません。Homeで選択するサーバーはプロキシの出口となり、Configで有効にする設定ファイルが、どのリクエストをその出口に送るかを決めます。この記事では、ご自身のサービスやサブスクリプションをすでに利用していることを前提とし、接続先の入手方法は扱いません。
HomeでGlobal Routingを開き、Configを選択してから、Configで現在有効になっている設定ファイルを確認します。Proxyは対象となるトラフィックをプロキシに転送し、Directは直接接続します。この2つのモードでは、この記事で扱う個別ルールの動作を確認できません。Sceneは状況に応じてルーティング動作を選ぶ機能です。最初の切り分けではConfigに固定し、Sceneの切り替えによる影響を避けてください。
ルール内のPROXYはポリシー名、Global RoutingのProxyはルーティングモードです。混同しないでください。DIRECTは接続先に直接接続することを示し、リクエストがシステムのVPNトンネルを通らないという意味ではありません。ステータスバーにVPNの表示があっても、トンネルの接続状態が分かるだけで、特定のサイトがプロキシ経由で接続されている証拠にはなりません。
- Home:利用可能なサーバーを選択し、接続スイッチがオンになっていることを確認します。
- Home → Global Routing → Config:現在の設定ファイルにあるルールで通信を振り分けます。
- Config:編集するファイルが有効になっていることを確認します。同じ名前の別ファイルと取り違えないようにしてください。
- Settings → On Demand:条件に応じて接続を確立する動作を設定します。ドメインの振り分けルールを代替する機能ではありません。
2. 最小限のルールを書く:指定ドメインはPROXY、それ以外はDIRECT
編集前に現在の設定をバックアップし、復元できるコピーを残してください。以下はルール構成の例です。example.comは説明用のサンプルドメインなので、実際に照合したいサイトのドメインに置き換えてください。サブスクリプションURLやサーバーアドレスではありません。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
各行の項目は半角カンマで区切ります。1行目のDOMAIN-SUFFIXはexample.com自体とそのサブドメイン(例:www.example.com、static.example.com)に一致し、notexample.comには一致しません。最後のFINAL,DIRECTはドメイン条件を確認せず、それまでのルールに一致しなかったリクエストをDIRECTに送ります。
- Configを開き、現在有効な設定ファイルを見つけて、バックアップを保存するかコピーを作成します。
- その設定ファイルの編集画面を開き、Ruleに対応するルール一覧を探します。テキスト編集の場合は
[Rule]を見つけてください。 - 対象ドメインのルールは、その範囲に含まれる広いルールより前に置き、
FINAL,DIRECTは最後に配置します。 - 設定を保存して有効にし、Homeに戻ってGlobal RoutingがConfigになっていることを再確認します。
- テストするリクエストをもう一度発生させます。以前の接続の動作が残っている場合は、接続を終了してから再テストし、必要に応じてトンネルを再接続してください。
設定全体を末尾に重複して追加し、複数の[Rule]セクションやFINALができないようにしてください。また、PROXYが指す出口を利用できるか確認します。ルールは接続先を決めるものであり、サーバーに到達できない、認証情報が誤っている、サーバー側の設定が一致しないといった問題は解決できません。
3. DOMAIN-SUFFIXとDOMAIN-KEYWORDの使い分け
対象が少数の明確なサイトであれば、まずDOMAIN-SUFFIXを使います。ドメインの境界に沿って照合するため、キーワード検索より範囲を制御しやすくなります。特定のホストだけを対象にし、ほかのサブドメインを含めたくない場合はDOMAINで完全一致させます。
ドメインの境界で照合
- キーワード
- DOMAIN-SUFFIX
- ルール全体
DOMAIN-SUFFIX,example.com,PROXY- 一致する例
- example.com、img.example.com
- 一致しない例
- notexample.com
サイトのメインドメインが分かっており、そのサブドメインも対象にしたい場合に適しています。
ドメイン文字列で照合
- キーワード
- DOMAIN-KEYWORD
- ルール全体
DOMAIN-KEYWORD,example,PROXY- 一致する例
- example.com、notexample.com
- 対象範囲のリスク
- 関係のないサイトまで含む可能性
キーワードはブランドを識別するものではありません。実際に一致する範囲をリクエストログで確認してください。
DOMAIN-KEYWORDはドメイン内に指定した文字列が含まれるかを確認するルールで、URL全体を検索するものではありません。たとえばhttps://www.example.com/video?id=8のパス/videoやクエリパラメーターid=8は、このルールの照合対象ではありません。ドメイン欄にhttps://やパス、ページタイトルを記述しても、Webページのパスによる振り分けにはなりません。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
このルール構成では、例外としてlogin.example.comをDIRECTにし、それ以外のexample.comのドメインをPROXY経由にします。同じ設定に範囲の広いDOMAIN-KEYWORDを追加している場合は、DIRECTにしたいサイトまで含まれていないか、あらためて確認してください。
4. ルールの順序:例外を先に、一般的な条件を後に
ルールは上から順に確認され、最初に一致したルールのポリシーが適用されます。後により具体的な条件があっても、判定は自動で変更されません。そのため「具体的な例外を先に、範囲ルールを後に、FINALを最後に」という順序が管理しやすくなります。
| 並び順 | リクエストのドメイン | 想定される結果 |
|---|---|---|
| DOMAINの完全一致例外をDOMAIN-SUFFIXより前に配置 | login.example.com |
例外に先に一致し、DIRECT |
| DOMAIN-SUFFIXを完全一致例外より前に配置 | login.example.com |
サフィックスルールに先に一致し、PROXY |
| 対象ドメインのルールより前にFINALを配置 | www.example.com |
FINALが先に処理し、後続のルールは一致しない |
| 対象のサフィックスルールと末尾のFINAL,DIRECTのみ | www.example.net |
対象のサフィックスに一致せず、最後にDIRECT |
確認方法:テストするドメインを最初のルールから順に当てはめる
最初に一致した条件とそのポリシーを記録します。そこで結果が決まった場合は、リストの末尾に修正ルールを追加するのではなく、そのルールの位置や範囲を調整してください。
GEOIPとIP-CIDRの条件は、ドメインルールとは異なります。GEOIPは接続先IPを地理情報データベースの結果で照合し、IP-CIDRはアドレス範囲で照合します。どちらも「特定のサイトブランド」を正確に指定する方法ではありません。同じサイトが複数地域のアドレスを使うことも、1つのアドレスで複数のサイトが運用されることもあります。
GEOIP,CN,DIRECT:データベースでCNと判定された接続先IPに一致します。末尾がFINAL,DIRECTの最小構成では、「それ以外を直接接続する」ためだけに追加する必要は通常ありません。IP-CIDR,192.0.2.0/24,DIRECT,no-resolve:構文例です。アドレス範囲は説明用です。no-resolveは、このIPルールのためにドメイン解決を積極的に行わないことを示します。- 範囲の広いIP条件をドメインの例外より前に置く場合は、名前解決や照合の動作を考慮し、別の条件に先に処理されないようにしてください。
5. 保存後の確認方法:Webページが開くかどうかだけで判断しない
Webページが開けても、リクエストに利用可能な経路があると分かるだけで、出口が正しいとは限りません。まず対象ドメインと対象外のドメインを1つずつ使って比較し、その後サブドメインや例外ドメインも追加して確認します。以下は検証項目であり、特定のネットワーク環境における速度測定結果ではありません。
- Homeで利用可能なサーバーが選択され、Global RoutingがConfigになっており、接続が確立していることを確認します。
- 現在のリクエストログまたは接続詳細を開き、フィルター条件をクリアしてから対象ページに再アクセスします。以前の記録を新しい結果と取り違えないようにしてください。
- 対象のホスト名を探し、一致したルールと出口ポリシーを確認します。対象ドメインには指定したDOMAINまたはDOMAIN-SUFFIXが一致し、PROXYが適用されている必要があります。
- ルールに記載していないドメインにアクセスし、FINAL,DIRECTで処理されることを確認します。別のルールに一致した場合はConfigに戻り、それより前の項目を確認してください。
- 例外ドメインと対象のサブドメインをテストし、最後にページ全体を開いて、画像、ログイン、動画のリクエストがそれぞれ想定どおりか確認します。
1つのページが1つのドメインだけで構成されているとは限りません。本文、静的ファイル、ログインAPI、メディアコンテンツが別々のホストから配信される場合があります。トップページは表示されても画像が出ない場合は、リクエストログで失敗したリソースの実際のドメインを確認してからルールを追加するか判断してください。短く範囲の広いキーワードを安易に追加しないでください。
6. よくある質問:ルールを変更しても想定どおりにならない
FINAL,DIRECTを追加しても、多くのサイトがPROXY経由になるのはなぜですか?
まずHome → Global RoutingでConfigが選択されていることを確認し、リクエストに最初に一致したルールを調べてください。前方にPROXYを指定するDOMAIN-KEYWORD、ルールセット、IP条件が残っていれば、それらを調整します。FINALが処理するのは、それ以前のルールに一致しなかったリクエストだけです。
特定のサブドメインだけをプロキシ経由にし、サイト全体を対象にしない方法は?
DOMAIN,video.example.com,PROXYを使い、末尾にはFINAL,DIRECTを残します。対象と競合する範囲の広いサフィックスルールやキーワードルールがないか確認して削除し、video.example.comとwww.example.comを個別にテストしてください。
自分のサブスクリプションを更新したら、出口や設定の動作が変わったのはなぜですか?
サーバーのサブスクリプション更新と、リモート設定の更新を分けて確認してください。前者は選択できるサーバーを変更する場合があり、後者はRuleの内容を変更する場合があります。Homeで選択中のサーバーを確認し、Configで有効なファイルとルールを確認してください。ローカルの変更は別のコピーに保存し、更新前後を比較します。
振り分けにはOn Demandをオフにする必要がありますか?
必要ありません。Settings → On Demandは条件に応じて接続を確立するタイミングを決め、Config内のRuleは接続確立後の振り分け方法を決めます。切り分け中は一時的に手動で接続し、テスト条件を固定できます。ルールの検証後、ご利用のネットワーク環境に適したOn Demandの設定に戻してください。
設定を見直すときは、一度に変更する要素を1つにします。まず出口が利用可能か確認し、次にモード、さらに有効なファイル、照合条件、ルールの順序を確認します。ドメインルールを追加した理由を記録し、固定のテスト対象も残してください。問題が起きた場合、設定全体を書き直さずに直近の変更を戻せます。
- 基本構成:指定ドメインはPROXY、末尾にFINAL,DIRECT。
- 範囲の選択:ドメインが明確な場合はDOMAINまたはDOMAIN-SUFFIXを優先し、DOMAIN-KEYWORDは慎重に使います。
- 確認する項目:リクエストログの接続先、適用されたルール、実際の出口が一致していること。