On Demandが管理するのは、システムVPNをいつ接続・切断するかです。リクエストごとの送信先ポリシーを決める機能ではありません。手動接続ができており、Wi-Fi・モバイル通信・ドメインの条件に応じて自動接続したい方向けに、Settings → On Demandで設定を一つずつ確認する方法と、Home → Global RoutingやConfigのルールとの違いを説明します。
On Demand・接続状態・振り分けルールの違い
ShadowrocketのOn Demandによる自動接続は、AppleプラットフォームのシステムVPN機能によって実行されます。ネットワーク環境が変わったときや、ドメインの評価条件に該当するリクエストが発生したとき、保存済みの設定に基づいて接続するかどうかをシステムが判断します。On Demandを有効にしても、その時点でトンネルが接続済みとは限らず、すべてのリクエストがプロキシ経由になるわけでもありません。
次の項目は分けて確認しましょう。On Demandは接続するタイミングを決めます。Homeの接続スイッチとシステムVPNの状態は、現在の接続状況を示します。Home → Global Routingは、通信全体の処理方法を決めます。Configを選んでいる場合は、現在の設定ファイル内のルールがリクエストごとの処理方法を決めます。「VPN」アイコンが表示されていることだけで、リクエストが意図どおり処理されたと判断しないでください。
ProxyとDirectは通信全体の処理方法、Configは現在の設定、Sceneは設定済みのシーンに応じた処理です。これらはOn Demandとは別の設定です。たとえば、システムがOn Demandでトンネルを確立していても、Global RoutingがDirectなら、通信全体はDirectで処理されます。「自動接続できた」ことと「対象リクエストがプロキシ経由になった」ことは、別々に確認してください。
設定前に手動接続を確認
この記事では、利用者自身が用意した接続サービス、接続情報またはサブスクリプションがあることを前提とします。On Demandはサーバーアドレス、認証情報、サブスクリプション内容を補う機能ではありません。まず同じ設定で手動接続できることを確認してから自動接続条件を追加すると、接続自体の問題と条件の不一致を切り分けやすくなります。
- Homeで既存の接続項目を開き、アドレス、ポート、プロトコルの設定が自分の接続情報と一致していることを確認します。ポート番号は元の情報どおりに入力してください。On Demandを有効にするからといって、すべてを
443に変更する必要はありません。 - 接続スイッチを手動でオンにします。システムからVPN構成の追加を求められたら、表示内容を確認して許可してください。この許可設定と、構成内の振り分けルールは別のものです。
- 自分が利用できる対象サービスにアクセスし、現在の設定が動作することを確認します。ルールによる振り分けを使う場合は、Home → Global RoutingがConfigになっているか、Configで使用するファイルが選択されているかも確認してください。
- Settings → On Demandを開き、まず現在の条件を記録してから一つずつ変更します。保存後、システムの「設定」で「VPN」を検索し、ShadowrocketのVPN構成を開いてOn Demandが有効になっているか確認してください。
トラブルシューティングでは、元の設定を記録しておけば十分です。VPN構成を何度も削除する必要はありません。構成を削除すると、システム側の許可やOn Demandの状態も削除されることがあり、次回の接続時に再度許可を求められるうえ、前後で条件が異なり比較しにくくなります。
Wi-Fi名とモバイル通信の接続条件を設定する
まず、希望する動作を具体的な条件にします。どのWi-Fi名では切断するのか、ほかのWi-Fiでは接続するのか、モバイル通信では接続するのかを決めてください。Wi-Fi名はSSIDのことです。ルーターの管理アドレスや、端末に割り当てられたローカルIPアドレスではありません。実際のSSIDと、大文字・小文字、空白、末尾の文字まで照合してください。
特定のWi-Fiを指定する例
- 設定項目
- Settings → On Demand
- ネットワークの種類
- Wi-Fi
- SSIDの例
Home-WiFi- 動作
- Disconnect
このネットワークでトンネルを切断したい場合にのみ使用します。Home-WiFiは例示用の名前です。実際に端末が接続するSSIDに置き換えてください。
モバイル通信の条件例
- 設定項目
- Settings → On Demand
- ネットワークの種類
- モバイル通信
- 動作
- Connect
- 確認方法
- Wi-Fiをオフにして、新しいリクエストを送信
モバイル通信と特定SSIDの条件は別々に確認します。モバイル通信の条件にWi-Fi名を入力する必要はありません。
実際の画面に表示される条件と動作では、Connectは条件を満たしたときに接続し、Disconnectは切断します。「特定のWi-Fiで切断」を「すべてのWi-Fiで切断」と混同しないでください。広い範囲に一致するWi-Fi条件と特定SSIDの条件が同時にある場合は、優先順位を確認し、広い条件が特定の条件より先に適用されないようにします。
- 同じルーターでもSSIDが異なる場合:同じルーターの2つの周波数帯で異なるSSIDを使っている場合は、それぞれ確認してください。一方のSSIDを入力しただけでは、もう一方も一致するとは限りません。
- 権限とSSID:条件画面で現在のWi-Fi名を取得できない場合は、システムの案内に従って関連する権限を確認します。名前が空欄のまま、空の値で一致テストを続けないでください。
- 認証が必要なネットワーク:Web認証が必要なWi-Fiでは、まずネットワークへの接続認証を完了してから、トンネルと対象サービスを確認してください。ネットワークへの接続が完了していないことだけでは、サーバー設定に誤りがあるとは判断できません。
- 条件が重なる場合:まず特定のネットワーク条件を一つと、それ以外のネットワークに対する明確な処理方法を一つ設定し、動作を確認してからSSIDを追加してください。
ドメインの自動接続条件とDOMAIN-SUFFIXによる振り分けの違い
ネットワーク条件は「端末がどのネットワークに接続しているか」を判定し、ドメイン条件は「システムがどのドメインに関係するリクエストを処理しているか」を判定します。ドメインに基づくOn Demandの評価はシステムが行い、DNS解決や設定済みの評価条件にも関係します。ブラウザーに文字列を入力すれば必ず接続する、という単純な仕組みではありません。アプリがDNS解決を再実行するか、キャッシュや既存の接続を再利用するかによっても、テスト結果は変わります。
Settings → On Demandでドメイン条件を設定するときは、Webページの完全なURLではなくホスト名を入力します。たとえば、テスト用ドメインはportal.example.comのように指定し、https://portal.example.com:443/accountとは入力しません。後者にはプロトコル、ポート、パスが含まれるため、ドメイン欄には使えません。例示用のドメインは形式を説明するもので、接続先サービスではありません。
| 設定場所 | 解決する内容 | 入力する内容 |
|---|---|---|
| Settings → On Demand | ドメインの評価条件に該当したとき、システムVPNを接続するかどうか | ドメイン欄の指定に従ってホスト名を入力し、対応する評価アクションを確認 |
| Config内のルール | 接続後、そのリクエストにどのポリシーを適用するか | DOMAIN-SUFFIX,example.com,PROXY |
| Config内の最終ルール | 先行するルールに一致しない場合、どのポリシーを適用するか | FINAL,DIRECT |
システムのドメイン評価には、解析に失敗したときや指定した解析条件に該当したときに接続するなど、「必要な場合に接続する」仕組みが含まれることがあります。「一致したドメインすべてにすぐ接続する」という意味ではありません。現在の条件画面で選択できる項目を確認してください。DNS評価の項目が画面にない場合、別形式の設定項目をドメイン欄にそのまま入力しないでください。
新しいリクエストでドメイン条件を確認
自分で確認できるドメイン条件を一つ設定し、既存のアクセスを終了してから新しいリクエストを送信します。その間にシステムVPNの状態を確認してください。接続がトリガーされたことを確認してから、そのリクエストに適用された振り分けルールを調べます。2つの設定層を同時に変更しないでください。
よくある3つの設定例と確認手順
ネットワークごとに期待する動作を決めてから、ドメインの例外条件を検討してください。以下は設定の考え方を示すもので、特定のネットワークが本質的に安全、または必ず切断すべきという意味ではありません。接続するかどうかは、ご自身の利用目的と、利用中のサービスがそのネットワーク環境に対応しているかによって決まります。
| 目的 | 条件の考え方 | 確認手順 |
|---|---|---|
| 特定のWi-Fiでは接続せず、外出先では接続 | 指定SSIDではDisconnectを設定し、ほかのWi-Fiとモバイル通信では必要に応じてConnectを設定 | 指定SSIDに接続し、次に別のWi-Fiへ切り替え、最後にWi-Fiをオフにしてモバイル通信を確認 |
| モバイル通信でのみ自動接続 | モバイル通信ではConnectを設定し、Wi-Fiでは自動接続しない動作を明示的に設定 | Wi-Fiとモバイル通信のそれぞれで新しいリクエストを送信し、システムVPNの状態を確認 |
| 特定のドメインが必要なときだけ接続を評価 | ドメインの評価条件を使い、広範囲に一致するConnect条件が先に接続を開始しないようにする | まずトンネルが切断されていることを確認し、自分のテスト用ドメインにアクセスして、名前解決と接続状態を確認 |
- テスト1回につき変更する条件は一つだけにし、現在のネットワーク、実際のSSID、設定した動作、システムVPNの状態を記録します。
- ネットワークを切り替えたら、接続が完了するまで待ってから新しいリクエストを送信します。再生中の古い接続を使って、新しい条件の動作を判断しないでください。
- まずトンネルが確立されたかを確認し、次に対象リクエストが成功したかを確認します。結果は別々に記録してください。
- 想定と異なる場合は、まず直前に動作していた条件に戻し、条件の重複やシステム側でOn Demandが有効になっていない可能性を確認してください。
複数の条件を何度も切り替えると、ネットワークの変更、ドメインのDNSキャッシュ、ルーティングの設定、サーバーの状態が混同されやすくなります。手順を固定すると切り分けやすくなりますが、一度の成功だけで、すべてのアプリのバックグラウンドリクエストも同じタイミングで接続されるとは判断できません。
スイッチが頻繁に変わる・接続が始まらない場合の確認
手動で切断したのに、また自動接続するのはなぜですか?
まずSettings → On Demandを開き、現在のネットワークに一致するConnect条件が残っていないか確認します。次に、システムの「設定」で「VPN」を検索し、Shadowrocketの構成でOn Demandが有効か確認してください。自動接続を一時停止するには、先にOn Demandを無効にしてからHomeの接続スイッチをオフにします。現在の接続だけを切っても、次のリクエストで再接続することがあります。
モバイル通信に切り替えたのに、自動接続しないのはなぜですか?
端末がWi-Fiではなく、実際にモバイルデータ通信を使用していることを確認します。次に、モバイル通信の条件で指定した動作と、システム側のOn Demandの状態を確認して、新しいリクエストを送信してください。それでも接続しない場合は、On Demandを一時的に無効にし、同じ接続項目で手動接続します。条件が一致していないのか、サービス自体が利用できないのかを切り分けられます。
指定したWi-FiにDisconnectを設定したのに、接続が続くのはなぜですか?
現在のSSIDの完全な名前を確認し、似た名前の別周波数帯やゲストネットワークに接続していないか調べます。その後、より広い範囲に一致する接続条件がないか確認してください。保存後にそのWi-Fiへ再接続し、システムVPNの状態を確認します。条件の編集画面にあるスイッチだけで判断しないでください。
ドメインにアクセスしても接続しません。ルールの記述が間違っていますか?
まずSettings → On Demandのドメイン欄に完全なURLを入力していないか確認します。次に、テスト用リクエストで新しいドメイン解決が実行されているか、ドメイン評価の動作が適切かを確認してください。ConfigのDOMAIN-SUFFIXは通信の振り分けに使うもので、システムのOn Demand接続条件の代わりにはなりません。
自動接続したのに、アクセス結果が想定と違うのはなぜですか?
Home → Global Routingに戻り、現在の処理方法を確認します。Configを使っている場合は、現在の設定にあるDOMAIN-SUFFIX、IP-CIDR、GEOIP、FINALの順序を確認してください。接続がトリガーされても、対象リクエストにはDIRECTなど別のポリシーが適用されることがあります。On Demand条件を繰り返し追加するのではなく、振り分けルールを確認してください。
システムVPN構成を削除したことがある場合は、Shadowrocketに戻って手動接続し、必要なシステム許可を完了してからOn Demandが保存されているか確認してください。テスト対象のシステムVPN構成がShadowrocketのものではない場合は、正しい構成を選択します。別の構成の状態をテスト結果と取り違えないようにしてください。