ShadowrocketのOn Demandは、条件に応じてシステムがVPN接続を管理する機能です。特定のドメインをプロキシ経由にする設定とは異なります。Settings → On DemandでWi-Fiとモバイル通信の接続条件を設定し、ドメイン評価の制約を確認したうえで、ネットワークの切り替えとリクエスト記録を使って動作を検証します。手動接続はできており、接続操作を減らしたい方に向けた内容です。
自動接続とリクエストの振り分けを区別する
On Demandは、条件に応じてシステムがVPNトンネルを確立するかを決めます。Global Routingは、接続後のリクエストをどう処理するかを決めます。この2つは別の設定階層です。自動接続できても、すべてのリクエストがプロキシ経由になるとは限りません。特定のリクエストがDIRECTに一致しても、それを理由にVPNを切断する必要はありません。
HomeでGlobal Routingを確認します。Proxyは全通信をプロキシ経由にする設定、Directは全通信を直接接続する設定、Configは設定ファイルのルールに従う設定、Sceneは設定済みのシーンに応じて関連設定を切り替える機能です。ルールによる振り分けをテストするときはConfigを選び、Configで意図した設定ファイルが有効になっていることを確認してください。SceneはOn Demandの別名ではありません。シーンの切り替えとシステムの自動接続を混同しないようにしましょう。
Settings → On Demand:確認しやすい初期設定を作る
作業前に現在の設定を保存し、On Demandに設定されている条件を記録します。Homeでは現在の接続とサーバーを確認し、Configでは設定ファイルを確認します。Settings → On Demandでは自動接続の条件を管理します。システムのバージョンや表示言語によって条件編集項目の配置は異なる場合があります。スイッチの位置だけで判断せず、条件の種類と動作を確認してください。
- 現在の状態を記録します。Homeでサーバー、Global Routingの設定、手動接続の結果を記録します。Sceneを有効にしている場合は、テスト中にシーンが自動で変わらないよう、影響を切り分けてください。
- 条件設定を開きます。Settings → On Demandを開き、有効状態、既存のネットワーク条件、動作を確認します。複数の条件を同時に変更しないよう、まず検証する条件だけを残してください。
- システムによるVPN構成の保存を許可します。初回設定時にシステムからVPN構成の追加を求められた場合は、表示内容を確認して許可します。システム設定に表示されるVPN項目の名称や場所は、システムのバージョンによって異なります。実際のデバイスの表示に従ってください。
- 保存後に条件を変化させます。編集を終えて戻ったら、Wi-Fiまたはモバイル通信を一度切り替えます。編集画面のまま待つだけではなく、保存前の内容を有効なルールとみなさないでください。
- 接続状態とアクセス結果を分けて記録します。現在のネットワーク、VPNの接続状態、Webページにアクセスできるかをそれぞれ記録します。3つを分けて確認すれば、自動接続の失敗と、接続後の振り分けの失敗を切り分けられます。
On Demandはシステムのネットワーク機能によって実行されるため、Shadowrocketを常に前面に表示しておく必要はありません。バックグラウンドで動作するかどうかは、条件に合うネットワークの変化や接続要求をシステムが受け取るかによります。自動接続の検証に、アプリの強制終了を繰り返す必要はありません。
Wi-Fiのネットワーク名とモバイル通信に応じた動作を設定する
Wi-Fi条件で指定する名前はSSIDです。ルーターの管理アドレスやWi-Fiのパスワードではありません。入力時は大文字・小文字、スペース、記号をそのまま保ち、名前の前後に引用符を付けないでください。デュアルバンドでSSIDが別々の場合は、照合対象にするSSIDをそれぞれ条件に追加します。同じSSIDを共有している場合、SSID条件だけでは周波数帯を区別できません。
以下の2つは条件設定の例であり、そのまま読み込める設定テキストではありません。HomeNetとOfficeNetは説明用の名前です。実際にはデバイスのWi-Fi一覧に表示されるSSIDを指定してください。Connectは接続を要求し、Disconnectはその条件で接続を切断します。選択できる動作の詳細はアプリの画面で確認してください。
直接接続できることを確認済みの自宅Wi-Fi
- 設定画面
- Settings → On Demand
- 条件の種類
- Wi-Fi、SSIDを指定
- 例のSSID
- HomeNet
- 実行する動作
- Disconnect
- 確認方法
- モバイル通信からHomeNetに戻る
このネットワークでVPN接続を維持しない場合に限って使用してください。SSIDが一致しても、ネットワークの安全性が保証されるわけではありません。
指定したWi-Fiから離れたら接続
- 設定画面
- Settings → On Demand
- 条件の種類
- モバイル通信
- 実行する動作
- Connect
- 事前確認
- モバイルデータ通信が有効で、インターネット接続が許可されている
- 確認方法
- Wi-Fiをオフにして新しいリクエストを送信する
この条件が対象にするのはモバイル通信です。名前を指定していないすべてのWi-Fiに自動で適用されるわけではありません。
「HomeNetでは切断し、それ以外のWi-Fiでは接続する」には、他のWi-Fiの条件も明示的に設定する必要があります。モバイル通信のConnectを1つ追加しただけで、すべてのネットワークを網羅したと考えないでください。具体的なSSID条件は、広い範囲を対象とするネットワーク条件より先に評価される必要があります。保存後の条件の順番を確認し、先にある広範な条件が後続の個別条件を妨げないようにしてください。
- 条件を一度に3つ加えるのではなく、まずHomeNetとモバイル通信の2つの状態をテストしてから、「その他のWi-Fi」を追加します。
- 同じSSIDのWi-Fiが別の場所で使われている場合があります。SSIDだけを根拠に自動Disconnectする設定は、ネットワークの安全性を確認する手段として適切ではありません。
- ログイン画面で認証が必要なWi-Fiでは、まずネットワークへのログインを完了してから、サーバーに到達できるか確認してください。Wi-Fiに接続しただけでは、インターネットにアクセスできるとは限りません。
ドメイン評価:EvaluateConnectionの条件と制約を理解する
システムのオンデマンドVPNにおけるドメイン機能は接続評価の仕組みです。ブラウザーで任意のURLを開いたときに、接続を切り替えるコマンドが実行される仕組みではありません。ネットワーク条件のConnectやDisconnectは、その条件に合うネットワークでの動作を直接指定します。一方、ドメイン評価は通常、EvaluateConnectionとドメインに対する動作を使い、特定のドメイン名の名前解決時に接続が必要かを判定します。現在の画面に対応するドメイン評価項目がある場合にのみ、この方法で設定してください。Wi-Fi名の欄にドメインを入力してはいけません。
ConnectIfNeededで重要なのは「必要な場合に接続する」ことです。DNSの名前解決失敗、指定されたDNSサーバー、接続確認の結果などをもとに、VPN接続が必要かを評価できます。現在のネットワークでドメイン名の解決に成功している場合、必ず接続が開始されるとは限りません。NeverConnectは、そのドメインを理由に接続を開始しないという意味です。そのドメインにアクセスすると、確立済みのVPNがすぐ切断されるという意味ではありません。
| 設定の階層 | 確認する対象 | 想定される動作 | これだけでは判断できないこと |
|---|---|---|---|
| ネットワーク条件 Connect | Wi-Fiまたはモバイル通信との一致 | VPN接続を要求する | すべてのリクエストがプロキシ経由になる |
| ネットワーク条件 Disconnect | 指定したネットワーク条件 | VPNを切断する | ほかのネットワークでも切断状態が続く |
| ConnectIfNeeded | ドメインと名前解決の評価条件 | 接続が必要な条件に合致するとVPNを確立する | 同じドメインのページを開けば必ず接続が始まる |
| NeverConnect | ドメイン評価 | そのドメインを理由に接続を開始しない | 確立済みの接続を強制的に切断する |
| DOMAIN-SUFFIX | トンネル接続後のリクエスト | ドメインのサフィックスに応じてルールを選ぶ | トンネル外からVPNを自動で起動する |
要点:安定した自動接続には、まずネットワーク条件を使う
「自宅のWi-Fiを離れたら接続する」が目的なら、まずSSIDとモバイル通信のConnect/Disconnectを組み合わせて設定します。名前解決の結果に応じて接続する必要がある場合に限り、ドメイン評価を追加してください。すべてのネットワーク条件をドメイン評価で代用しないでください。
ドメイン条件をテストする場合は、利用者が管理し、名前解決の挙動が分かっているドメインを使い、DNSキャッシュの影響を避けてください。すでに開いているページ、再利用中の接続、IPアドレスへの直接アクセス、アプリ独自の暗号化DNSなどが原因で、想定したシステムの名前解決イベントが発生しないことがあります。example.comはルール形式を説明するための例であり、「必ず名前解決に失敗して接続が始まる」テスト対象には適していません。
接続後のドメイン振り分けはConfigのルールで設定する
「特定のドメインはプロキシ経由、それ以外は直接接続」が目的なら、通常はネットワーク条件で接続を確立し、ConfigのRuleでリクエストを振り分けます。以下はルールの記述例です。PROXYは現在の設定で実際に使用できるポリシー名に置き換えてください。ポリシーの定義を確認せずに、既存の設定を上書きしないでください。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIX,example.com,PROXYはexample.comとそのサブドメインに一致します。送信先のポリシーを選択するルールであり、On Demandのドメイン条件を作成するものではありません。IP-CIDR,192.168.0.0/16,DIRECT,no-resolveは宛先IPアドレスの範囲に適用されます。no-resolveは、このIPルールのために追加のドメイン名前解決を行わないことを示します。GEOIP,CN,DIRECTは宛先IPアドレスとローカルデータベースによる地域判定を使います。個別のドメインルールの代わりにはならず、Webページの言語による分類でもありません。FINAL,PROXYは、それより前のルールに一致しない場合に適用されるフォールバックです。ルールの最後に配置してください。この例ではフォールバック先がプロキシであり、「それ以外はすべて直接接続」ではありません。後者が必要な場合は、用途を確認したうえでフォールバックをDIRECTに変更してください。
検証は2段階で行います。まずOn Demandで接続が確立していることを確認し、次にGlobal RoutingがConfigになっていることと、リクエストが実際に一致したルールを確認します。Proxyを選んでいる場合、この振り分けルールが有効かどうかは判断できません。Directを選んでいる場合も、Webページを開けたことだけではプロキシ経由の接続が正常だとは判断できません。
Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardなどの接続情報はサーバーのプロトコル層に関するもので、「どの条件で接続するか」という設定とは別です。利用中のサービスのアドレス、ポート、認証情報が無効な場合は、まずそちらを修正してください。On Demandの条件を追加しても、プロトコル設定の有効性は変わりません。
スイッチを一度見るだけでなく、4つの状態で組み合わせを確認する
各回で変更する項目は1つだけにし、保存したあと、対象のネットワーク状態に切り替えて新しいリクエストを送信します。以下は前述の設定例に対する確認目標であり、すべてのデバイスでの実測結果を保証するものではありません。ネットワーク切り替え中は再接続に時間がかかることがあります。切り替え直後のアイコンだけで判断しないでください。
| テストする状態 | 操作 | 想定される結果と確認項目 |
|---|---|---|
| 指定したWi-Fi | HomeNetに接続し、新しいリクエストを送信する | Disconnectが適用されることを確認し、VPNの状態とWebページへのアクセスを調べる |
| モバイル通信 | Wi-Fiをオフにし、モバイルデータ通信が利用可能であることを確認する | Connectが適用されることを確認し、接続の確立とサーバーへの到達性を調べる |
| その他のWi-Fi | 別の既知のSSIDに接続する | 結果はモバイル通信の条件ではなく、「その他のWi-Fi」の条件で決まる |
| 指定したWi-Fiに戻る | モバイル通信からHomeNetに戻る | Disconnectが再度適用されることを確認する。広範な条件が先に一致していないかも調べる |
手動で切断してもすぐ再接続する場合は、まずOn Demandが有効なままか、現在のネットワークがConnect条件を満たし続けているかを確認してください。システムが条件に応じて再接続している場合、アプリが操作を無視しているわけではありません。一時的に切断状態を保つには、先にOn Demandを無効にしてからHomeで接続を切ります。再開するときは、記録した元の設定に戻して有効にしてください。
よくある問題:自動再接続、ドメインで接続しない、一部だけ失敗する
接続を切っても、すぐに再接続するのはなぜですか?
Settings → On Demandを開き、現在のWi-Fiまたはモバイル通信がConnect条件に一致しているかを確認してください。自動接続を一時停止するには、先にOn DemandをオフにしてからHomeで接続を切ります。元の条件を記録しておき、再開するときに有効に戻せば、停止のために設定をすべて削除せずに済みます。
モバイル通信では自動接続できるのに、別のWi-Fiではできないのはなぜですか?
モバイル通信の条件が対象にするのはモバイル通信だけです。その他のWi-Fiに対する動作が設定されているか、指定SSIDの条件が広範な条件より先に並んでいるかを確認してください。まずWi-Fiのログイン認証を完了してから再試行します。手動接続もできない場合は、ネットワークから利用中のサーバーのアドレスとポートにアクセスできるか確認してください。
ドメインを設定したのに、Webページを開いても接続が始まらないのはなぜですか?
入力先がConfigのDOMAIN-SUFFIXではなく、ドメイン評価の項目であることを確認してください。次にConnectIfNeededの名前解決条件を確認します。DNSキャッシュ、IPアドレスへの直接接続、アプリ独自のDNSなどが、接続開始に影響することがあります。そのドメインへの通信をプロキシ経由にするだけなら、ネットワーク条件のConnectとConfigの振り分けを使うほうが検証しやすくなります。
自動接続はできているのに、一部のWebページだけ開けない場合はどうすればよいですか?
HomeでGlobal Routingを確認し、Configで現在の設定ファイルのルール順、DNS設定、FINALを確認します。開けないドメインと正常に開けるドメインで、どのポリシーが適用されたかを比較してください。元の設定を保存してから、項目を1つずつ調整します。サーバーの変更、DNSの変更、On Demandの並べ替えを同時に行うと、原因を特定できません。