カスタムルールを正しく使うには、使用中のConfigが正しいこと、Global RoutingがConfigになっていること、例外ルールが広範囲のルールやFINALより前にあることが必要です。独自のサーバーまたはサブスクリプションを利用し、通信の振り分けを調整したい方向けに、バックアップ、編集、有効化、検証の手順を解説します。「ルールに一致しない」場合と「一致後に接続できない」場合を切り分けましょう。
01 Configモードを確認してからルールを編集する
Shadowrocketのルールは、動作モードとは別に切り替えるものではありません。HomeでGlobal Routingを確認してください。Config内の振り分けルールを検証するには、Configを選択します。ProxyとDirectは、それぞれ全体の通信をプロキシ経由または直接接続にするためのルーティングモードです。この状態でのアクセス結果だけでは、カスタムルールが想定どおり適用されたか判断できません。Sceneを使用している場合は、対象のSceneに設定されたルーティングを確認してからテストしてください。
Homeでは接続状態とサーバーの選択、Configでは設定ファイルの管理、Settingsではアプリの設定を確認できます。まずConfigで現在有効なファイルを確認し、そのファイルの編集画面を開いてください。同じ名前の別ファイルだけを編集し、別の設定を使い続けないよう注意しましょう。
- 現在の設定ファイルを複製して保存し、元のGlobal Routingとサーバーの選択状態を記録します。
- Configで編集する設定ファイルを開き、
[Rule]セクションを探します。 - まずは判別しやすいテストルールを1つ追加し、ルール全体を一度に置き換えないでください。
- 保存後、編集した設定ファイルが使用中であることを確認し、Homeに戻ってGlobal RoutingをConfigに設定します。
- 接続を有効にしたまま、新しいアクセスを試します。変更前から継続している接続では、編集したルーティングの検証に適しません。
02 ルールは上から順に評価されるため、例外は先に記述する
ルールは通常、マッチタイプ、値、ポリシーで構成され、各項目を半角カンマで区切ります。たとえばDOMAIN-SUFFIX,example.com,PROXYは、一致したドメインにPROXYを適用する指定です。ルールは設定ファイルに記載された順に評価され、最初に一致したルールのポリシーが適用されます。後ろにある「より具体的な」ルールを探し続けることはありません。
つまり、「より具体的なルールを先にする」のは並べ方の指針であり、自動で並べ替えられるわけではありません。status.example.comにはDIRECTを適用し、同じドメイン配下のほかのリクエストにはPROXYを使う場合、具体的なDOMAINルールをDOMAIN-SUFFIXより前に記述します。
[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,PROXY
status.example.comは最初のルールに一致し、DIRECTが適用されます。www.example.comは最初のルールに一致せず、2つ目のルールに一致するため、PROXYが適用されます。example.com自体も2つ目のルールに一致します。- 最初の2つのルールに一致しないリクエストには、最後のFINALが適用されます。
最初の2つのルールの順番を入れ替えると、status.example.comは先にDOMAIN-SUFFIXに一致するため、後ろのDOMAINルールは適用されません。例のドメインは構文を説明するためのものです。ウェブサイトが表示されるかどうかで、プロキシサービスの利用可否を判断しないでください。
03 DOMAIN-SUFFIX・IP-CIDR・GEOIPのマッチ対象
ドメインルールとIPルールは、異なる対象を判定します。DOMAIN-SUFFIXはドメインのサフィックスに一致するルールで、任意の文字列を含むかどうかを調べるものではありません。example.comとimg.example.comは一致しますが、notexample.comは一致しません。ホスト名を完全一致で指定する場合はDOMAINを使います。
| キーワード | マッチ対象 | 構文例 | 確認ポイント |
|---|---|---|---|
DOMAIN | 完全なドメイン名 | DOMAIN,status.example.com,DIRECT | プロトコル、パス、ポートは含めない |
DOMAIN-SUFFIX | ドメインとそのサブドメイン | DOMAIN-SUFFIX,example.com,PROXY | 広範囲に一致するサフィックスは、具体的な例外より後に置く |
IP-CIDR | IPv4アドレス範囲 | IP-CIDR,192.0.2.0/24,DIRECT,no-resolve | アドレス範囲と名前解決の条件を確認する |
GEOIP | IPアドレスの地理的位置情報 | GEOIP,CN,DIRECT | ドメインのサフィックスから地域を判定するものではない |
FINAL | 前のルールに一致しなかったリクエスト | FINAL,PROXY | すべての例外ルールの後に置く |
192.0.2.0/24はドキュメント用のアドレス範囲で、192.0.2.0から192.0.2.255までを含みます。実際に使用できるサーバーアドレスではありません。no-resolveは、このIPルールのためにドメイン名の名前解決を新たに行わない指定です。マッチに使える宛先IPがすでにあれば判定できます。DNS全体を無効にする指定ではなく、ドメイン名しかなく利用可能なIPもない場合に強制的に一致させるものでもありません。
GEOIPは宛先IPと位置情報データに基づいて判定します。同じ言語のウェブサイトや、同じ地域のドメインサフィックスに必ず同じポリシーが適用されるとは限りません。共通のインフラを使うウェブサイトは、異なるIPアドレスに名前解決される場合があります。特定のドメインに決まったルーティングを適用したい場合は、現在の名前解決結果の地域に頼るのではなく、ドメインルールを明示してください。
04 PROXY・DIRECT・REJECTとFINALの役割
PROXY、DIRECT、REJECTはルールに適用するポリシーで、FINALはルールタイプです。役割が異なります。FINAL,PROXYは「前のルールに一致しなかった場合にPROXYを適用する」という意味であり、FINAL自体にプロキシ機能があるわけではありません。
- PROXY:プロキシポリシーを適用します。基本的な設定では、Homeで選択したサーバーを確認してください。ポリシーグループを使う設定では、グループ内で実際に選択されている項目も確認します。PROXYと記述しただけでサーバーが作成されることはありません。
- DIRECT:プロキシサーバーを経由せず、宛先に直接接続します。アプリのトンネルやルールによる処理を経由する場合はあります。DIRECTを接続スイッチのオフと同じ意味に捉えないでください。
- REJECT:一致したリクエストを拒否します。明確にブロックする必要がある宛先に使い、接続失敗を解決するための汎用設定としては使わないでください。
PROXYをフォールバックにする基本例
- DOMAIN
- status.example.com,DIRECT
- DOMAIN-SUFFIX
- blocked.example.com,REJECT
- FINAL
- PROXY
直接接続する例外と拒否する例外を先に処理し、それ以外のリクエストにはプロキシポリシーを適用します。
DIRECTをフォールバックにする基本例
- DOMAIN
- status.example.com,DIRECT
- DOMAIN-SUFFIX
- example.com,PROXY
- FINAL
- DIRECT
指定した対象だけにプロキシを適用し、リストにないリクエストは直接接続します。
以上は、ルーティングの目的が異なる2つの例です。両方を1つにまとめてコピーしないでください。FINALのポリシーを選ぶ前に、「ルールに記述されていないリクエストをどう処理するか」を決めます。FINALをルールセクションの前の方に置くと、それ以降の例外ルールが正常に評価されません。最後に明示的なフォールバックルールを置くと、設定を確認しやすくなります。
まとめ:デフォルトのルーティングを決めてから例外を追加する
まずFINALで、一致しなかったリクエストの処理先を指定します。その後、処理先を変更したいドメインやIPのルールをFINALより前に追加してください。検証では例外を一度に1つだけ変更し、どの変更が結果に影響したか分からなくなるのを防ぎます。
05 完全な設定例:具体的なドメインから最後のフォールバックまで
次の設定例はルールの順序を確認するためのもので、[Rule]セクションのみを示しています。サーバー定義は含まず、既存設定のほかのセクションを上書きするものではありません。例のドメインとアドレスは説明用です。実際に使う際は、マッチ対象として確認済みの値を記入してください。
[Rule]
DOMAIN,status.example.com,DIRECT
DOMAIN-SUFFIX,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,PROXY
- まず
status.example.comかどうかを判定し、一致した場合は直接接続します。 - 次に
blocked.example.comまたはそのサブドメインに該当するかを判定し、一致した場合は拒否します。 - 続いて、それ以外の
example.comドメインへのリクエストにプロキシを適用します。 - まだ一致しておらず、利用可能な宛先IPがあるリクエストについて、例示したアドレス範囲を確認します。
- 残りのリクエストには、最後のPROXYフォールバックを適用します。
2つ目のルールは3つ目より前に置く必要があります。blocked.example.comは、両方のサフィックスルールに一致するためです。IP-CIDRのマッチ範囲が異なっていても、先に一致したドメインルールのポリシーは覆りません。「明確な例外を先に、広い範囲を後に」という考え方で並べ、同じキーワードのルールをまとめるだけの順序にしないでください。
06 ルールの検証:マッチ結果と接続結果を分けて記録する
ウェブページが開くかどうかだけでは、ルールに一致したか判断できません。PROXYに一致しても、サーバーに到達できなければ接続に失敗する場合があります。DIRECTに一致した場合も、現在のネットワークの制限を受けることがあります。REJECTに一致した場合は、アクセスできないことが想定どおりの結果かもしれません。「どのポリシーが適用されたか」と「ポリシー適用後に何が起きたか」を分けて記録してください。
- 対象を用意:実際の完全なドメイン名から、自分で確認できるものを1つ選び、変更前のアクセス状況を記録します。例示用のアドレスで接続テストをしないでください。
- 環境を固定:同じネットワーク、同じサーバー、同じConfigを使い、Global RoutingがConfigになっていることを確認します。
- 新しいリクエストを送信:ルールを保存したら、開いているページを閉じるか既存の接続を終了し、接続の再利用が確認に影響しないよう、新たにアクセスします。
- 記録を確認:アプリのリクエスト記録で、実際のドメイン名、宛先IP、ルール、ポリシーなど、確認できる情報を照合します。記録項目の名称や表示内容は、現在のアプリ画面に従ってください。
- 1項目ずつ調整:誤ったルールに一致した場合はルールの順序を調整します。正しく一致しているのに接続できない場合は、DNS、プロキシサーバー、または直接接続の経路を確認してください。
1つのページから複数のドメインにリクエストが送られることがあります。メインのドキュメント、画像、API、メディアは、それぞれ別のルールに一致する場合があります。メインサイトのドメインにルールを1つ追加しても、関連するすべてのリソースに同じポリシーが適用されるとは限りません。アクセスに失敗したリクエストの実際のホスト名から調べ、ブラウザーのアドレスバーに表示されたドメインだけを根拠にルールの範囲を広げないでください。
07 カスタムルールのよくある質問
DIRECTを設定したのに、なぜPROXYが使われるのですか?
まずHomeでGlobal RoutingがConfigになっていることを確認し、Configで編集後のファイルが有効になっているか確認します。次にルールを先頭から順に確認してください。前方にあるDOMAIN-SUFFIXがPROXYに一致している場合、それより後ろのDIRECTは適用されません。具体的な例外ルールを広範囲のルールより前に移し、新しいリクエストでテストしてください。
FINAL,PROXYで利用可能なサーバーが自動選択されますか?
いいえ。FINALはフォールバックとしてマッチさせるもので、PROXYはプロキシポリシーを指定します。まず接続可能なサーバーが設定されていることを確認してください。ポリシーグループを使う場合は、グループ内の選択項目と関連設定も確認します。最後の1行を変更しただけでは、アドレスや認証情報、サーバーの状態に関する問題は解決しません。
IP-CIDRを追加したのに、ドメインへのアクセスが一致しないのはなぜですか?
先にドメインルールに一致していないか確認し、宛先が実際に名前解決されたIPが対象のネットワーク範囲に含まれるか照合してください。no-resolveが指定されている場合、ルールのマッチのためにドメイン名を新たに名前解決することはありません。リクエスト記録で宛先IPを確認してから条件を判断し、ウェブサイト名だけからアドレスを推測しないでください。
サブスクリプションを更新した後も、カスタムルールは保持されますか?
まず更新対象を区別してください。サーバーのサブスクリプションは主にサーバー項目を管理し、リモート設定の更新では設定内容が置き換わる場合があります。編集前にコピーを保存し、更新後はConfigでルールと有効状態を確認してください。カスタム内容が消えていたら、バックアップと現在のファイルを比較して必要な項目を復元します。設定全体を何度も上書きしないでください。