Shadowrocketで特定のサイトだけプロキシ接続する方法|DOMAIN-SUFFIXとFINAL,DIRECTの設定

特定のサイトだけプロキシ接続し、それ以外を直接接続するには、DOMAIN-SUFFIXで対象ドメインを指定し、最後にFINALをDIRECTに設定します。Global RoutingでConfigを選ぶとルールが適用されます。

この記事の概要

Shadowrocketに自分の接続情報をすでに追加しており、特定のサイトだけプロキシ接続したい方に向けた解説です。既存の設定を残し、ドメインルールを追加してConfigに切り替え、通信を確認することで、「指定したサイトはプロキシ、それ以外は直接接続」という設定を作れます。例に挙げるドメインは文法の説明用で、接続サービスとして利用できるものではありません。本サイトではノードやサブスクリプションの提供・販売・推奨は行っていません。

まず確認:振り分けるのはドメインで、Webページのボタンではありません

「特定のサイトだけプロキシ接続する」には、対象サイトの通信をどう判定するか、該当しない通信をどこへ送るかの2点を設定します。Shadowrocketは設定内のルールを上から順に照合します。この例では、プロキシ接続するドメインを先に記述し、最後にFINAL,DIRECTを置きます。それ以前のルールに一致しなかった通信は、直接接続になります。

Webページは通常、アドレスバーに表示されたドメインだけに接続するわけではありません。画像、ログイン、動画、静的スクリプトが別のドメインから読み込まれることもあります。そのため、「トップページは開くのに画像が表示されない」場合でも、ルールが適用されていないとは限らず、必要なドメインがリストに含まれていない可能性があります。ページ全体を読み込ませるために、対象範囲が広すぎる共通ドメインのサフィックスを安易に追加しないでください。

2種類
振り分け結果:リスト内はPROXY、リスト外はDIRECT
1行
最後のフォールバック:FINAL,DIRECT
443
HTTPSで一般的なポート。ドメインルールの欄には入力しません

ここでのPROXYはプロキシ接続のポリシーを示すもので、サーバーのアドレスではありません。また、入力しただけで接続先が使えるようになるわけではありません。作業を始める前に、Homeに自分が利用できるサーバーが登録されており、今回の確認に使う接続が選択されていることを確認してください。アプリの購入と回線サービスは別のものです。

最小限のルール:先にDOMAIN-SUFFIX、最後にFINAL,DIRECT

以下はルール部分の例であり、接続設定全体ではありません。既存の設定を編集する際の参考として使ってください。この数行だけでファイル全体を置き換えると、DNSや共通設定、その他の必要な内容が失われるおそれがあります。実際に使うときは、例のドメインを対象のドメインに置き換えてください。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.org,PROXY
FINAL,DIRECT

DOMAIN-SUFFIX,example.com,PROXYは、example.comと、www.example.comやmedia.example.comなどのサブドメインに一致します。notexample.comには一致しません。ドメイン欄にプロトコル、パス、ポート、ワイルドカードのアスタリスクは入力しません。https://example.com/videoは、この欄に指定する形式ではありません。

記述例一致する範囲用途
DOMAIN,login.example.com,PROXY指定したホスト名のみログイン用のホストだけをプロキシ接続
DOMAIN-SUFFIX,example.com,PROXYルートドメインとそのサブドメインドメイン全体をプロキシ接続
FINAL,DIRECTそれまでのルールに一致しなかった通信残りの通信を直接接続

まとめ:まずは最小限のドメイン範囲で確認

ホスト名を1つだけ指定するなら、まずDOMAINを使います。ルートドメインとすべてのサブドメインが必要な場合に限り、DOMAIN-SUFFIXを使ってください。動作を確認してから必要なドメインを追加すれば、一度に範囲を広げて、どのルールが結果を変えたのか分からなくなる事態を避けられます。

Configで設定を保存し、HomeでConfigを選択

編集前に、元の設定を復元できるようコピーを残してください。既存の設定に別のドメインルールやルールセット、対象範囲の広いプロキシルールが含まれている場合、末尾にFINAL,DIRECTを追加するだけでは「特定のサイトだけプロキシ接続」にはなりません。先に一致した通信は、末尾のルールまで進まないためです。最後の1行だけでなく、ルール全体を確認してください。

  1. 元の設定を残す

    Configを開き、現在使用している設定を見つけて、コピーを保存するかバックアップをエクスポートします。これから選択するファイルを編集していることを確認し、複数の設定を同時に変更しないでください。

  2. ルール部分を編集

    設定の編集画面を開き、[Rule]を確認します。対象のDOMAINまたはDOMAIN-SUFFIXルールをFINALより前に置き、カンマ、ドメイン名、ポリシー名を確認してください。

  3. フォールバックを確認

    最後のルールをFINAL,DIRECTにし、それより前に他のサイトをPROXYへ送るルールがないか確認します。保存したら、Configでこの設定を選択してください。

  4. モードを切り替える

    Homeに戻り、Global Routing → Configを選択します。Homeで現在のサーバーが選択されていることを確認して接続を開始します。初回接続時は、システムの案内に従ってVPN構成の追加を許可してください。

  5. 通信を再試行

    開いているページを閉じてから再度開き、リスト内とリスト外のサイトにアクセスします。設定変更前に確立した接続は、新しいルールの確認には使えません。必要に応じて一度切断し、再接続してください。

ここで必要なのはHome → Global Routing → Configの選択です。「Config画面でファイルが表示されている」だけでは不十分です。前者は通信をルールに従って処理するかどうかを決め、後者は設定を管理します。ファイルの保存、ファイルの選択、モードの選択は、それぞれ別の確認項目です。

Global Routing、ルールの順序、On Demandの役割

すべてのサイトがプロキシ接続される場合は、まずモードを確認し、次にルールを確認してください。Global RoutingのProxyとDirectは、全体のルーティング方針を切り替えるもので、この記事のドメインリストと同じ振り分け結果にはなりません。Sceneは状況に応じて選択するための機能です。最初の動作確認ではConfigを明示的に選び、Sceneの切り替えによる影響を減らしてください。

設定項目主な役割この例での設定
Global Routing → Config現在の設定ルールに基づいてポリシーを決定リストの動作確認にはこちらを選択
Global Routing → Proxy全体をプロキシ接続するルーティング方針リスト外の直接接続の確認には使わない
Global Routing → Direct全体を直接接続するルーティング方針リスト内のプロキシ接続の確認には使わない
Global Routing → SceneSceneの設定に応じてルーティング動作を選択まずはSceneの切り替えによる影響を除外
Settings → On Demandオンデマンド接続の条件を管理ドメイン照合とは別に確認

On Demandは接続を開始するタイミングを制御する機能で、サイトの判定に使うDOMAIN-SUFFIXの代わりにはなりません。手動で切断した後に自動接続される場合は、Settings → On Demandで条件を確認してください。特定のサイトが誤ったポリシーで接続される場合は、Config内のルールと現在のルーティングモードを確認します。この2つの階層を混同しないようにしてください。

結果を確認:ルールの一致、DNS、サーバーの利用可否を切り分ける

Webページが開けても、必ずプロキシ経由とは限りません。開けない場合も、ルールが一致していないとは限りません。確認中はネットワーク、サーバー、設定を同じに保ち、変更する項目を1つに絞ってください。接続履歴に表示される接続先ホスト、適用されたルール、ポリシーを確認して経路を判断できます。表示される項目は現在の画面により異なります。DNSの問い合わせ経路とWeb通信のポリシーも、単純に同じとは限りません。

以下はネットワーク通信で返されることがあるシステムエラーの原文です。ルールエディタの文法エラーではなく、Shadowrocket上で毎回同じ形式で表示されるとも限りません。表示された場合は、どの通信がどのポリシーを使って失敗したのかを確認してから、設定を変更してください。

エラー:The request timed out.

原因と対処:制限時間内に通信が完了しなかった状態です。ネットワーク、接続先サイト、プロキシ接続が原因の可能性があります。まず該当する通信に想定したポリシーが適用されているか確認し、次にHome → Connectivity Testで選択中のサーバーを確認してください。プロキシ接続するサイトを安易に増やすのは避けましょう。

エラー:A server with the specified hostname could not be found.

原因と対処:ホスト名を解決できないか、ドメイン名に誤りがあります。アクセス先のアドレスと設定内のドメイン名を確認し、次に現在の設定のDNSを確認してください。DOMAIN-SUFFIXでは名前解決の失敗を解消できません。

アプリがIPアドレスに直接接続している場合、既存の接続を再利用している場合、または実際の通信先ホストが想定と異なる場合は、ドメインルールが期待した条件で一致しないことがあります。接続履歴から原因を確認し、「強制的に一致させる」ためにIP-CIDRの範囲を安易に追加しないでください。DNSを詳しく確認する場合は、技術リファレンスのDNS解説をご覧ください。

よくある質問:サブドメイン、サブスクリプションの更新、設定の復元

サブドメインを1つだけプロキシ接続するには?

たとえばlogin.example.comだけを対象にするなら、DOMAIN,login.example.com,PROXYと記述し、最後にFINAL,DIRECTを残します。DOMAIN-SUFFIX,example.com,PROXYを使うと、ルートドメインとほかのサブドメインもプロキシ接続の対象になります。

ルールを追加しても、すべてのサイトがプロキシ接続されるのはなぜ?

まずHome → Global RoutingでProxyではなくConfigが選択されていることを確認します。次にConfigに戻り、編集したファイルが選択されているか確認してください。最後にルールを上から確認し、それより前に一致する対象範囲の広いプロキシルールやルールセットがないか調べます。

サブスクリプションを更新すると、これらのルールは変更されますか?

サーバーのサブスクリプションと設定ファイルは分けて考えてください。サーバーのサブスクリプションを更新しても、[Rule]の編集にはなりません。リモート設定を更新すると、ローカルで加えた変更が上書きされる場合があります。自分の設定のコピーを残し、リモート設定を更新するたびに、ルールと選択状態を確認してください。

リスト外がDIRECTになるのは、VPNがオフになったということですか?

いいえ。DIRECTは接続中に適用されるルーティングポリシーであり、システムのVPN構成をオフにするものではありません。接続を停止するにはHomeで接続をオフにし、Settings → On Demandに自動接続の条件が設定されていないか確認してください。

変更後に正常に使えなくなった場合、どうすれば元に戻せますか?

Configに戻り、保存しておいた設定を選択してから、元のGlobal Routing設定で再接続してください。復元後はまず以前のアクセスを確認し、その後で対象ドメインを1つずつ追加します。変更は毎回1項目に絞ると、結果が変わった原因を見つけやすくなります。

最後に確認するのは4点です。正しいファイルが選択されていること、Global RoutingがConfigになっていること、対象ドメインのルールが先にあること、FINAL,DIRECTが末尾にあることです。その後、Webページが依存するドメインを1つずつ確認します。対象範囲を明確に保ち、ページの読み込み問題を振り分け機能全体の不具合と誤解しないようにしましょう。

App Storeで正規品を確認