Shadowrocket カスタムルールの書き方|上から順に評価するルール、FINAL のフォールバック、PROXY / DIRECT / REJECT

ルールは上から順に評価され、最初に一致した時点で判定が終了します。FINAL はフォールバック先です。優先順位や各ポリシーの意味、基本的な並べ方を解説します。

この記事の概要

Shadowrocket のカスタムルールは、Global Routing を Config にして動作を確認します。個別の例外を先に置き、範囲指定のルールを後に、FINAL を最後に配置します。利用可能な設定があり、通信の振り分けを調整したい方向けに、ルールの構文、ポリシーの違い、並べ方、確認手順を解説します。例には予約済みのサンプルドメインを使用し、サービスへの接続情報は掲載しません。

1. ルールの優先順位:精度ではなく順序で決まる

Shadowrocket は設定内の順序に従ってルールを確認します。接続がいずれかのルールに一致すると、そのルールで指定されたポリシーが適用され、それ以降の「より具体的な」ルールは確認されません。ドメインルールが IP ルールより優先されるわけではなく、単一ドメインのルールが自動的にサフィックスルールより前に配置されるわけでもありません。例外が必要な場合は、ルールを作成する際に例外を前に置いてください。

login.example.com は DIRECT、example.com とそのほかのサブドメインは PROXY にしたい場合は、次の順に並べます。先頭の2行を入れ替えると、ログイン用ドメインへの接続は先に DOMAIN-SUFFIX に一致し、後ろにある DOMAIN ではすでに決まった判定を変更できません。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
3種類
この記事で扱うポリシー:PROXY / DIRECT / REJECT
4種類
サフィックス、アドレス範囲、地域判定、フォールバック:DOMAIN-SUFFIX / IP-CIDR / GEOIP / FINAL
1件
ルールに一致すると、後続の判定は終了

要点:例外を先に移動し、ルールを追加する

具体的なルールが適用されない場合は、まず同じ対象をカバーするルールが上にないか確認します。必要な例外をカバーするルールより前に移動し、新しい接続でテストしてください。同じ内容のルールをむやみに追加するのは避けましょう。

2. PROXY、DIRECT、REJECT:接続の処理方法を決める

ルールの前半は「何に一致するか」を指定し、最後のポリシーは「どう処理するか」を決めます。PROXY はプロキシ経由で処理する指定です。実際の接続先は、選択中のサーバーや設定内のポリシー構成によって異なります。DIRECT はプロキシを経由せず対象へ直接接続し、REJECT は一致した接続を拒否します。これらは Shadowsocks、VMess、VLESS、Trojan などのプロトコル名でも、接続品質の等級でもありません。

ポリシールールの例確認する条件
PROXYDOMAIN,api.example.com,PROXYプロキシ設定が有効で、選択中のサーバーが利用できること。
DIRECTDOMAIN,printer.example.com,DIRECT現在のネットワークから対象へ直接接続でき、ドメイン名が正しく名前解決されること。
REJECTDOMAIN,blocked.example.com,REJECTログインやリソースの読み込みに必要なドメインではなく、実際にブロックが必要なドメインであること。

DIRECT でも接続が必ず成功するとは限りません。対象側でアクセスが拒否される場合や、ローカルネットワークに問題がある場合、DNS が誤ったアドレスを返す場合は、直接接続でも失敗します。同様に、PROXY に一致したことはルールがプロキシを選択したことを示すだけで、接続先サービスに必ずアクセスできるという意味ではありません。トラブル時は「ルールが経路を正しく選んだか」と「その経路が実際に利用できるか」を分けて確認してください。

3. Global Routing:Config でカスタムルールを確認

まず Home → Global Routing で現在のモードを確認し、ルールの効果を判断します。Config では現在の設定にあるルールに従って通信が振り分けられます。Proxy と Direct は経路を比較するために使えますが、特定のカスタムルールに一致したことの確認にはなりません。Scene はシーンの選択に関わります。最初のトラブルシューティングではシーン切り替えを同時に行わず、テスト条件が変わらないようにしてください。

Config

推奨

現在有効な設定内のルールを使用します。ルールごとに PROXY、DIRECT、REJECT を選択でき、一致しない接続は FINAL で処理されます。

用途:カスタムルールの編集と検証、対象ごとの振り分けの維持。

Proxy

通信をプロキシ経由で処理します。一時的に切り替えて、同じ対象にプロキシ経由で接続できるか確認できますが、現在のルールリストへの一致テストにはなりません。

用途:Config の結果と比較し、プロキシ経路自体が利用可能か確認する。

Direct

通信を直接接続経路で処理します。Config と結果が異なる場合は、すぐにプロトコルを変更するのではなく、ルールとログを確認してください。

用途:現在のネットワークから対象へ直接アクセスできるか、一時的に確認する。

比較が終わったら Config に戻してください。Settings → On Demand ではオンデマンド接続の条件を管理します。ルールの並べ替えは行わず、有効にしても FINAL より後ろにあるルールが再び適用されることはありません。テスト中はネットワークと接続の状態を一定に保ち、自動接続、ネットワークの切り替え、ルール編集を同時に行わないようにしてください。

4. よく使うルール構文:ドメイン、アドレス範囲、FINAL

一般的なルールでは、フィールドを半角カンマで区切ります。全角カンマは使いません。ドメインの照合フィールドにはドメイン名だけを指定し、https://、ポート番号、URL パスは含めません。たとえば https://api.example.com:443/v1 にアクセスする場合、DOMAIN に指定する対象は api.example.com で、URL 全体ではありません。443 はこの例の接続ポートであり、ドメイン名のフィールドには含まれません。

キーワード有効な記述例照合範囲と注意点
DOMAINDOMAIN,api.example.com,PROXY完全一致のドメインを照合します。サブドメインは自動的に含まれません。
DOMAIN-SUFFIXDOMAIN-SUFFIX,example.com,PROXYexample.com とそのサブドメインを照合します。*.example.com とは書かないでください。
IP-CIDRIP-CIDR,192.168.0.0/16,DIRECT,no-resolveIPv4 アドレス範囲を照合します。/16 は先頭16ビットがネットワークプレフィックスであることを示します。
GEOIPGEOIP,CN,DIRECTIP の地理データベースに基づいて判定します。ドメインのサフィックスによる判定ではありません。
FINALFINAL,PROXY対象フィールドはありません。前のルールに一致しなかった接続を処理します。

IP-CIDR の後ろに付ける no-resolve は、このルールとの照合のためにドメイン名の解決を能動的に行わないことを示します。そのため、「すべてのドメインを先に名前解決してから、このアドレス範囲と照合する」という意味ではありません。LAN 内の機器をテストする場合は、IP アドレスでの直接アクセスと機器のドメイン名を使ったアクセスを個別に確認し、DNS がパブリック IP とプライベート IP のどちらを返すかにも注意してください。

GEOIP は IP の帰属情報に基づくため、Web サイトの言語、ドメインのサフィックス、運営主体の所在地と同じ結果になるとは限りません。特定のサービスに固定の経路を使う必要がある場合は、GEOIP による間接的な判定に頼るより、明示的なドメインルールを指定して GEOIP より前に置くほうが確認しやすくなります。

5. おすすめの並べ方:具体的な例外を先に、FINAL を最後に

次は、順序を理解するためのルール例です。特定のログイン用ドメインを直接接続にし、明示したドメインを拒否した後、ドメインサフィックス全体を処理します。続いてプライベートアドレス範囲と地域ルールを処理し、最後に FINAL に渡します。これは並べ方の例であり、すべてのネットワークにそのまま適用できる共通設定ではありません。実際の対象に合わせて不要なルールを削除してください。

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

この順序は「具体的な例外を優先する」考え方を示していますが、ドメインルールを常にアドレス範囲より先に置くべきという意味ではありません。すべての LAN 内の対象を直接接続にする場合は、名前解決で LAN 内のアドレスになった対象がドメインルールによって PROXY に送られる可能性も確認し、DNS の動作に合わせて調整してください。ルールの順序は実際の目的に合わせるもので、ひとつのテンプレートを固定の優先順位として扱わないでください。

  1. login.example.com にアクセス:最初の DOMAIN に一致して DIRECT が適用されるため、後続のサフィックスルールは評価されません。
  2. blocked.example.com にアクセス:2番目のルールに一致して REJECT が適用されます。このルールをサフィックスルールより下に移すと、結果が変わります。
  3. api.example.com にアクセス:最初の2件には一致せず、その後 DOMAIN-SUFFIX に一致して PROXY が適用されます。
  4. 192.168.1.1 に直接アクセス:前のドメインルールに一致しない場合、該当するプライベートアドレス範囲のルールに一致し、直接接続されます。
  5. その他の対象にアクセス:GEOIP を確認し、そこにも一致しない場合は FINAL に進みます。

FINAL,PROXY と FINAL,DIRECT は、どちらも有効なフォールバック設定です。違いは、未知の対象がデフォルトでどの経路を使うかです。FINAL は接続失敗後の再試行機能ではありません。前のルールで PROXY に一致してプロキシ接続に失敗しても、そのルールを飛ばして FINAL が実行されることはありません。失敗時の経路を変えるには、該当するルールを変更するか、選択中の接続を修正してください。

6. 編集と確認:一度に変更する条件は1つだけ

以下の手順では iPhone / iPad の画面上の用語を使用します。ルールは Config で有効になっている設定ファイルに含まれます。Home のサーバーリストが変わっても、ルールファイルが更新されたとは限りません。編集前に元の設定を保存し、特に自分で編集したローカルファイルと、リモート更新で上書きされるファイルを区別してください。

  1. モードを確認

    Home → Global Routing を開き、Config を選択します。現在選択中のサーバーを記録し、テスト中は接続先を同時に変更しないでください。

  2. ファイルを確認

    Config を開き、現在有効な設定ファイルを確認します。元の内容を保存してから編集してください。有効になっていない別のファイルを編集しても、現在の接続の振り分けは変わりません。

  3. 順序を調整

    設定内のルールから [Rule] を探し、具体的な例外を対象範囲をカバーするルールより前に置き、FINAL が最後にあることを確認します。ルール行だけをコピーする場合、既存の [Rule] に区間見出しを重複して挿入しないでください。

  4. 保存して再接続

    保存後、変更した設定が有効になっていることを確認し、必要に応じて再接続します。編集前に開いたテストページを閉じるか、既存の接続を終了してから新しいリクエストを送信し、編集前に確立した接続が再利用されないようにしてください。

  5. 結果を確認

    接続履歴またはログで、対象ドメイン、対象 IP、実際に適用されたポリシーを確認します。テスト対象、一致したルール、アクセス時の状況を記録してから、次の変更を判断してください。

3種類の対象で最小限のテストセットを作成できます。DIRECT になる対象、PROXY になる対象、個別ルールがなく FINAL に進む対象をそれぞれ1つずつ用意します。REJECT を使う場合は、明示的にブロックする対象を1つ追加します。Web ページが開くかどうかだけでルールの正しさを判断しないでください。DIRECT と PROXY のどちらでも接続に成功する場合があり、ページがキャッシュを再利用していることもあります。

要点:一致記録で2種類の問題を切り分ける

記録されたポリシーが想定と異なる場合は、モード、有効な設定ファイル、ルールの順序を優先して確認します。ポリシーは一致しているのに接続できない場合は、DNS、選択中のサーバー、現在のネットワークを確認し、同じルールを重ねて追加しないでください。

7. ルールが適用されないとき:症状から原因を確認

ルールの問題は、ルール不足ではなくテスト条件が一定でないことが原因の場合があります。まず、繰り返しテストできる対象を1つ決め、以下の症状に沿って確認してください。より詳しいネットワークのトラブルシューティングはトラブル対処をご覧ください。

ルールを変更しても結果がまったく変わらない

まず Home → Global Routing が Config になっているか確認し、次に Config で有効なファイルが編集したファイルか確認します。保存後、新しい接続を開始してください。長時間継続している接続、ページキャッシュ、既存のセッションによって、古い結果が表示され続けることがあります。

DOMAIN を指定してもサフィックスルールに優先されないのはなぜですか?

DOMAIN が DOMAIN-SUFFIX や、すでに一致している別のルールより後ろにないか確認してください。ルールは記載位置に従って適用され、具体性に基づいて並べ替えられることはありません。例外を対象範囲のルールより前に移し、ページが別のドメインへリダイレクトされていないか、実際のリクエスト先ドメインも確認してください。

FINAL の後ろに例外ルールを追加できますか?

その順序にはしないでください。FINAL はそこまでに一致しなかった接続を処理するため、それより後ろの例外ルールが評価されることはありません。新しいルールを FINAL の上に挿入し、さらに前にある範囲指定ルールにカバーされていないか確認してください。

同じWebサイトへの接続で異なるポリシーが適用されるのはなぜですか?

ページがログイン用ドメイン、静的リソース用ドメイン、API 用ドメインへ個別にリクエストを送信している可能性があります。接続ごとにルールが判定されます。実際に失敗したリクエストのドメインを確認し、アドレスバーに表示された主ドメインだけをもとに、すべてのリソースが同じポリシーを使うと判断しないでください。

更新後にカスタムルールが消えた場合、何を確認すればよいですか?

Home に登録したサブスクリプションのサーバー更新と、Config 内のリモート設定ファイルの更新を区別してください。リモート設定の更新によってファイル内容が置き換わる場合があります。まずバックアップと比較してどの内容が変わったか確認し、そのうえでローカルの変更を残す方法を判断してください。すべての更新が同じ動作だと考えないようにしましょう。

最後に、Config を使っていること、正しいファイルが有効になっていること、例外が範囲指定ルールより前にあることの3点を確認します。すべて確認したら、新しい接続で最終的なポリシーを調べてください。ルールが決めるのは接続の処理経路です。利用中のサービスが使えるかどうかの確認に代わるものではなく、無効になった接続設定を自動で修復することもありません。

Shadowrocket のダウンロードと初期設定

iPhone / iPad 版は App Store で2.99ドルの買い切り、Mac(Apple シリコン / Intel)、Windows、Android、Linux 版は無料です。iPhone / iPad のシステム要件は App Store の表示をご確認ください。アプリの買い切り購入に回線プランは含まれません。初期設定には、ご自身が利用しているサービスの情報をご用意ください。当サイトでは接続先やサブスクリプションを提供、販売、推奨していません。

Shadowrocket を全プラットフォーム向けにダウンロード