Shadowrocketで特定のサイトだけプロキシを使う方法|一部のドメインをPROXY、その他を直接接続

一部のサイトだけをプロキシ経由にしたい場合に。対象ドメインにPROXYを指定し、末尾のFINAL,DIRECTでフォールバックするルール設定と、Configでの動作確認方法を解説します。

この記事の要点

Shadowrocketで一部のサイトだけプロキシを使うには、Global RoutingでConfigを選び、対象ドメインのPROXYルールを先に配置して、最後にFINAL,DIRECTを指定します。利用者が自分で接続サービスとサブスクリプションを用意していることを前提に、ドメインリストの作成、設定の反映、接続確認、ルール漏れの調べ方を解説します。設定後は、通常の通信は直接接続し、指定したドメインだけがプロキシを使うルールになります。

1. ルーティングの目的と適用範囲を確認する

この設定は「明示したドメインだけプロキシを使い、それ以外のリクエストは直接接続する」ものです。対象が少なく、ドメインリストを管理できる場合に適しています。未指定のリクエストもすべてプロキシ経由にしたい場合は、この記事のフォールバック設定は使わないでください。FINAL,DIRECTはその逆で、前のルールに一致しなかったリクエストは直接接続します。

準備するものは2つです。Homeに利用可能な接続項目があり、Configに編集・有効化できる設定があることを確認します。サブスクリプションの追加で用意されるのは接続項目であり、対象サイトのルーティングルールではありません。アプリの購入、接続サービス、ルール設定はそれぞれ別のものです。アプリの買い切り購入に通信サービスの料金は含まれません。

2. Global RoutingでConfigを選択する

現在有効な設定のルールに従って通信先を決めるには、Home → Global RoutingでConfigを選択します。ProxyやDirectは一時的な比較テストには使えますが、「一部のドメインだけをプロキシ経由にする」ルール設定の代わりにはなりません。Sceneを使用している場合は、そのSceneが実際に適用するルーティング設定も確認してください。この記事の検証中はConfigに固定し、条件の変化を抑えます。

Config

おすすめ

有効な設定のルールに基づいて振り分けます。対象ドメインのPROXYルールと末尾のFINAL,DIRECTを組み合わせることで、指定ドメインはプロキシ経由、それ以外は直接接続になります。

適した用途:少数の対象ドメインを管理しながら、日常的に通信を振り分ける場合。

Proxy

このルーティングの対象となる通信をすべてプロキシ経由にします。この記事のドメインルールによる振り分けは行いません。切り替え後にサイトへアクセスできても、問題がルーティングに関係するかを判断する参考にしかなりません。

適した用途:接続とルール判定のどちらに問題があるか、一時的に切り分ける場合。

Direct

このルーティングの対象となる通信をすべて直接接続します。ConfigにPROXYルールがあっても、このモードのままでは記事で想定する振り分けになりません。

適した用途:現在のネットワークで直接接続した場合の動作を一時的に比較する場合。

モードを固定してからルールを変更する

各テストの前にHome → Global Routing → Configになっていることと、有効な設定の名前を確認してください。モード、接続項目、ドメインを同時に変更すると、結果に影響した要因を特定できません。

3. ドメインを整理して最小限のルールを書く

ドメインルールが照合するのはホスト名であり、WebページのURL全体ではありません。たとえばhttps://www.example.com/accountの場合、取り出すのはwww.example.comです。https://、パスの/account、クエリパラメータはDOMAINルールに含めないでください。以下では構文の説明に予約済みのサンプルドメインを使います。実際に接続テストできる対象を示すものではありません。

2種類
この記事ではDOMAINとDOMAIN-SUFFIXの2種類のドメイン照合を使用
3項目
ドメインルールは種類、照合対象、ポリシーの順に記述し、半角カンマで区切る
1行
最後にFINAL,DIRECTを置き、共通のフォールバックにする
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,login.example.net,PROXY
FINAL,DIRECT

説明用の[Rule]の例です。設定全体を置き換えるものではありません。1行目はexample.comとそのサブドメイン(www.example.com、static.example.comなど)に一致しますが、notexample.comには一致しません。2行目はlogin.example.netだけに一致し、www.example.netはプロキシ経由になりません。

リクエストのホスト名一致する内容想定されるポリシー
example.com1行目のDOMAIN-SUFFIXPROXY
img.example.com1行目のDOMAIN-SUFFIXPROXY
login.example.net2行目のDOMAINPROXY
www.example.net末尾のFINALDIRECT

PROXYはプロキシ経由で接続することを示します。実際の接続先は、現在選択しているプロキシと設定内のポリシーによって決まり、サーバーアドレスを入力する項目ではありません。元の設定でカスタムポリシーグループを使っている場合は、グループ名とその中の選択内容を確認してください。既存のグループ名を機械的にPROXYへ置き換えないでください。この記事の例は、PROXYポリシーを直接使う最小構成を対象にしています。

4. 設定を順に編集して有効にする

ルールは通常、上から順に照合され、最初に一致したルールでポリシーが決まります。そのため、新しいルールを既存のFINALの後ろに追加しても反映されません。先に一致する広範なルールの後ろに置いた場合も、適用されないことがあります。「指定ドメインだけプロキシ経由」にするには、追加した数行だけでなく、ルール全体を確認してください。

  1. バックアップを保存する

    Configを開き、現在の設定を複製するか書き出してバックアップします。有効な設定の名前も控えておいてください。リモートで管理されている設定の場合は、ローカルにコピーしてから編集し、後の更新で手動変更が上書きされないようにします。

  2. ルールを整理する

    Configで編集する設定を開き、[Rule]の位置を確認します。テキストで編集する場合は該当セクションだけを変更してください。ルール編集画面を使う場合は、種類、ドメイン、ポリシーを確認します。重複する2つ目の[Rule]セクションを追加しないでください。

  3. フォールバックを設定する

    対象ドメインのPROXYルールは、それらに先に一致する可能性がある広範なルールより前に置き、最後にはFINAL,DIRECTを残します。既存の他のPROXYルールやルールセットも確認してください。それらを残すと、「この記事で指定したドメインだけがプロキシを使う」設定にはなりません。

  4. 設定を有効にする

    保存後、Configに戻って編集した設定を選び、現在有効になっていることを確認します。ファイルを保存しただけでは、使用中の設定になったとは限りません。その後、Home → Global Routing → Configに進みます。

  5. もう一度確認する

    Homeで選択したプロキシ項目が使えることを確認してから、接続を再確立し、新しいリクエストを送信します。接続が維持されたままのページを再読み込みするだけでは不十分です。必要に応じて古いページを閉じて開き直し、接続の再利用による影響を抑えてください。

5. 対象ドメインと対象外ドメインの両方を確認する

確認すべきなのは「Webページが開くか」だけでなく、「どのルールが適用されたか」です。サイトが開いても直接接続かプロキシ接続かは分かりません。開かない場合は、DNS、接続先のサービス、プロキシ接続、依存するドメインの不足などが原因として考えられます。Connectivity Testは接続項目の確認に使うもので、リクエストごとのルール確認の代わりにはなりません。

ページのテキストは表示されるのに画像が空白の場合は、画像リクエストの実際のホスト名を確認します。たとえば本文がwww.example.comから配信され、画像がimg.example.netから配信される場合、1行目のサフィックスルールは後者には適用されません。そのホストもプロキシ経由にする必要があると確認できた場合に限り、DOMAIN,img.example.net,PROXYを追加し、FINALより前に配置します。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,login.example.net,PROXY
DOMAIN,img.example.net,PROXY
FINAL,DIRECT

リソースの読み込みに一度失敗しただけで、DOMAIN-KEYWORDや広範囲のIPルールを追加しないでください。共有インフラ上のドメインやアドレスは複数のサイトで使われることがあります。範囲を広げるほど、「指定したサイトだけをプロキシ経由にする」という条件を維持しにくくなります。

6. よくある質問と確認ポイント

ルールを設定したのに、指定したサイトが直接接続になるのはなぜですか?

まずHome → Global RoutingがConfigになっていることを確認し、次にConfigで有効な設定ファイルを確認します。その後、ルールの順序を確認してください。先にあるDIRECT、ルールセット、FINALに一致している可能性があります。最後に接続ログの実際のホスト名を確認し、入力したドメインと一致しているか、リダイレクト後の別ドメインではないかを調べます。

指定していないサイトまでプロキシ経由になるのはなぜですか?

まずGlobal RoutingがProxyになっていないか確認します。Configを使っている場合は、元の設定に他のPROXYルール、広範囲のDOMAIN-KEYWORD、参照しているルールセットが残っていないかを調べ、末尾がFINAL,PROXYになっていないことも確認してください。サフィックスルールは該当するすべてのサブドメインに一致するため、対象を絞るにはDOMAINを使います。

Webページのパスを指定して、そのページだけプロキシ経由にできますか?

この記事で使うDOMAINとDOMAIN-SUFFIXでは、同じホスト上の/videoと/accountを区別できません。ポートが異なっても、別のドメインルールにはなりません。HTTPSの標準ポートは443ですが、ルールに:443を追加しても、正しいホスト名を指定する代わりにはなりません。サブサイトだけを区別したい場合は、まず異なるホスト名が使われているか確認してください。

IPアドレスでアクセスすると、ドメインルールに一致しないのはなぜですか?

IPアドレスへ直接リクエストする場合、ドメインルールに一致するとは限りません。固定のIPv4アドレスをプロキシ経由にする必要がある場合は、要件に応じてIP-CIDR,192.0.2.10/32,PROXY,no-resolveのようなルールをFINALより前に置きます。このアドレスは文書用の例示アドレスです。サイトが一時的に名前解決したアドレス範囲全体をプロキシ対象にしないでください。共有アドレスや名前解決結果の変化によって、影響範囲が広がります。

サブスクリプションを更新すると、ルールも一緒に変わりますか?

接続用サブスクリプションの更新とConfig内のルール設定は別の操作です。更新後は、現在のプロキシ選択が引き続き有効か確認し、有効な設定に変更がないかも調べます。リモート設定だけを更新した場合は、ローカルの変更が上書きされていないか確認してください。接続リストの更新に成功しただけで、ルールが正しいと判断しないでください。

7. ルールの管理と元の設定への復元

以後の管理では、実際のリクエストホスト名を単位に確認します。機能の一部が動かないときは、まず失敗したドメインを記録し、プロキシ対象に加える必要があるか判断します。プロキシが不要な計測、リソースなどのリクエストを、ログを整えるためだけに追加する必要はありません。ルールを正確に保つほど、通信先の選択理由を把握しやすくなります。

最終的な確認基準は2つです。リスト内の実際のリクエストが想定したPROXYルールに一致すること、リスト外の比較用リクエストがFINAL,DIRECTに一致することです。設定のバックアップ、検証記録、明確なドメイン範囲を残しておくと、全体モードを何度も切り替えるより長期的に管理しやすくなります。

App Storeの正規アプリページ購入前にデベロッパとアプリIDを確認