Shadowrocketの使い方|一部のサイトだけプロキシにするDOMAIN-SUFFIX設定

DOMAIN-SUFFIXやDOMAIN-KEYWORDで指定したサイトだけをPROXY経由にし、ほかの通信はFINAL,DIRECTへ。Configモードでルールの動作を確認します。

この記事の概要

この記事は、Shadowrocketに自分のサブスクリプションを追加済みで、指定したサイトだけをプロキシ経由にしたい方を対象にしています。現在有効なConfigを編集し、プロキシを使うドメインのルールを先頭側に置き、最後をFINAL,DIRECTにします。そのうえでHome → Global RoutingからConfigを選択します。マッチ範囲やルールの順序、保存方法、確認手順を説明します。既存のサブスクリプションの入手元を変更する内容ではありません。

1. ルール・ポリシー・接続モードの違い

「一部のサイトだけをプロキシ経由にする」には、対象サイトにPROXYを指定したルールが適用され、それ以外のリクエストはDIRECTになる必要があります。サブスクリプションには利用可能なサーバー情報が含まれ、Configはリクエストの振り分け方法を決めます。サーバーを切り替えたりサブスクリプションを更新したりするだけでは、この振り分けは設定されません。作業前にHomeで利用可能なサーバーがあることを確認し、現在の設定をバックアップしてください。

この記事では、組み込みポリシーのPROXYとDIRECTを使用します。PROXYは現在選択中のプロキシにリクエストを渡し、DIRECTは接続先に直接接続します。既存の設定でカスタムポリシーグループを使っている場合は、ルールの末尾にそのグループの正確な名前を指定することもできます。ただし、グループが定義済みで、利用可能なメンバーがあることを先に確認してください。初めて変更する場合は、ポリシーグループとマッチ条件を同時に変更せず、まず以下の最小構成で試すのがおすすめです。

2つのポリシー
PROXYとDIRECTでリクエストを振り分け
4つのモード
Global Routing:Proxy / Direct / Config / Scene
フォールバックは1つ
FINAL,DIRECTをRuleリストの最後に配置

Home → Global RoutingのProxyとDirectは、全体をプロキシ接続または直接接続に切り替える設定です。この記事のようにルールごとの振り分け結果を確認する用途には使えません。必要なのはConfigによるルールベースの処理です。Sceneは状況に応じて設定を切り替える機能なので、最初の確認時はConfigに固定し、条件の変化を減らします。Settings → On Demandは必要に応じて接続を確立する動作を設定するもので、ドメインルールの編集場所ではありません。

2. DOMAIN-SUFFIXとDOMAIN-KEYWORDの使い分け

ドメインルールが照合するのはリクエスト先のホスト名で、WebページのURL全体ではありません。たとえばhttps://www.example.com/accountの場合、指定するのはexample.comまたはwww.example.comです。https://、パスの/account、クエリパラメーター、ポート番号はドメイン欄に含めないでください。ルールは半角カンマで区切り、ルールキーワードは英語のまま記述します。

ルールの書き方 マッチ範囲 使いどころ
DOMAIN,www.example.com,PROXY www.example.comというホスト名だけに一致します。 特定のサイト入口だけを対象にする場合。
DOMAIN-SUFFIX,example.com,PROXY example.comと、そのサブドメイン(api.example.comなど)に一致します。 同じルートドメイン配下のWebページとAPIをまとめてプロキシ経由にする場合。
DOMAIN-KEYWORD,example,PROXY ホスト名にexampleという文字列を含むリクエストに一致します。 複数のドメインをまたぐキーワード検索が必要で、対象範囲が広がることを許容できる場合。
FINAL,DIRECT それまでにどのルールにも一致しなかったリクエストを処理します。 「その他の通信は直接接続する」ための最後のルールとして使います。

DOMAIN-SUFFIXはドメインの末尾を境界として照合します。example.comのルールはimg.example.comにも適用されますが、文字列が似ているだけのnotexample.comには一致しません。DOMAIN-KEYWORDにはこのような末尾の境界がなく、exampleを指定すると、同じ文字列を含む別のホスト名にも範囲が広がります。対象ドメインが分かっている場合は、短いキーワードで推測するのではなく、DOMAINまたはDOMAIN-SUFFIXを優先してください。

結論:まずドメインを確認し、必要な場合だけキーワードを使う

まずDOMAIN-SUFFIXで対象のルートドメインを指定します。複数の必要なドメインに安定した共通キーワードがあることをログで確認でき、個別に列挙すると管理しにくい場合に限り、DOMAIN-KEYWORDを追加してください。

3. 最小限のルール例と上から順に評価される仕組み

以下の例では、example.comとexample.netおよびそれぞれのサブドメインをプロキシ経由にし、それ以外のリクエストを直接接続にします。[Rule]は設定ファイル内のルールセクションを示す記述です。テキスト編集で貼り付ける場合は一度だけ使います。ルール一覧から1件ずつ追加する場合は、ルールタイプ、ドメイン、ポリシーをそれぞれ入力し、セクションの記述を個別ルールに含める必要はありません。

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

通常、ルールは上から順に評価され、最初に一致したルールのポリシーが適用されます。FINALをリストの上の方に置くと、後続の対象ルールが処理されません。同様に、前段に対象ドメインを含むDIRECTルールや広範囲に一致するルールセットがある場合は、それらより前にPROXYルールを置いてください。末尾だけ変更しても結果が変わらないことがあります。

特定のサブドメインを直接接続にする場合は、広い範囲を指定するルールより前に、より具体的な例外を記述します。以下の例ではstatus.example.comをDIRECTにし、www.example.comなど他のサブドメインをPROXYにします。DOMAIN-SUFFIXの後ろに例外を置いても、先に適用された結果は上書きできません。

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

既存の設定にはDNS、Host、ポリシーグループなど、ほかのセクションが含まれている場合があります。上記のコードはRule部分の例であり、設定全体を削除して作り直す必要はありません。編集前に設定をコピーし、[Rule]がすでにあるか確認してください。元のファイル末尾にセクション全体を重複して追加しないようにします。

4. Configで保存し、ルールモードに切り替える

以下ではHome、Config、Settingsの画面構成に沿って説明します。編集するのは、実際に有効になっている設定です。同じ名前のリモート設定のコピーではありません。リモート設定を更新するとローカルでの変更が置き換わる場合があります。長く使うルールは別途保存したローカルコピーに記述し、切り替えるたびに現在選択中の設定を確認してください。

  1. 設定をバックアップ

    Configを開き、現在使用中の設定を見つけてコピーを保存します。切り替え時に戻せるよう、元の設定名も控えておきましょう。唯一のファイルを直接上書きしないでください。

  2. ルールを編集

    Configで該当するローカル設定の編集画面を開き、Ruleに進みます。ルール一覧から追加する場合はDOMAIN-SUFFIXを選び、example.comの欄に実際の対象ドメインを入力して、ポリシーにPROXYを指定します。またはテキスト編集で既存の[Rule]セクションを変更します。

  3. ルールの順序を整える

    指定サイトのPROXYルールを、競合する可能性のある広範囲のルールより前に配置し、最後がFINAL,DIRECTになっていることを確認します。変更を保存したら、Configの一覧でこの設定を選び、現在の設定として適用します。

  4. モードを選択

    Home → Global Routing → Configに戻り、現在選択中のプロキシが有効であることも確認します。ここがProxyまたはDirectのままでは、アクセス結果から編集したドメインルールの動作を判断できません。

  5. もう一度テスト

    接続を有効にしてから対象ページを開き直します。変更前に確立した接続は、以前の経路を使い続ける場合があります。必要に応じてページを閉じて接続を確立し直し、対象ドメインとリストにないドメインをそれぞれテストしてください。

サブスクリプションの更新はサーバー一覧やパラメーターを更新する操作、Configの編集はリクエストのルーティングを変更する操作です。混同しないようにしてください。プロキシ経由にするサイトを1つ追加するだけなら、通常はサブスクリプションを再インポートしたり、サーバーのポート、パスワード、SNI、TLSの設定を変更したりする必要はありません。初回のインポートと接続方法はクイックスタート、モードの違いはプロキシモードの説明をご覧ください。

5. 接続ログで確認する:ページが開くかどうかだけで判断しない

ページが開いても、プロキシ経由とは限りません。サイトによっては直接接続でもアクセスできます。ページが開かない場合も、ルールに一致していないとは限りません。サーバーへの接続、DNSの名前解決、Webサイト自体の状態などが原因の可能性があります。確認時は接続履歴またはログで、対象ホスト名、適用されたルール、最終的なポリシーを確認してください。ログの表示場所はプラットフォームによって異なる場合がありますが、確認する情報は同じです。

テストするリクエスト 想定される一致ルール 想定されるポリシー
example.comとwww.example.com DOMAIN-SUFFIX,example.com PROXY
status.example.com(前述の例外ルールを追加済み) DOMAIN,status.example.com DIRECT
対象リストになく、ほかのルールにも一致しないドメイン FINAL DIRECT

上の表は前述のルールで想定される結果であり、例示したサイトへの接続性を測定したものではありません。実際に試すときは、必要な対象ドメインに置き換え、一度に変更する条件は1つにしてください。ログで対象がPROXYに一致しているのに接続できない場合は、DOMAIN-KEYWORDの範囲を何度も広げるのではなく、現在のサーバーとサービス事業者から提供されたパラメーターを確認してください。

1つのWebページから、画像、ログイン、認証、APIなど別のドメインへアクセスすることはよくあります。メインページがPROXYに一致しても、関連するリクエストまで自動的に同じ経路になるわけではありません。「テキストは表示されるが画像が出ない」「トップページは開くのにログインが終わらない」といった場合は、関連する操作をもう一度行い、失敗したリクエストのホスト名を確認して、本当に必要なドメインだけをリストに追加します。

6. タイムアウト・名前解決の失敗・よくある質問

トラブルシューティングでは、まず「ルールどおりにルーティングされていない」場合と「ルールどおりにルーティングされたが接続できない」場合を切り分けます。以下はブラウザーに表示される実際のエラーコードであり、Shadowrocket固有の固定メッセージではありません。表示方法はブラウザーによって異なる場合があります。接続ログも確認して原因を判断し、エラーコードだけでサーバーやルールに問題があると決めつけないでください。

エラー:ERR_CONNECTION_TIMED_OUT

原因と対処:ブラウザーが接続または応答を待つ間にタイムアウトしています。接続先サービス、現在のネットワーク、プロキシ経路などが原因として考えられます。まず該当リクエストの最終的な経路がPROXYかDIRECTかを確認してください。PROXYに一致している場合は現在のサーバーへの接続をテストし、一致していない場合は有効な設定とルールの順序を確認します。

エラー:ERR_NAME_NOT_RESOLVED

原因と対処:ブラウザーが有効な名前解決結果を取得できていません。まずドメインの入力ミスとConfig内のDNS設定を確認し、ブラウザー側で別のDNSを設定していないかも確認してください。名前解決の問題を調べる代わりに、DOMAIN-SUFFIXを繰り返し追加しないでください。

ルールを追加したのに、なぜすべてのサイトがプロキシ経由になるのですか?

まずHome → Global RoutingがProxyになっていないか確認し、Configに切り替えます。次に、現在有効な設定の末尾がFINAL,PROXYのままになっていないか、前段に広範囲のPROXYルールがないかを確認してください。保存後に接続し直し、対象リストにないドメインの最終的なポリシーを確認します。

メインドメインを追加したのに、ログインできないのはなぜですか?

ログイン時に別のルートドメインへ移動することがあります。DOMAIN-SUFFIX,example.comはexample.netには一致しません。ログイン操作を行って接続記録を確認し、必要なログイン用またはAPI用のドメインをFINALより前に個別追加してください。長期的な対処として、全体をProxyに切り替えるのは避けてください。

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

DOMAINとDOMAIN-SUFFIXが照合するのはホスト名であり、/newsや/accountなどのパスは区別しません。同じホスト名上のHTTPSページを、この2種類のルールでパスごとに振り分けることはできません。サービスが異なるサブドメインを使っている場合は、DOMAINで個別に指定できます。

サブスクリプションを更新した後、これらのルールを設定し直す必要はありますか?

サーバーのサブスクリプションを更新しただけで、通常Configが置き換わるわけではありません。まずConfigで現在の設定を開き、Ruleが残っているか確認してください。リモート設定を更新した場合は内容が置き換わることがあるため、カスタムルールを保持したローカルコピーに切り替え、Home → Global Routing → Configに戻って動作を確認します。

最後に、繰り返し使える確認手順をまとめます。現在のConfigが正しいこと、Global RoutingがConfigであること、指定ドメインのルールが前にあること、FINAL,DIRECTが後ろにあること、現在のサーバーが有効であることを確認し、新しい接続のログを調べてください。ルールタイプを追加で確認する場合は設定フィールドのリファレンスをご覧ください。表示に問題があるサイトごとにIPルール一式を追加する必要はありません。

Shadowrocketの入手と初期設定

iPhone / iPad版はApp Storeで2.99米ドルの買い切りです。Mac(Appleシリコン / Intel)、Windows、Android、Linux版は無料です。iPhone / iPadのシステム要件はApp Storeの掲載内容をご確認ください。ダウンロードページでプラットフォームを選択してください。すでにアプリをお持ちの場合は、ガイドに沿って自分のサブスクリプションを追加し、Configルールを設定できます。

Shadowrocket をダウンロード