この記事は、Shadowrocketで利用可能なプロキシ接続を設定済みで、指定したサイトだけをプロキシ経由にしたい方を対象にしています。まずGlobal RoutingでConfigを選び、対象ドメインのルールを上部に追加して、最後にFINAL,DIRECTを指定します。既存の設定に追加できるルール例、保存・有効化の手順、動作確認の方法に加え、ルールに一致しない場合とプロキシ接続に失敗する場合の切り分けも説明します。
まずConfigを確認:リストのルールを有効にする前提条件
「指定したサイトだけをプロキシ経由にする」には、独立した条件が2つあります。指定したドメインに一致した通信はPROXYを使い、それ以外の通信はDIRECTにします。ドメインルールを追加するだけでは不十分です。Global RoutingがProxyの場合、通信はグローバルプロキシとして処理されるため、このリストによる振り分けを確認できません。
HomeでGlobal Routingを開き、Configを選びます。続いてConfigで、使用中の設定ファイルを確認してください。Homeで選択されているプロキシ接続も利用可能である必要があります。この記事では、利用者がすでに接続サービスとサブスクリプション、または接続情報を用意していることを前提とし、接続サービスの入手方法は扱いません。
| モード | 動作 | この記事での使い方 |
|---|---|---|
| Config | 現在の設定に記述されたルールに基づいて接続方法を決定します。 | ルールによる振り分けを確認する前提条件です。 |
| Proxy | グローバルプロキシモードです。この記事のドメインリストに基づく振り分けは行いません。 | プロキシ接続の動作確認に使えます。テスト後はConfigに戻してください。 |
| Direct | グローバルDIRECTモードです。 | DIRECTでの接続確認に使います。PROXYルールの検証には使えません。 |
| Scene | 設定したシーンの条件に応じて、該当するルーティング設定を適用します。 | 原因を調べる際は、まずConfigに切り替えて、シーン切り替えの影響を避けてください。 |
On Demandは条件に応じて接続を確立・再開する機能であり、ドメインルールの代わりにはなりません。テスト中に接続が自動で切り替わる場合は、Settings → On Demandで現在の条件を確認してください。元の設定を記録したうえで、一時的に接続を手動で管理します。On Demand、DNS、ルールを同時に変更すると、どの変更が影響したのか判断しにくくなります。
基本のルール:DOMAIN-SUFFIXとFINAL,DIRECT
以下はルール部分の例であり、接続情報をすべて含む完全な設定ではありません。example.comは例示用のドメインで、実際にプロキシ経由にする必要があるサイトを示すものではありません。利用時は対象サイトのドメインに置き換え、既存設定の[Rule]セクションに追加してください。この例でファイル全体を上書きしないでください。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX,example.com,PROXYは、example.com自体に加え、www.example.comやapi.example.comなどのサブドメインにも一致します。ドメイン階層に基づいて判定するため、末尾に同じ文字列を含むだけのnotexample.comは一致しません。
FINAL,DIRECTは、それ以前のルールに一致しなかった場合にDIRECTを使う指定です。ルールは上から順に確認され、最初に一致したルールの方針が適用されます。そのため、リストより上に範囲の広いルールがある場合や、途中にFINALがある場合、追加したルールまで判定が進まないことがあります。
DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORDの違い
リストの精度は、一致条件となるキーワードによって変わります。サイトのメインドメインとそのサブドメインをまとめてプロキシ経由にする場合は、DOMAIN-SUFFIXを優先してください。特定のホスト名だけを対象にする場合はDOMAINを使います。DOMAIN-KEYWORDはドメイン内の文字列に一致するため範囲が広く、通常はドメインサフィックスの代わりとして使う方法には適しません。
| ルールの書式 | 一致範囲 | 適した用途 |
|---|---|---|
DOMAIN,api.example.com,PROXY | api.example.comのみに一致し、その下位サブドメインには一致しません。 | 特定のAPIホストだけをプロキシ経由にする場合。 |
DOMAIN-SUFFIX,example.com,PROXY | example.comとそのサブドメインに一致します。 | サイトのドメイン単位でリストを管理する場合。 |
DOMAIN-KEYWORD,example,PROXY | ドメイン内にexampleを含む通信に一致するため、無関係なドメインも対象になる可能性があります。 | キーワードによる広い一致範囲が必要で、誤一致を確認できる場合に使用します。 |
ルールのドメインにはhttps://、ポート、パス、クエリパラメーターを含めないでください。たとえば、example.comと入力し、https://example.com/accountとは入力しません。このドメイン振り分けでは、同じホスト上にあるHTTPSページをパスごとに区別できません。
特定のサブドメインはDIRECTにし、同じメインドメインのほかの通信はプロキシ経由にする場合、より具体的な例外ルールをサフィックスルールより前に置きます。次の順序では、status.example.comはDIRECTになり、それ以外の一致するドメインはプロキシ経由になります。
[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
保存と有効化:変更はルールのまとまりごとに行う
まず元の設定を複製してから、ローカル設定を最小限だけ変更してください。リモート設定を更新すると、ローカルでの編集内容が上書きされる場合があります。また、Homeにある接続サブスクリプションの更新とConfigにある設定ファイルの更新は別の操作です。原因を調べる際は、現在の接続と設定をそれぞれ記録し、接続リストの変更をルール読み込み済みと取り違えないようにしてください。
-
設定をバックアップ
Configを開いて現在の設定を確認し、複製を保存します。変更前のFINALルールとルールセットの参照先を記録し、元に戻せるようにしてください。
-
ルールを編集
Configで使用するローカル設定を開いて編集し、対象リストを[Rule]セクションに追加します。有効な最終フォールバックは1つだけにし、FINAL,DIRECTをリストの後に配置してください。
-
保存して選択
保存後にConfigへ戻り、名前の似た別の設定ではなく、編集したファイルが選択されていることを確認します。解析エラーが出る場合は、半角カンマ、キーワードのつづり、各行のフィールド数を確認してください。
-
モードを切り替える
Home → Global Routing → Configに戻り、利用可能なプロキシ接続が選択されていることを確認します。必要に応じていったん切断してから再接続し、現在の設定でテストしてください。
-
再テスト
対象のWebページを閉じてから開き直し、新しい接続を発生させます。そのうえで、データ記録に表示されるドメイン、一致したルール、実際のポリシーを確認してください。変更前から確立している長時間接続だけを見て判断しないでください。
別の設定からルールをコピーする場合は、ポリシー名が存在するかも確認してください。カスタムグループ名は共通の内蔵キーワードではありません。元のファイルにあるグループが、新しいファイルにも定義されているとは限りません。この記事のリスト方式を試す場合は、まずPROXYとDIRECTで確認し、その後に必要であればポリシーグループを追加してください。
振り分けを確認:Webページの表示だけでなく、一致したルールを見る
Webページが正常に表示されても、接続経路のいずれかが使えたことしか分からず、プロキシ経由だったとは判断できません。Shadowrocketのデータ記録で、今回の通信のドメイン、ルール、出力先ポリシーを照合してください。記録が有効になっていない場合は、Settingsでデータ記録の設定を確認してから、リクエストを再度実行します。必要な記録だけを残し、共有前にドメイン以外の機密情報を削除してください。
- リスト内:例示のドメインを実際の対象ドメインに置き換えた後、メインサイトとサブドメインの1つにアクセスします。DOMAIN-SUFFIXに一致し、ポリシーがPROXYになることを確認してください。
- リスト外:DIRECTで接続できることを確認済みで、リストにも含まれていないドメインにアクセスします。FINALに一致し、ポリシーがDIRECTになることを確認してください。
- 例外:前述の特定ドメインの例外ルールを使う場合は、そのホスト名に個別にアクセスします。後続のサフィックスルールではなく、先にDOMAINに一致することを確認してください。
1つのWebページが、メインサイト、ログイン用API、静的リソース、メディア用ドメインに同時接続することがあります。メインサイトがPROXYに一致し、画像のリクエストがDIRECTになることに矛盾はありません。ページのテキストは表示されるのに画像やログインで問題が起きる場合は、まず失敗したリクエストの実際のドメインを特定してから、リストへの追加を検討してください。範囲を広げるために、安易に短いDOMAIN-KEYWORDを追加しないでください。
GEOIPは接続先IPの地理情報に基づいて一致し、IP-CIDRはIPアドレスの範囲に基づいて一致します。どちらもWebサイトのドメインの所有者を判定するものではありません。サイトが複数のアドレスを使うことも、複数のサイトが同じアドレスを共有することもあります。リスト内だけを対象にする場合、手間を省くために範囲の広いIPプロキシルールを追加しないでください。リスト外の通信までプロキシ経由になる可能性があります。IPアドレスへの直接アクセスでは、ドメインルールに一致するとは限りません。
接続に失敗する場合:ルールの問題と出力先の問題を切り分ける
記録にPROXYへの一致が表示されているのにリクエストが失敗する場合、DOMAIN-SUFFIXを調整しても通常は解決しません。以下は接続の診断で表示されることがある低レベルのエラー例です。実際の表示はプロトコルや失敗した段階によって異なり、毎回同じ全文が表示されるとは限りません。
エラー:connection refused
原因と対処:接続が接続先または中間の機器によって拒否された状態であり、ドメインルールが機能していないという意味ではありません。まず記録に表示された実際の出力先を確認し、登録済み接続のアドレス、ポート、サーバー側の待ち受け状態を調べます。ポートは自身の設定を基準にしてください。対象のWebページがHTTPSだからといって、プロキシのポートを443に変更しないでください。
エラー:i/o timeout
原因と対処:ネットワークの読み書き処理のいずれかがタイムアウトしています。このメッセージだけでは、ローカルネットワークとプロキシ経路のどちらに原因があるか判断できません。ルールは変更せず、Wi-Fiとモバイル通信でそれぞれ新しいリクエストを送り、同じプロキシ接続での結果を比較してください。
エラー:certificate has expired
原因と対処:TLS検証に使われる証明書の有効期限に問題があるか、デバイスの日時が正しくない可能性があります。まずiPhoneの「設定」→「一般」→「日付と時刻」を確認し、証明書については利用中のサービス提供元に問い合わせてください。証明書検証を無効にして問題を回避しないでください。
記録がDIRECTを示し、PROXYを想定していた場合は、ルールを確認してください。現在のファイルが正しいか、Global RoutingがConfigか、実際のリクエストが別のドメインを使っていないか、リストより前に一致するルールがないかを調べます。証拠をもとに修正するほうが、設定全体を書き直すより原因を特定しやすくなります。
よくある質問:ドメインの追加、更新、設定の復元
1つのサイトだけをプロキシ経由にする場合、すべてのサブドメインを登録する必要がありますか?
通常、同じメインドメインにはDOMAIN-SUFFIXを1つ指定すれば十分です。まずメインドメインを設定し、リソースのリクエストも確認してください。ログインやリソースの配信に別のメインドメインが使われている場合は、記録を見て個別に追加します。ルールにURL全体を入力しないでください。
ルールを追加したのに、どのサイトもプロキシ経由になります。どう確認すればよいですか?
まずHome → Global RoutingでConfigが選択されていることを確認し、続いてConfigで現在の設定ファイルを確認してください。その後、FINAL,PROXY、範囲の広い別のプロキシルール、プロキシ用ルールセットが残っていないか調べます。リスト内だけを対象にする場合、リスト外の通信は最終的にFINAL,DIRECTに一致する必要があります。
自分の接続サブスクリプションを更新した場合、ドメインリストを書き直す必要がありますか?
通常、Homeの接続リストだけを更新したのであれば、Config内のドメインルールを書き直す必要はありません。ただし、選択中の接続を改めて確認してください。リモート設定ファイルを更新した場合は、ローカルでの編集が置き換わる可能性があります。更新後に現在の設定を開いて[Rule]を確認し、リスト内外の通信を比較テストしてください。
変更後にアクセスできなくなった場合、元の設定に戻すにはどうすればよいですか?
Configでバックアップしておいた設定を選び直し、Homeで元のGlobal Routingモードに戻っていることを確認してから再接続します。正常に戻ったら、複製した設定にルールを1つずつ追加してください。設定の復元、プロキシ接続の切り替え、DNSの変更を同時に行うと、原因を特定する手掛かりが失われるおそれがあります。
最終確認は3点です。Configが有効になっていること、リスト内の通信が想定したルールに一致すること、それ以外の通信がDIRECTになること。設定の構造については、当サイトの技術リファレンスをご覧ください。ルーティングモードの違いについては、プロキシモードの説明をご確認ください。