Shadowrocketのカスタムルール優先順位|上から順に判定、FINALのフォールバック、PROXY・DIRECT・REJECT

Shadowrocketの設定ファイルの[Rule]を例に、ルールを上から確認し最初に一致した時点で判定を終える仕組み、FINALのフォールバック、3つのポリシーの使い分けと並び順の注意点を解説します。

この記事の要点

Shadowrocketのルールは「条件が細かいものが優先」されるのではなく、リクエストで利用できる情報をもとに上から順に確認し、最初に一致したルールのポリシーを適用します。設定済みのルールにドメイン例外を追加したい方や、振り分け結果を確認したい方に向けて、Global RoutingでConfigを選ぶこと、具体的な例外を広い条件より前に置くこと、FINALを末尾に置くこと、新しい接続で結果を確かめる手順を説明します。

まずConfigを選び、ルールの適用状況を確認

[Rule]セクションでは、リクエストに適用するポリシーを指定します。「カスタムルールが反映されない」とき、すぐにルールを追加するのではなく、使用中の設定ファイルと現在のGlobal Routingを確認してください。ProxyまたはDirectが選択されている場合、その結果をConfigでのルール逐次判定の確認には使えません。

  1. Home → Global Routingを開き、Configが選択されていることを確認してから、Homeに戻ります。
  2. Configを開き、現在選択されている設定を確認します。設定が複数ある場合は、編集する設定と使用中の設定が同じであることを確かめてください。
  3. 該当する設定の編集画面で[Rule]セクションを確認し、変更を保存して、編集後の設定が引き続き選択されていることを確かめます。
  4. Homeに戻り、必要に応じて接続し直してから、対象ドメインに新しいリクエストを送ります。既存の接続を再利用しているページを更新するだけでは確認できません。

この記事ではConfigのルール順序を扱い、Sceneの設定には触れません。Settings → On Demandは条件に応じた接続動作を管理する機能で、ルールの優先順位を設定するものではありません。自動接続が成功しても、接続が開始されたことを示すだけで、特定のドメインルールに一致した証拠にはなりません。

元に戻せるよう設定を保存

変更前に元の設定のコピーを保存してください。この記事のコード例はルールの構文と順序を説明するためのもので、接続に必要なパラメーター一式を含まず、お使いの設定に代わるものでもありません。既存のサービスやサブスクリプションはご自身で管理してください。本サイトではノードやサブスクリプションを提供・販売・推奨していません。

ルールは上から順に判定:具体的な条件が自動で優先されるわけではない

ルールの条件とポリシーは別の要素です。たとえばDOMAIN-SUFFIX,example.com,PROXYでは、DOMAIN-SUFFIXがルールタイプ、example.comが照合対象、PROXYが一致したときに適用するポリシーです。ドメインサフィックスの照合は、そのドメイン自体とサブドメインに一致するため、後ろにある特定のサブドメイン向け例外が確認されないことがあります。

新しいリクエスト条件を照合最初に一致ポリシーを適用判定終了

次の並び順は誤解しやすい例です。docs.example.comにアクセスすると、上にあるサフィックスルールに一致するため、リクエストにはPROXYが適用されます。後ろにある完全一致のルールが「より具体的」だからといって、先のルールを上書きすることはありません。

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

docs.example.comだけをDIRECTにし、同じサフィックスに一致するほかのドメインにはPROXYを適用するには、完全一致の例外を前に移動します。優先順位は記述位置で決まり、キーワード名やルールを追加した順番では決まりません。

[Rule]
DOMAIN,docs.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,PROXY
3種類
この記事で扱うポリシー:PROXY / DIRECT / REJECT
4種類
以下の例で使う条件:DOMAIN / DOMAIN-SUFFIX / IP-CIDR / GEOIP
1行
末尾のFINAL:それまでに一致しなかったリクエストを処理

要点:先に一致する上位ルールを探す

例外を追加しても効果がない場合は、まず同じドメインや上位のサフィックスに一致するルールを探します。例外を、それに一致する可能性のある最初のルールより前に移動してください。同じルールを重複して追加しても、優先順位は上がりません。

PROXY・DIRECT・REJECT:一致後の3つの処理

ポリシーが決めるのは「一致した後の処理」であり、「どの行を先に確認するか」ではありません。PROXYをDIRECTに変更しても、その行の優先順位は上がりません。広い条件の許可ルールより後ろにREJECTを置いても、先のルールですでに処理されたリクエストを拒否することはできません。

ポリシー処理内容確認ポイント
PROXY選択したプロキシポリシーに応じて、送信時の処理を行います。現在選択しているプロキシとその利用可否を確認します。ルールに一致しても、接続先に到達できるとは限りません。
DIRECTプロキシサーバーを経由せず、接続先に直接接続します。現在のネットワークから接続先に直接アクセスできるか確認します。これはVPN全体を切断する指示ではありません。
REJECTこのルールに一致した接続を拒否します。拒否するドメインがページに必要なリソースか確認し、条件を広くしすぎて通常の機能に影響しないようにします。

ルールのポリシーには、設定内にすでにあるポリシーグループを指定することもできます。例をコピーする前に、参照名が現在の設定で何を指しているか確認してください。任意の文字列を、存在するポリシーとして扱うことはできません。この記事では基本動作の説明にPROXY、DIRECT、REJECTを使用し、追加のポリシーグループは作成せず、特定のサービスも指定しません。

FINALの役割:フォールバックであり、自動再試行ではない

FINAL,PROXYは、それ以前のルールに一致しなかった場合にPROXYを適用する指定です。ドメインやネットワーク範囲の条件を持たないため、ルールセクションの末尾に置きます。FINALを前に置くと、その後の通常ルールで未一致のリクエストを処理できなくなります。

プロキシをフォールバックにするルール構成

完全一致の例外
DOMAIN,docs.example.com,DIRECT
サフィックスのポリシー
DOMAIN-SUFFIX,example.com,PROXY
最後のフォールバック
FINAL,PROXY

最初の2つのルールに一致しないリクエストにPROXYを適用します。接続可能かどうかは別途確認してください。

直接接続をフォールバックにするルール構成

特定の接続を拒否
DOMAIN,blocked.example.com,REJECT
サフィックスのポリシー
DOMAIN-SUFFIX,example.com,PROXY
最後のフォールバック
FINAL,DIRECT

最初の2つのルールに一致しないリクエストは直接接続します。直接接続に失敗しても、前のルールに戻ることはありません。

FINALは「先行するプロキシ接続に失敗したら別の方法で再試行する」という指定ではありません。ルールに一致した後、接続がタイムアウトしても、判定が自動的に次のルールへ進むわけではありません。リクエストがPROXYルールに一致した場合は、そのポリシーでの接続を確認してください。接続失敗時の切り替えを期待して、末尾に2つ目のFINALを追加しても解決しません。

  1. 分類されていない通信をPROXYとDIRECTのどちらで処理するか、先に決めます。
  2. 現在の設定にFINALがすでにあるか確認し、むやみに追加するのではなく、既存のフォールバックポリシーを変更します。
  3. 残すルールをFINALより前に整理し、その後ろに有効なルールが残っていないことを確認します。

ドメイン、ネットワーク範囲、GEOIPを同じ例にまとめる

次の例は、明示的な拒否、完全一致のドメイン例外、ドメインサフィックス、指定ネットワーク、GEOIP、最後にFINALという読みやすい順序を示しています。固定のタイプ別優先順位を示すものではありません。要件が異なる場合、たとえば特定のネットワークを常に直接接続する場合は、配置場所とリクエストに照合可能なIP情報があるかを改めて確認してください。

[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,docs.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

example.comとそのサブドメインは、ドメインの関係を説明する例です。192.0.2.0/24は文書用の例示ネットワークであり、実際のサービス用アドレスとして扱わないでください。GEOIP,CN,DIRECTは接続先IPを地理データベースで分類する書き方の例で、すべてのユーザーにこのポリシーを推奨するものではありません。

ルールキーワード照合対象この例での注意点
DOMAIN完全一致するドメイン。明示した単一のドメインだけに例外を設定します。すべてのサブドメインに自動で適用されるわけではありません。
DOMAIN-SUFFIXドメイン自体とそのサブドメイン。この行を先に書くと、後ろにある同じサフィックスの完全一致例外に一致しないことがあります。
IP-CIDR接続先IPv4アドレスが属するネットワーク。no-resolveは、このルールの照合のためにドメイン解決を積極的に行わない指定です。すべてのDNSを無効にするという意味ではありません。
GEOIP地理データベース上での接続先IPの分類。判断基準は、ウェブページの言語やドメインのサフィックス、運営会社の所在地ではありません。
FINALそれまでのルールに一致しなかったリクエスト。末尾に置いてフォールバックだけを担当させます。接続先が利用可能かどうかは確認しません。

ドメインルールは利用可能なドメイン情報、IPルールは接続先IPに依存します。「同じサイトに見える」だけでは互いの代わりになりません。1つのページから複数のリソースドメインへリクエストが送られることもあります。メインページがDIRECTに一致しても、画像、動画、ログイン用APIもDIRECTになるとは限りません。トラブルの確認では、ブラウザーのアドレス欄だけでなく、リクエスト先を記録してください。

要点:照合条件は一度に1つずつ変更

まず特定のドメイン1つで、ルールの位置とポリシーを確認します。その後、サフィックス、ネットワーク範囲、GEOIPを段階的に追加してください。DNS、Global Routing、複数のルールを同時に変更すると、結果が変わっても何が影響したのか判断しにくくなります。

変更後の確認手順とよくある問題

ルールの確認では、「一致したか」と「一致後に接続できるか」を分けて考えます。前者は設定、順序、対象情報を確認し、後者はDIRECTでのネットワーク到達性、またはPROXYに対応する接続を確認します。ページの表示速度だけを見て判断すると、キャッシュ、接続の再利用、サーバーの応答差をルールの効果と取り違えるおそれがあります。

  1. 変更前の状態を記録:現在の設定、Global Routingの状態、対象ドメイン、想定するポリシーを控えます。変更前のルール位置も記録してください。
  2. 保存して適用:変更した設定が使用中であることを確認し、必要に応じて再接続します。選択されていないファイルを編集しただけにならないようにしてください。
  3. 新しい接続を確立:既存のアクセスを終了してから再試行し、長時間接続が確立時の処理結果を引き継がないようにします。
  4. 接続記録を確認:アプリで利用できるリクエストまたは接続の記録で、接続先、ポリシー、一致情報を確認します。記録がない場合は、リクエストが現在の接続に入っているかを先に確認してください。
  5. 一度に変更するのは1項目:まずルールの位置を確認し、次にポリシーを確認します。失敗した場合は保存したコピーに戻して再テストし、確認していない例外を次々に追加しないでください。

ルールを末尾に追加したのに、なぜ以前のポリシーが使われる?

追加したルールがFINALより後ろにないか確認し、次に対象に一致するDOMAIN-SUFFIXなどのルールを上方向に探します。新しいルールを最初に一致するルールより前に移動し、保存して新しい接続でテストしてください。同じルールを繰り返し追加して結果を変えようとしないでください。

DIRECTに設定したのに、なぜ接続できない?

まず接続記録で、リクエストに実際にDIRECTが適用されているか確認します。適用されている場合は、現在のネットワークから接続先に直接アクセスできるか、ドメイン解決が正常かを調べてください。DIRECTが指定するのは送信方法であり、現在のネットワークから接続先に到達できることを保証するものではありません。

REJECTを設定したらページ全体に問題が出た場合は?

追加したREJECTルールを一時的に削除して再度リクエストし、問題が解消するか確認します。関係がある場合は、範囲の広いDOMAIN-SUFFIXを、拒否したい対象だけに一致するDOMAINへ絞り込み、ページが必要とするほかのリソースドメインも確認してください。

設定を更新したら、手動で追加したルールが消えた場合は?

まず、Homeで既存のサブスクリプションのサーバーリストを更新したのか、Configでリモート設定を更新したのかを確認してください。リモート設定を再取得すると、ローカルで編集した内容が上書きされることがあります。更新前にコピーを保存し、更新後に[Rule]セクションを比較して、現在選択されている設定も確認してください。

基本設定に戻る場合は使い方ガイドをご覧ください。Global Routingの状態を確認する場合は、機能紹介のGlobal Routingの説明をご覧ください。確認後は必要な例外だけを残し、重複したルールを削除して、次回も設定全体を上から順に読み取れる状態にしましょう。

Shadowrocketを入手App Storeで正規版を確認