Shadowrocketで特定のサイトだけをプロキシ接続するには、対象ドメインのルールをPROXYにし、ルール末尾にFINAL,DIRECTを設定したうえで、Home → Global RoutingでConfigを選ぶ必要があります。この記事では、自分で用意したサービスとサブスクリプションがあり、利用可能なサーバーを追加済みであることを前提に、最小限のルール、設定手順、項目ごとの確認方法を説明します。「接続スイッチがオン」というだけでは、ルールどおりに振り分けられている証明にはなりません。
1. まずConfigを選択してからドメインルールを設定
Global Routingでは、接続に使用するルーティング方式を選択します。一部のサイトだけをプロキシ接続するには、設定ファイルに基づく振り分けが必要です。まずHome → Global RoutingでConfigを選択してください。ルールを編集してもProxyやDirectのままでは、この記事のルール設定どおりに動作するか確認できません。
Config
おすすめ現在有効な設定のルールに従って接続先を決定します。対象ドメインの接続先にはPROXYを指定でき、先行するルールに一致しないリクエストはFINAL,DIRECTで処理されます。
用途:指定したサイトだけをプロキシ接続し、ほかのリクエストは直接接続する。
Proxy
プロキシ経由で接続します。この記事のドメインリストに沿って、リクエストごとに直接接続するかどうかを判定する方式ではありません。サーバーが利用可能か一時的に確認する比較手段にはなりますが、ドメインルールが正しいことの証明にはなりません。
用途:プロキシ接続を一時的に確認してから、Configに戻して振り分けを検証する。
Direct
直接接続する方式です。この記事のPROXYルールを設定しても、ルールに基づく振り分けには自動で切り替わりません。
用途:現在のネットワークで直接接続できるか確認する。
Scene
シーンに応じたルーティングを行い、結果は実際のシーン設定によって変わります。この記事で使う固定のドメインリストを確認するための方式ではありません。シーンを設定済みの場合は、別途内容を確認してください。
用途:シーンの条件を設定して使うことが決まっている場合。
要点:ルーティング方式を固定する
トラブルシューティング中はGlobal RoutingをConfigに固定し、ドメインルールは一度に一か所だけ変更してください。これにより、ルールが一致していないのか、プロキシ接続自体に問題があるのかを切り分けられます。
この記事のPROXYは、ルールに設定するプロキシポリシーです。Global RoutingをProxyに変更するという意味ではありません。前者は特定のルールに一致した後の接続先を決め、後者は全体で使うルーティング方式を決めます。設定する階層が異なります。
2. 最小限のルール:対象を先に、FINAL,DIRECTを最後に
以下はルール部分だけを示す最小限の例です。予約済みのサンプルドメインを使っており、実際に利用できるサービスを示すものではありません。設定時には、ドメインをプロキシ接続したいサイトのホスト名に置き換えてください。既存の設定に必要なほかのセクションは残し、この数行で設定ファイル全体を上書きしないでください。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,api.example.net,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX,example.com,PROXYは、example.comとそのサブドメイン(例:www.example.com)に一致します。DOMAIN,api.example.net,PROXYはホスト名が完全に一致する場合のみ適用され、www.example.netや、その下位サブドメインには一致しません。
ルールは上から順に照合され、一致すると対応するポリシーで処理されます。FINAL,DIRECTにはドメイン指定がなく、それ以前のルールに一致しなかったリクエストをDIRECTにします。対象ドメインのルールより前に置くと、後続のルールが意図どおりに機能しません。
3. Configの編集からHomeでの有効化まで
サーバー情報とルーティング設定は別の項目です。Homeに利用可能なサーバーがあっても、Configのドメインルールが有効とは限りません。既存のサブスクリプションを更新しても、この記事の振り分けリストが自動で設定されるわけではありません。作業前に現在の設定を複製して保存し、元に戻せるようにしてください。
-
設定をバックアップ
Configを開き、現在使用中の設定ファイルを確認して複製を保存します。リモート更新される設定の場合は、編集可能なローカルコピーも保存してください。次回の更新で手動変更が上書きされるのを防げます。
-
ルールを編集
Configで対象の設定ファイルの編集画面を開き、[Rule]を確認します。プロキシ接続するDOMAINまたはDOMAIN-SUFFIXのルールをフォールバックルールより前に置き、最後のルールをFINAL,DIRECTにします。テキスト編集とルールごとの編集の入口は、アプリの現在の表示に従ってください。
-
設定を有効化
保存後、Configに戻り、編集したファイルが選択されていることを確認します。編集画面のままにせず、ファイル名だけで判断しないでください。似た名前のファイルが複数ある場合は、選択したファイルを開き直して内容を確認します。
-
モードを選択
Home → Global Routing → Configの順に開き、Homeに戻って利用可能なサーバーを選択します。この記事のPROXYルールには、実際に利用できるプロキシの接続先が必要です。設定に同名のポリシーグループがある場合は、その選択状態も確認してください。
-
新しいリクエストを送信
接続スイッチをオンにし、対象サイトと対象外サイトに新しいリクエストを送信します。必要に応じて既存の接続を切断してからテストしてください。すでに確立された接続では、変更したルールが反映されたか判断しにくいためです。
既存の設定に追加のポリシーグループや複雑なルールセットがある場合は、用途を理解してから変更してください。今回のポイントはルールを増やすことではなく、対象ドメインが先にPROXYに一致し、ほかのリクエストが最終的にDIRECTへ進むことです。サーバーの変更、DNSの変更、複数ルールの編集を同時に行うと、差が生じた原因を特定しにくくなります。
4. ドメインの入力方法:パスやポートは不要
DOMAINとDOMAIN-SUFFIXが照合するのはホスト名であり、ブラウザーのアドレスバーに表示される完全なURLではありません。HTTPSサイトの一般的な接続先ポートは443ですが、ドメイン欄に:443を追加しないでください。リクエストのパスやクエリパラメーターも、この欄には含めません。
| 記述例 | 照合範囲・注意点 | 使い分け |
|---|---|---|
DOMAIN,example.com,PROXY | example.comのみ一致 | このホスト名だけを対象にする場合に使用 |
DOMAIN-SUFFIX,example.com,PROXY | ルートドメインとそのサブドメインに一致 | wwwやapiなどのサブドメインも対象にする場合に使用 |
DOMAIN-SUFFIX,notexample.com,PROXY | example.comとは別のドメイン | ドメインの末尾一致は、任意の文字列を含むかどうかの判定ではありません |
https://example.com/path | プロトコルとパスを含むため、ドメイン欄には使えません | example.comだけを取り出してルールに入力 |
example.com:443 | ポートが含まれており、ここで指定するホスト名の形式ではありません | ポートを削除してから入力 |
1つのWebページでも、通常は複数のホスト名にリクエストを送信します。メインのページ、画像、ログイン認証、動画、静的リソースが別々のドメインで配信される場合があります。ルートドメインにDOMAIN-SUFFIXを設定しても、そのサブドメインまでしか対象にならず、サイトが利用するすべての外部リソースをカバーするわけではありません。そのため、「トップページは開くが画像が表示されない」場合でも、ルールが機能していないとは限りません。リソースのリクエストがリストに含まれていない可能性があります。
- まずプロキシ接続が必要なメインサイトのドメインを追加し、実際のリクエスト記録を確認して必要なリソースのドメインを追加してください。
- ホスト名を1つだけ対象にする場合は、同じドメイン内の関係ないサービスまで対象にしないよう、DOMAINを優先してください。
comのような範囲の広すぎるサフィックスは指定しないでください。関係のない多数のサイトまでPROXYに一致します。- IP-CIDRはIPアドレスの範囲で照合し、GEOIPはIPアドレスの地理情報データベースで照合します。どちらも、正確なWebサイトのドメインリストをそのまま置き換えるものではありません。
リクエストがIPアドレスに直接接続する場合や、照合時にドメイン情報を利用できない場合、ドメインルールに一致せず、最終的にFINALへ進むことがあります。対象サイトと同じIPアドレスを使っているという理由だけで、アドレス範囲全体をPROXYに指定しないでください。同じIPアドレスでほかのサイトも運用されている可能性があります。
5. 確認方法:対象サイト、比較用サイト、リソースのリクエストを確認
振り分けを確認するには、ページが開くか、システムに接続中の表示が出るかだけでなく、新しいリクエストの実際の接続先を確認します。ページが開いても、今回のアクセスが成功したことしか分かりません。キャッシュ、直接接続の可否、既存の接続によって、誤った設定でも正常に見えることがあります。
- 対象サイト:ルールに追加したドメインを選び、新しいリクエストを送信します。アプリのリクエスト記録でホスト名、適用されたルール、ポリシーを確認し、対象のリクエストがPROXYになっていることを確認してください。
- 比較用サイト:対象リストに含まれておらず、現在のネットワークから直接接続できるサイトにアクセスします。ほかの先行ルールに一致しない場合、FINAL,DIRECTで処理されるのが想定される結果です。
- リソース:対象ページの一部が読み込めない場合は、失敗したリクエストの実際のホスト名を確認します。アドレスバーのドメインとは異なる場合があります。プロキシ接続が必要と確認できてから、個別に追加してください。
- 再テスト:ルールを1か所変更するたびに、対象サイトと比較用サイトへ新しいリクエストを送信してください。前回確立した長時間接続を、今回の変更の確認に使わないでください。
対象リクエストがPROXYに一致しているのにタイムアウトする場合は、まずHomeで選択したサーバーが利用可能か確認します。次に、登録済みのサービス情報にあるサーバーアドレス、ポート、認証情報が正しいか確認してください。記録がDIRECTを示している場合は、ルールの順序、実際のリクエストホスト名、有効な設定ファイルを確認します。接続の問題をルールの構文ミスと取り違えずに済みます。
6. よくある質問:すべてプロキシ接続、またはすべて直接接続になるのはなぜ?
FINAL,DIRECTを追加したのに、ほかのサイトもプロキシ接続されるのはなぜ?
まずHome → Global RoutingがConfigになっているか確認し、次に[Rule]でFINALより前に、より広い範囲を対象とするPROXYルールやルールセットがないか調べます。ルールは一致するとそこで判定が終わります。末尾のDIRECTで、先に確定した判定が覆ることはありません。
指定したサイトもDIRECTになるのは、ドメインの入力ミス?
まずConfigで選択中のファイルを確認し、対象のルールがFINALより前にあるか確認します。次に、実際のリクエストのホスト名を確認してください。サイトが別のドメインにリダイレクトされることがあります。DOMAINはホスト名が完全に一致する場合のみ対象です。ルートドメインとサブドメインの両方を対象にするにはDOMAIN-SUFFIXを使います。
トップページは開くのに、ログインや画像の読み込みに失敗するのはなぜ?
ログインまたは画像のリクエストを再実行し、記録から失敗したホスト名を探します。現在DIRECTとPROXYのどちらで接続されているかを確認してください。リストから漏れていると分かった場合に限り、該当ドメインを追加します。1つのリソースのために、対象を広い共通サフィックス全体へ拡大しないでください。
サブスクリプションを更新すると、手動で追加したルールも変わる?
サーバーのサブスクリプションと設定ファイルの更新は分けて考えてください。サーバーリストだけを更新しても、ローカルの[Rule]が書き換わるわけではありません。ルールを含むリモート設定を更新すると、手動で追加した内容が置き換えられることがあります。Configで現在のファイルを開き直して確認し、別途ローカルコピーを保存してください。
数サイトだけをプロキシ接続するにはOn Demandをオンにする必要がある?
必要ありません。Settings → On Demandはオンデマンド接続を管理する機能で、PROXYにするドメインを指定するものではありません。まず接続を確立した状態でConfigのルールを確認し、その後、接続の必要に応じてOn Demandを個別に設定してください。2つの条件を同時に変えないようにします。
対象サイトと比較用サイトの両方で動作確認できた設定を保存しておきます。あとからサイトを追加する場合は、必要なドメインだけを追加し、末尾のFINAL,DIRECTを維持してください。対象から削除した場合も、そのドメインがDIRECTに戻るか再テストします。ルールリストはサイトの表示名ではなく、実際のリクエストに基づいて管理してください。