Shadowrocketで一部のサイトだけをプロキシ経由にするには、Global RoutingをConfigに設定し、対象ドメインのルールをフォールバックより前に置き、最後にFINAL,DIRECTを指定します。すでに自分の接続サービスを追加済みの方向けに、最小限のルール例、設定手順、リクエストログによる確認方法を紹介します。例示のドメインは構文の説明用であり、接続サービスのアドレスではありません。
1. Global Routingとルールの役割を確認
「特定のサイトだけをプロキシ経由にする」設定は、Homeで接続先を選ぶだけでは有効になりません。Homeで選ぶ接続先はプロキシの出口を決め、Global Routingはリクエストの振り分け方法を決めます。ルールを使う場合は、まずGlobal RoutingをConfigに設定し、Configで実際に使う設定ファイルが選択されていることを確認してください。編集中のファイルが有効でなければ、現在の接続処理には反映されません。
Proxyは全体をプロキシ経由にし、Directは全体を直接接続します。Configでは、現在の設定ファイルにあるルールを順番に判定します。Sceneはシーン別の設定に使うもので、この記事のルールに必須ではありません。確認中はConfigに固定し、Sceneの切り替えで結果が変わらないようにしてください。
2. 最小構成:DOMAIN-SUFFIXの後にFINALを置く
次の例は「example.comとそのサブドメインはPROXY、それ以外はDIRECT」を意味します。設定ファイルのルール部分のみで、サーバーパラメータを含む完全な設定ファイルではありません。エディターにルール一覧が表示されている場合は、セクション見出しをルールとして追加せず、2つのルールを追加してください。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
| 内容 | 役割 | 注意点 |
|---|---|---|
[Rule] | 設定内のルールセクションを示す見出しです。 | 既存の設定で該当するセクションを探し、重複して作らないようにします。 |
DOMAIN-SUFFIX | 指定したドメインとそのサブドメインに一致します。 | example.comはwww.example.comにも一致します。 |
PROXY | 一致したリクエストをプロキシポリシーに渡します。 | プロキシの出口が設定済みで、接続できる必要があります。 |
FINAL,DIRECT | それ以前のルールに一致しなかった場合、直接接続します。 | FINALにあるのはポリシー項目だけで、ドメイン項目はありません。 |
ドメイン項目にhttps://、パス、クエリパラメータ、ポート番号は含めません。たとえばページのURLに/watch?id=1が含まれていても、ルールに記述するのはドメインだけです。DOMAIN-SUFFIXでは*.example.comと書く必要はありません。ドメインの境界に沿って照合するため、文字列の一部が同じだけの別ドメインには一致しません。
ドメイン全体やすべてのサブドメインではなく、特定のホスト名だけをプロキシ経由にするには、DOMAIN,video.example.com,PROXYを使います。DOMAIN-SUFFIXとは対象範囲が異なり、Webサイトの入口とほかのサブドメインサービスを分けて処理する場合に適しています。
3. DOMAIN-KEYWORDとルール順序の使い分け
ルールは記載順に照合されます。先に一致してポリシーが決まったリクエストは、後続のルールで変更されません。具体的な例外を先に、範囲の広いルールを後に置き、FINALは最後に記述してください。次の例では、特定のサブドメインは直接接続し、それ以外のexample.comへのリクエストはプロキシ経由にします。
[Rule]
DOMAIN,files.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIXを1行目に置くと、files.example.comが先に一致するため、後に記述したDOMAINの直接接続ルールは適用されません。同様に、FINALを対象ドメインのルールより前に置くと、後続のルールはそのリクエストに適用されません。
- まずDOMAINを検討:特定のホスト名だけを対象にし、照合範囲を最小限にしたい場合。
- 通常はDOMAIN-SUFFIX:ドメインとそのサブドメインを対象にする場合。一部サイトだけをプロキシ経由にする用途に適しています。
- DOMAIN-KEYWORDは慎重に使用:
DOMAIN-KEYWORD,example,PROXYはドメイン内の文字列で照合するため、myexample.netにも一致する可能性があります。 - フォールバックは明確に1つ:既存の設定にFINALがある場合は、その既存のフォールバックを調整し、後ろにFINALを追加しないでください。
GEOIPとIP-CIDRはIPアドレスを対象とするルールで、ドメインリストの代わりにはなりません。たとえばIP-CIDR,192.0.2.0/24,DIRECT,no-resolveはIPアドレスの範囲で照合します。このアドレス範囲は説明用です。no-resolveは、このIPルールのために追加のドメイン解決を行わないことを示します。既存の設定で前方にGEOIPや広範囲のIP-CIDRがあり、ポリシーを決めている場合は、後続のルールに渡したいリクエストが先に処理されないよう、順序を確認してください。
4. Configでルールを保存して有効にする
まず、現在使えている設定をバックアップしてください。購読は既存の接続情報の更新に使い、Configは通信の振り分けを決めます。両者を混同しないでください。この記事の手順では購読の変更は不要です。また、Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardのサーバーパラメータを変更する必要もありません。
-
接続を確認
Homeで自分の接続を追加済みで、使用可能な出口が選択されていることを確認します。接続自体が使えない場合は、まず接続の問題を解決してからルールをテストしてください。
-
設定をバックアップ
Configを開き、現在使っている設定を探して、複製するか元のファイルをエクスポートします。使える設定を1つだけの状態で直接上書きしないでください。
-
ルールを編集
設定の編集画面を開き、ルール部分を探します。テキストで編集する場合は[Rule]を見つけ、対象のDOMAIN-SUFFIXをFINALより前に置き、フォールバックをFINAL,DIRECTにします。
-
設定を有効化
変更を保存し、Configに戻って編集後の設定が選択されていることを確認します。次にHome → Global RoutingでConfigを選択してください。
-
リクエストを再実行
接続をいったん確立し直し、テストするページも閉じてから開き直します。既存の長時間接続は以前の経路を使い続ける場合があるため、ページを1回更新しただけでルールが無効だと判断しないでください。
リモート設定の更新でローカルの変更が上書きされることがあります。設定の取得元が定期更新される場合は、変更内容を記録し、更新後に対象ルールとFINALが残っているか確認してください。Homeの接続購読を更新しても、Configのルールファイルが更新または有効化されるわけではありません。
5. Webサイトの表示だけでなく、リクエストログで確認
ルールが処理するのはリクエストであり、ブラウザーのタブ全体ではありません。1つのサイトでも、メインドメイン、静的リソース用ドメイン、ログイン用ドメイン、メディア用ドメインからそれぞれコンテンツを読み込むことがあります。メインドメインだけをプロキシ経由にして「文字は表示されるが画像が読み込めない」場合は、すべてのリクエストをProxyに変更するのではなく、読み込みに失敗したリソースのドメインを確認してください。
- 比較対象を準備:ルールの対象ドメインを1つ選び、ルールに含まれないことが明確なドメインも1つ選んで、それぞれ新しいリクエストを実行します。
- ログを確認:リクエストログで実際のホスト名、適用されたルール、最終的なポリシーを確認します。対象リクエストはPROXY、比較対象のリクエストはFINALに対応するDIRECTになるはずです。
- 原因を切り分ける:PROXYに一致してもページが表示されない場合、振り分けと接続性は別の問題です。同じドメインルールを追加し続けず、プロキシ接続を確認してください。
- 必要なドメインを追加:必要なリソースがDIRECTになっている場合は、そのページのリクエストに使われていると確認できたドメインだけを追加し、再テストしてください。
外部IPアドレスを確認するページでテストしても分かるのは、その確認ページ自身のリクエストがどの経路で送信されたかだけです。すべてのサイトで同じポリシーが使われていることの証明にはなりません。ブラウザーのキャッシュや接続の再利用、アプリ独自のDNS動作も確認結果に影響する場合があります。ログに想定したドメインではなくIPアドレスだけが表示される場合は、リクエストがIPを直接使っていないか、アプリが独自に名前解決していないか、現在のDNS設定がドメインの識別に影響していないかを確認してください。すぐにアドレス範囲全体へルールを広げるのは避けましょう。
6. 接続エラーとルールエラーを分けて確認
次に挙げるのは、ネットワークエラーでよく見られるメッセージの一部であり、ルール編集画面に必ず表示される文言ではありません。エラーが出たら、まずそのリクエストにPROXYとDIRECTのどちらが適用されたかを確認し、該当する経路を調べてください。一度のタイムアウトを理由にドメインルール、DNS、サーバーポートを同時に変更すると、どの変更が影響したのか判断しにくくなります。
エラー:Connection timed out
原因と対処:制限時間内に接続が確立しなかった状態です。プロキシの出口や接続先サイトへの到達性が関係している可能性があります。まずリクエストに適用されたポリシーを確認してください。PROXYの場合は現在の接続をテストし、DIRECTの場合はローカルネットワークから対象に直接接続できるか確認します。
エラー:Connection refused
原因と対処:接続先アドレスで接続が拒否されました。ポートが待ち受けていない場合や、接続パラメータが一致しない場合によく起こります。自分のサーバーアドレスとポートを確認してください。プロキシ接続は正常で特定のサイトだけエラーになる場合は、そのサイトを確認し、DOMAIN-SUFFIXにポート番号を入力しないでください。
エラー:no such host
原因と対処:ドメイン名を解決できず、有効な結果が得られていません。ドメインの入力ミスや現在のDNS設定を確認し、ドメイン項目にURL全体を入力していないか確認してください。名前解決が復旧したら、ルールが適用されるか再確認します。
ネットワークエラーがなく、すべてのリクエストがPROXYになる場合は、Global RoutingがProxyのままになっていないか、前方に範囲の広すぎるルールがないかを確認してください。すべてがDIRECTになる場合は、Directが選択されていないか、正しいConfigが有効になっているか、実際のリクエストドメインがルールの値と一致しているかを確認します。
7. 一部サイトだけをプロキシ経由にする際のよくある質問
特定のページだけをプロキシ経由にしたい場合、完全なURLを指定できますか?
DOMAIN-SUFFIXでは、同じドメイン内のページパスを区別できません。対象にするのはドメインであり、/newsや/videoのようなパスではありません。まず、サブドメインで対象を区別できるか確認してください。同じホスト名を共用している場合、この例ではそのホスト名へのリクエストに同じポリシーが適用されます。
サイトは開くのに、動画が読み込み中のままなのはなぜですか?
再生をもう一度開始し、リクエストログを確認します。動画がメディア用の別ドメインから配信されていて、メインサイトのDOMAIN-SUFFIXでは対象になっていない可能性があります。そのリソースのドメインと最終ポリシーを確認してから、該当するルールをFINALより前に追加してください。現在の接続でメディアへのリクエストが利用できない可能性も確認します。
On Demandを有効にしていても、ルールは必要ですか?
必要です。Settings → On Demandは接続をオンデマンドで確立する条件を設定し、Configのルールは接続確立後のリクエストを振り分けます。この記事のルールをテストするときは、まず接続を手動で維持し、振り分けが正しいことを確認してから、On Demandによる自動接続を別途テストしてください。
数十件のルールを追加した後、競合がないか確認するには?
まず具体的なDOMAINの例外を残し、次にDOMAIN-SUFFIXとDOMAIN-KEYWORDの対象範囲を確認し、最後に有効なフォールバックが1つだけであることを確認します。一度に変更するのは1組のドメインだけにし、プロキシ対象と直接接続対象を1つずつ用意して比較テストしてください。一致結果を記録してから、次のルールを追加します。
最後に確認するのは4点です。Configが有効か、対象ドメインが正確か、具体的なルールから範囲の広いルールへ順に並んでいるか、FINALがDIRECTかを確認します。まず最小限のルールを安定して動作させてから、必要なサイトの関連ドメインを1つずつ追加すると、用途の不明なルールを大量に読み込むより管理しやすくなります。