利用可能な接続設定があり、特定のサイトだけをプロキシ経由にしたい方を対象に解説します。まずHome → Global RoutingでConfigを選択し、現在の設定の[Rule]に対象ドメインを記述します。最後にFINAL,DIRECTで残りのリクエストを処理します。最小限のルール例、照合順序、個別の確認方法、問題の切り分け方を紹介します。例示のドメインは構文説明用です。実際にアクセスするドメインに置き換えてください。
1. Global Routingと現在の設定を確認する
Shadowrocketの接続スイッチとルール設定は、それぞれ役割が異なります。スイッチは接続を有効にし、Global Routingは通信の経路を選択します。「指定サイトはプロキシ経由、ほかは直接接続」にするにはConfigを選びます。ルールをファイルに記述しても、ProxyまたはDirectのままではルールの効果を確認できません。
この記事では、利用者自身が契約したサービスとサブスクリプションがあり、接続に必要な情報も用意されていることを前提とします。アプリの購入と接続サービスは別のものです。ShadowrocketはAppleプラットフォーム向けのクローズドソースの有料アプリで、App Storeから買い切りで入手できます。主な対応デバイスはiPhoneとiPadです。システム要件と購入対象地域はApp Storeの掲載内容をご確認ください。
| 設定項目 | 用途 | この記事での選択 |
|---|---|---|
| Proxy | 全通信をプロキシ経由にし、この記事のドメインルールでは振り分けない | プロキシ経由の通信経路を個別に確認する場合のみ使用 |
| Direct | 全通信を直接接続する | 指定ドメインがプロキシ経由になるかの確認には使用できない |
| Config | 現在の設定に記述されたルールに従って通信方法を決定 | この記事ではこの項目を使用 |
| Scene | 設定済みのScene条件に応じて、対応するルーティング設定を適用 | 環境による変数を減らすため、まずConfigに固定 |
- Homeで、自分に使用権限があり、接続できるサーバー設定が選択されていることを確認します。
- Configを開き、編集する設定ファイルが現在有効になっているか確認します。変更を元に戻せるよう、事前にコピーを保存してください。
- Home → Global Routingに戻り、Configを選択します。設定を確認してから接続スイッチをオンにします。
Homeのサーバー情報とConfigのルールファイルは、異なる階層の設定です。サブスクリプションの更新は通常、接続先の項目を更新するもので、編集したルールファイルが有効になることを意味しません。テストのたびに現在の設定を確認してください。
2. DOMAIN-SUFFIXの基本的な書き方
特定のサイトとそのサブドメインを対象にする場合は、DOMAIN-SUFFIXを使います。次の例では、example.comとexample.netに該当するドメインをPROXYに、それ以外のリクエストをDIRECTに振り分けます。ドメインは構文の例であり、サービスを推奨するものではありません。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT
現在の設定に[Rule]がすでにある場合は、そのセクション内を編集してください。同じ名前のセクションを追加したり、この4行で設定ファイル全体を上書きしたりしないでください。既存のDNS、ポリシーグループ、その他の設定は残して、個別に確認します。既存のルールを残す場合は、プロキシ経由となる範囲が広がらないかも確認してください。
DOMAIN-SUFFIX,example.com,PROXY:example.comに加えて、www.example.comやapi.example.comなどのサブドメインにも一致します。DOMAIN,login.example.org,PROXY:指定したドメイン名だけに一致し、ほかのサブドメインには自動的に適用されません。FINAL,DIRECT:それ以前のルールに一致しなかったリクエストを直接接続にします。ルールセクションの末尾に記述してください。
ルールに記述するドメインには、https://、パス、クエリパラメーター、ポート番号を含めません。アクセス先がhttps://www.example.com:443/accountでも、記述するのはexample.comです。DOMAIN-SUFFIXはウェブページのパスを照合するルールではありません。
3. DOMAIN-KEYWORDの使い方とルールの順序
DOMAIN-KEYWORDはドメイン内のキーワードで照合するため、DOMAIN-SUFFIXより対象範囲が広くなることがあります。たとえばDOMAIN-KEYWORD,example,PROXYは、example.comだけでなくmyexample.netにも一致する可能性があります。特定のサイトだけを指定するなら、ドメインサフィックスを列挙するほうが確認しやすくなります。
ルールは上から順に確認され、最初に一致したルールのポリシーが適用されます。例外は広い範囲に一致するルールより前に置き、FINALは最後に記述します。次の例では、ログイン用サブドメインをDIRECT、メインサイトのほかのサブドメインをPROXYにし、キーワードルールの配置も示します。
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,examplemedia,PROXY
FINAL,DIRECT
| リクエストのドメイン | 最初に一致するルール | ポリシー |
|---|---|---|
login.example.com | DOMAINで完全一致 | DIRECT |
img.example.com | DOMAIN-SUFFIX | PROXY |
cdn.examplemedia.net | DOMAIN-KEYWORD | PROXY |
example.org | FINAL | DIRECT |
まとめ:少数のサイトはドメインを個別に指定
まずDOMAINとDOMAIN-SUFFIXだけを使い、対象サイトがすべて利用できることを確認します。その後、必要に応じてDOMAIN-KEYWORDを追加してください。キーワードルールを追加するたびに、想定上は一致しないドメインでも照合結果を確認します。
「それ以外はすべて直接接続」にする場合、現在の設定にあるGEOIPやIP-CIDRのルールも確認が必要です。たとえば古いファイルにGEOIP,US,PROXYがあると、末尾がFINAL,DIRECTでも、該当するIPの地域分類に一致した別のリクエストがプロキシ経由になることがあります。IP-CIDRはIPアドレスの範囲で照合するため、変動するサイトのドメイン一覧の代わりには使えません。
4. 保存後にルールどおり振り分けられるか確認する
ウェブページが開いても、期待したルールに一致したとは限りません。開けなくても、ルールの記述ミスとは限りません。「選択されたポリシー」と「その経路で接続できるか」を分けて確認してください。以下は確認の順序であり、アプリ画面の説明ではありません。
- ファイルの適用を確認:保存後にConfigへ戻り、現在有効なファイルを確認します。Home → Global Routingが引き続きConfigになっていることも確認してください。
- 新しい接続でテスト:テスト中のウェブページを閉じてから開き直します。必要に応じてShadowrocketを一度切断し、再接続してください。既存の接続が再利用される影響を抑えられます。
- 想定どおりのケースをテスト:指定したサイトにアクセスし、アプリ内の接続履歴またはログで対象Host、一致したルール、ポリシーを確認します。表示される項目は現在の画面に従ってください。
- 想定外のケースもテスト:ルールに含めていないサイトにもアクセスし、そのリクエストがDIRECTになることを確認します。対象サイトを1つ確認するだけでは不十分です。
- 関連リクエストを確認:ページのテキストは表示されるのに画像、動画、ログインが機能しない場合は、それらのリソースが実際に使っているドメインを確認し、個別のルールが必要か判断します。
1つのページから、メインサイト、ログイン用API、画像用ドメイン、独立したCDNドメインへ同時にリクエストが送られることがあります。DOMAIN-SUFFIXが対象にするのは同じドメインサフィックスだけです。ウェブページ上にリソースが表示されていても、その通信がメインサイトに自動的に追従してプロキシ経由になるわけではありません。接続履歴をもとに必要なドメインを追加し、キーワードの対象範囲をむやみに広げないでください。
DNSと接続ポリシーも区別してください。FINAL,DIRECTが決めるのは、一致するルールがない接続の経路であり、すべてのDNS問い合わせを直接接続にするわけではありません。DNSの名前解決経路は該当する設定で決まります。履歴にIPアドレスしか表示されず、ドメイン情報が取得できない場合、ドメインルールが想定どおり一致しないことがあります。まずアプリの記録と名前解決の設定を確認してください。
5. タイムアウト、接続拒否、ルール不一致のトラブルシューティング
まずリクエスト履歴で適用されたポリシーを確認し、その後にエラーを確認します。接続ログには、以下のようなエラーが表示されることがあります。実際の表示にはアドレスなどの情報が加わる場合があります。これらはルール構文のエラーと同じ意味ではなく、ドメインルールを追加する直接の根拠にもなりません。
エラー:Connection timed out
原因と対処:規定時間内に接続が完了しませんでした。選択中のプロキシ、接続先アドレス、現在のネットワーク経路などが原因として考えられます。まず対象リクエストのポリシーがPROXYかDIRECTか確認してください。PROXYの場合は、利用可能と確認済みの接続先で同じ接続を試し、先にルールの対象範囲を広げないようにします。
エラー:Connection refused
原因と対処:接続先のアドレスでポートへの接続が拒否されました。ポートの不一致や、サービスが待ち受けていないことなどが考えられます。既存の設定にあるアドレス、ポート、サービスの状態を確認してください。たとえばサービスの設定で443が指定されている場合、独断で80に変更してはいけません。また、このエラーだけを根拠に、すべてのサービスで443を使うと判断しないでください。
- 対象がDIRECTのまま:まずGlobal RoutingがConfigか確認し、次に現在の設定ファイルとドメインの綴りを確認します。最後に、より上にあるDIRECTルールに一致していないか調べてください。
- 関係のないサイトもPROXYになる:範囲の広いDOMAIN-KEYWORD、IP-CIDR、GEOIPのルールと、末尾がFINAL,PROXYになっていないかを確認してください。
- ネットワークを切り替えたときだけ挙動が変わる:Sceneを使っているか確認します。またSettings → On Demandでオンデマンド接続の条件も確認してください。On Demandは接続を有効にするタイミングを制御するもので、リクエストのポリシーを選ぶDOMAIN-SUFFIXの代わりにはなりません。
- サブスクリプション更新後に接続できない:Homeで選択中の接続と、Configで現在有効なルールをそれぞれ確認します。接続項目の変更とドメインルールの照合は別の問題として切り分けてください。
まとめ:一度に変更するのは1つだけ
同じテストサイト、同じネットワーク、同じプロキシ接続を使い、まずルールだけを変更して照合結果を確認します。正しく一致しても接続できない場合は、接続に必要な設定を確認してください。接続先、DNS、ルールを同時に変更すると、どの変更が結果に影響したのか判断しにくくなります。
6. 指定サイトのルール設定に関するよくある質問
特定のページだけをプロキシ経由にし、ほかのページは直接接続にできますか?
DOMAINとDOMAIN-SUFFIXは、同じドメイン内のページパスを区別しません。2つのページが同じHostを使っている場合、この記事のルールでは同じポリシーが適用されます。パスを含む完全なURLをDOMAIN-SUFFIXに入力しないでください。
example.comを追加した場合、www.example.comも記述する必要がありますか?
DOMAIN-SUFFIXを使う場合、通常は必要ありません。example.comのルールがwww.example.comも対象にします。メインサイトから別の独立したドメインに実際にリダイレクトされる場合は、接続履歴を確認してそのドメインを追加します。実際のリクエストを確認してからConfigを編集してください。
Proxyに切り替えると開くのに、Configに戻すと開けません。まず何を確認すればよいですか?
Configの状態でリクエストをもう一度送信し、失敗したリクエストがPROXYに一致しているか確認します。DIRECTになっている場合は、ドメインの記述漏れや、それより前にあるルールを確認してください。すでにPROXYに一致している場合は、実際の接続先と具体的な接続エラーを確認します。同じルールを重ねて追加するだけでは解決しません。
FINAL,DIRECTはShadowrocketの接続を切るという意味ですか?
いいえ。前のルールに一致しなかったリクエストをDIRECTにする指定であり、接続スイッチをオフにはしません。Configを選び、接続を有効にしたままにすると、前のルールに一致した指定ドメインは引き続きPROXYを使います。
設定を管理する際は、検証済みのコピーを保存し、ドメインを追加するたびに用途を記録してください。各設定の詳しい説明は設定項目ガイドをご覧ください。ルールキーワードの意味がわからない場合は、まず用語クイックリファレンスで確認し、最小限のルールに戻って1つずつテストしてください。