2026年9月15日 · ルール · 約10分

Shadowrocketのルール設定方法:優先順位、FINALのフォールバック、PROXY/DIRECT/REJECTの使い分け

Shadowrocketのルールは上から順に評価され、最初に一致したルールが適用されます。FINALの役割と、PROXY・DIRECT・REJECTの使い分け、設定時の注意点を解説します。

この記事の概要

Shadowrocketのルールは、マッチ条件と実行ポリシーで構成されます。利用中のサービスやサブスクリプションがあり、設定ファイルを調整する方向けに、Global RoutingをConfigに設定し、「個別の例外を先に、広い条件を後に、FINALを最後に」並べる手順と、同じリクエストで一致結果を確認する方法を説明します。例は構文の解説用で、ノードやサブスクリプションは提供しません。

1. まずGlobal Routingを確認してからルールをチェック

設定ファイルにルールを書いても、現在のリクエストが必ずそのファイルに従って振り分けられるとは限りません。Homeでは接続やサービス項目を管理し、Configでは設定ファイルを管理し、Settingsではアプリの設定を行います。トラブル時は、接続に使われている設定を確認してから、Home → Global Routingを確認してください。この記事のルール解説はConfigを選択していることが前提です。ProxyまたはDirectで一時的に振り分けを上書きしている場合には当てはまりません。

Config

推奨

現在の設定に記述されたルールに基づいてリクエストのポリシーを決定します。PROXY、DIRECT、REJECTのどれが適用されるかは実際に一致したルールで決まり、このモード自体があらかじめ決めるものではありません。

適した用途:ルールの作成、一致順の確認、設定に沿った日常的な振り分け。

Proxy

通信をプロキシ経由で処理し、この記事で扱うルールごとの通常の振り分けは行いません。同じ宛先にプロキシ経由で接続できるか比較する用途には使えますが、ルールの検証にはなりません。

適した用途:一時的にプロキシ接続とConfigによる振り分けを比較する。

Direct

通信を直接接続で処理します。Directを選択中に設定へPROXYルールを追加しても、ルールが適用された証拠にはなりません。

適した用途:ローカルネットワークから宛先へ直接アクセスした結果を比較する。

Global RoutingのSceneではシーンを選択するため、現在そのシーンで使われている設定を確認してください。Sceneは[Rule]内に記述するルールキーワードではありません。初回のルール検証では、条件を減らすため明示的にConfigへ切り替えます。Settings → On Demandは条件に応じて接続を開始する動作を制御するもので、ルールの順序は変更しません。

判断のポイント:まずモードを固定し、ルールを1つだけ変更する

Configに切り替えた後に結果が変わった場合は、まず以前のGlobal Routingやシーン設定を確認してください。DNS、サービス項目、ルールの順序を同時に変更すると、どの変更が影響したのか判断できません。

2. ルールの構文:条件を先に、ポリシーを後に記述

設定ファイルでは、ルールを[Rule]セクションに記述します。一般的なルールは「タイプ,マッチ値,ポリシー」の形式で、半角のカンマで区切ります。以下の3行は、完全一致のドメイン、ドメインサフィックス、最終ポリシーの例です。ドメインは構文説明用のため、実際の用途にそのまま流用しないでください。

[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
3種類のポリシー
この記事ではPROXY / DIRECT / REJECTを使用
2つのフィールド
FINAL,PROXY:キーワードと最終ポリシー
フォールバックは1つ
ルールの最後に明示的なFINALを1つ置く
ポリシー動作確認ポイント
PROXYプロキシ経由でリクエストを処理します。現在選択されているプロキシが利用可能か確認してください。カスタムポリシーグループを使っている場合は、グループ内の選択内容も確認します。
DIRECTプロキシを使わず、宛先へ直接接続します。現在のローカルネットワークから宛先へアクセスできる必要があります。DIRECTに一致しても、接続の成功が保証されるわけではありません。
REJECT一致したリクエストを拒否します。条件が十分に具体的か確認し、ログインや画像など、必要な通信までブロックしないようにしてください。

PROXYはサーバーアドレスでもプロトコル名でもありません。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardは接続プロトコルです。ルールはリクエストに適用するポリシーを決め、サービス項目には実際の接続パラメーターを設定します。プロトコル名、サブスクリプションのURL、サーバーのポートをルールのポリシー欄に記述しないでください。カスタムポリシーグループを使う場合は、その名前が設定内の定義と一致している必要があります。

3. ルールの優先順位:上のルールに一致すると、下は評価されない

ルールは上から順に評価され、一致した時点で対応するポリシーが適用されます。「より具体的なルールが自動的に優先される」わけでも、すべての一致結果を組み合わせるわけでもありません。上の例では、api.example.comは先にDOMAINに一致するためPROXYが適用されます。img.example.comは1行目に一致せず、次にDOMAIN-SUFFIXに一致するためDIRECTが適用されます。

  1. 個別の例外を先に配置します。完全一致で個別に処理するドメインは、広いサフィックス条件より前に置きます。たとえば、DOMAIN,api.example.com,PROXYをDOMAIN-SUFFIX,example.com,DIRECTより先に記述します。
  2. 次に範囲指定のルールを配置します。DOMAIN-SUFFIXは指定したドメイン自体とそのサブドメインに一致します。example.comはexample.comとa.example.comに一致しますが、この文字列を含むすべてのドメインに一致するわけではありません。
  3. REJECTルールの配置には注意します。先にDOMAIN-SUFFIX,example.com,REJECTを記述すると、後にあるapi.example.comの許可ルールは評価されません。
  4. FINALは最後に配置します。それより前の条件に一致しなかったリクエストに、最後のポリシーを適用します。FINALの後に記述したルールは、通常の後続マッチングには使えません。

最初の2行を入れ替えると、結果が変わります。以下の例では、api.example.comが先頭のルールに一致して直接接続されます。2行目の方が具体的でも、すでに決まった結果は上書きされません。

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

4. FINALのフォールバックとIPルールの組み合わせ

FINALにドメインやネットワークの値は指定しません。正しい形式はFINAL,ポリシーで、例はFINAL,PROXYまたはFINAL,DIRECTです。接続失敗時に再試行する仕組みではありません。PROXYルールに一致して接続に失敗しても、FINALまで下に進んでDIRECTに切り替わることはありません。フォールバックが対象とするのは「どの条件にも一致しない」場合であり、「接続に失敗した」場合ではありません。

ルールの書き方マッチ条件混同しやすい点
DOMAIN-SUFFIX,example.com,PROXYリクエストで識別できるドメインサフィックス。マッチ値にhttps://やWebページのパスは含めません。
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve宛先のIPv4アドレスが指定ネットワークに含まれるかどうか。/16はネットワークプレフィックスで、ポート番号ではありません。この例では192.168.0.0から192.168.255.255までが対象です。
GEOIP,CN,DIRECT宛先IPが地理情報データベース上で属する地域。ページの内容、ドメインサフィックス、ユーザーの所在地で判定するものではありません。
FINAL,PROXYそれより前のルールに一致しなかった場合。マッチ値は不要です。最後に配置してください。

no-resolveは、このIPルールへの一致判定のために追加のドメイン解決を行わないようにします。アプリ全体のDNSを無効にするものではなく、ドメインを自動的にIPへ変換するものでもありません。リクエストに利用可能な宛先IPが含まれていれば、そのIPで判定できます。ドメインしかなく、利用可能なIPもまだない場合、このルールに必ず一致するとは限りません。

GEOIPの判定結果は宛先IPとローカルデータベースに左右されます。同じドメインでも解決先が異なれば、一致する地域条件が変わることがあります。固定ポリシーを適用したい特定のドメインには、まずDOMAINまたはDOMAIN-SUFFIXの明示的な例外を設定し、その後にGEOIPなど範囲の広い条件を配置します。「名前解決に成功した」「ルールに一致した」「接続に成功した」は、それぞれ別の状態です。

[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

上の断片はルールの並べ方の一例であり、完全な設定でも、すべてのネットワークに推奨される一覧でもありません。使用前に、ローカルネットワークの範囲、宛先ドメイン、最終ポリシーが用途に合っているか確認してください。宛先がIPv6を使う場合、IPv4のIP-CIDRルールだけでは対応するIPv6アドレスをカバーできません。関連ルールとネットワーク条件を別途確認してください。

5. 保存後に一致結果を確認する

検証する単位は、すでに開いているページではなく、新しく開始した接続です。ブラウザーが既存の接続を再利用したり、ページがキャッシュを表示したりすることがあります。ページが開けるかだけでは、変更したルールが適用されたか判断できません。変更前に元の設定を保存し、テストでは一度に変更する条件やポリシーを1つにしてください。

  1. 設定を確認

    Configを開き、現在選択されているファイルを確認します。そのファイルの[Rule]セクションを編集して保存してください。有効になっていない別のコピーだけを変更しないようにします。

  2. モードを固定

    Home → Global Routing → Configに戻り、Proxy、Direct、または未確認のSceneではなく、Configが選択されていることを確認します。

  3. 接続を再作成

    設定を反映してから宛先へ新しいリクエストを送ります。必要に応じて切断し、再接続してください。テストページの古い接続を閉じ、接続の再利用を新しいルールの不適用と誤認しないようにします。

  4. ログを確認

    リクエストログで、実際の宛先ドメインまたはIP、一致したルール、適用されたポリシーを確認します。ページで複数のドメインが使われている場合は、メインのページ、ログインAPI、リソースのリクエストを分けて確認してください。

  5. テスト用の変更を戻す

    元のルール、変更内容、結果を記録し、一時的に追加したREJECTルールや例外ルールを元に戻します。通常アクセスが必要なドメインに、テスト用のREJECTを残さないでください。

たとえば、利用許可のあるテスト用ドメインにREJECTを設定すると、新しいリクエストは拒否されるはずです。ただし、ページに表示される古い文章はキャッシュ由来の場合があり、別ドメインから読み込まれた画像が表示され続けることもあります。これは検証方法の説明であり、本サイトでの実測データではありません。ページ全体がすぐ真っ白になるかではなく、該当リクエストのログを基準に判断してください。

6. ルールによる振り分けでよくある質問

FINAL,PROXYを設定したのに、一部のリクエストが直接接続になるのはなぜですか?

まずHome → Global Routing → Configを確認し、リクエストが前方のDIRECTルールに一致していないか確認してください。FINALが対象とするのは、それまでのルールに一致しなかったリクエストだけです。前にDOMAIN-SUFFIX、IP-CIDR、GEOIPのDIRECT条件がある場合は、FINALを追加し直すのではなく、その行を確認します。

URL全体をDOMAIN-SUFFIXにコピーしてもよいですか?

URL形式のままでは指定できません。https://api.example.com/loginからホスト名を取り出します。このホストだけを対象にする場合は、DOMAIN,api.example.com,PROXYと記述します。ルートドメインとそのサブドメインを対象にする場合に限り、DOMAIN-SUFFIX,example.com,PROXYを使います。プロトコル、ポート、パスは含めません。

PROXYに一致しているのに開けません。ルールの順序が間違っていますか?

ログに想定したルールとPROXYが表示されているなら、振り分けの選択は完了しています。次に、ドメイン解決、現在のプロキシの利用可否、宛先サービスの状態をそれぞれ確認してください。遅延テストが正常でも、そのテストに応答があったことを示すだけで、対象ドメインの解決やWebサイトへの接続成功を保証するものではありません。

REJECTを追加した後にログインできなくなりました。どうすれば元に戻せますか?

まず追加したREJECTルールを取り消し、接続を再作成して再テストします。ログインできるようになった場合は、拒否したドメインが認証APIに使われていないか確認してください。許可する必要があるDOMAINの個別ルールは、広い範囲のREJECTより前に置くか、拒否条件を狭めます。依存関係が分からないまま、サービスのルートドメイン全体を拒否しないでください。

設定を整理するときは、まず少数のルールでテスト結果を説明できる状態にしてから、対象範囲を段階的に広げます。ルールを追加するたびに、何に一致するか、それより前に一致する条件があるか、一致後にどのポリシーを使うかを確認してください。この3点が明確なら、FINALは最後に置く明示的な選択肢となり、前のルールの誤りを隠すための継ぎ当てにはなりません。

Shadowrocketの入手方法と設定手順

入手方法は2種類です。iPhone / iPad版はApp Storeで2.99米ドルの買い切りです。システム要件はApp Storeの製品ページをご確認ください。Mac(Appleシリコン/Intel)、Windows、Android、Linux版は無料です。ダウンロードページで利用するプラットフォームを選ぶか、入門ガイドで設定手順をご確認ください。ノードやサブスクリプションの提供・販売・推奨は行っていません。ご自身でお持ちのサービスをご利用ください。

Shadowrocketをダウンロード