On Demandは、システムがVPNトンネルをいつ接続・切断するかを決める機能です。特定のWebサイトへの通信をDIRECTにするかPROXYにするかは決めません。自分で用意したサービスと設定を使い、手動接続が正常に動作する方向けに、Wi-Fiとモバイル通信の条件設定、ドメインによるOn Demand評価とConfigの振り分けの違い、ネットワークを切り替えた際のルール順の確認方法を説明します。
On Demand・Global Routing・Configの違い
ShadowrocketのOn Demandは、システムのオンデマンド接続を設定する機能です。ネットワーク環境が変わったときや、特定の条件を満たしたときに、システムが接続するかどうかを判断します。リクエストごとにプロキシを使うか確認するスイッチでも、アプリを常に前面に表示する機能でもありません。
HomeのGlobal Routingは、接続後の通信をどのように処理するかを設定します。Proxy、Direct、Config、SceneとOn Demandはそれぞれ役割が異なります。前者は通信経路を、後者はトンネルの接続タイミングを扱います。VPNに接続済みというだけで、特定のドメインの通信が必ずプロキシ経由だと判断しないよう、問題を調べる際はそれぞれの状態を記録してください。
- Settings → On Demand:オンデマンド接続の条件と動作を設定し、システム上で対応するVPN構成のオンデマンド接続が有効になっているか確認します。
- Home → Global Routing:現在のモードを確認します。Configルールを検証する場合は、ProxyやDirectではなくConfigを選択してください。
- Config:
DOMAIN-SUFFIX、IP-CIDR、FINALなどの通信振り分けルールを管理します。
設定前に再現可能な接続状態を確認する
自動化を有効にする前に、同じ設定で手動接続が正常に動作することを確認してください。On Demandは、誤ったサーバーアドレスや認証情報、無効な設定を修正する機能ではありません。手動接続に失敗している状態で自動再接続を加えても、問題の原因特定が難しくなるだけです。
- Homeで利用可能な自分の設定を選び、現在のGlobal Routingモードを記録します。通信振り分けを確認する場合はConfigを使用します。
- Settings → On Demandでオンデマンド接続を一時的にオフにし、手動で接続して、通常開けるページにアクセスします。基本の接続が正常に動作することを確認してください。
- テストに使うWi-FiのSSIDを正確に記録します。ルーターの機種名や自分で付けたネットワークのメモではなく、システムのWi-Fi一覧に表示される名前を使ってください。
- Settings → On Demandを開き、まず必要最小限のネットワーク条件を設定します。一度に変更するのは1項目だけにし、保存後にネットワークを切り替えて確認してください。
- システムの「設定 → 一般 → VPNとデバイス管理 → VPN」で、該当する構成を確認します。システム画面の名称は異なる場合があります。Shadowrocketが使用している構成を開いていることを確認してください。
Wi-Fi名とモバイル通信の条件を設定する
よくある設定例は「指定したWi-Fiでは自動接続せず、それ以外のネットワークでは自動接続する」です。Wi-Fi名をすべて個別に登録するのではなく、まず正確な例外条件を設定し、その後に広い範囲を対象とする条件を追加するのがポイントです。以下のHome-WiFiは例示用の名前です。実際には、デバイスに表示されるSSIDを入力してください。
指定したWi-Fiを例外にする
- 設定場所
- Settings → On Demand
- ネットワーク条件
- Wi-Fi
- SSID
- Home-WiFi(実際の名前に置き換え)
- 動作
- Disconnect
- 配置順
- 広範囲のWi-Fi条件より前
そのネットワークでトンネル接続を維持しない場合に限り、Disconnectを使用してください。
モバイル通信で接続
- 設定場所
- Settings → On Demand
- ネットワーク条件
- Cellular
- SSID
- 該当なし
- 動作
- Connect
- 確認方法
- Wi-Fiをオフにして接続状態を確認
現在の画面に表示される条件と動作を使用してください。システムのルールキーを通常の入力欄にそのまま貼り付けないでください。
SSID条件で識別するのはネットワーク名であり、ルーターの本人確認ではありません。場所が異なっても同じ名前のWi-Fiが存在する可能性があるため、名前が一致しても信頼できるネットワークの証明にはなりません。同じ名前の異なる周波数帯は同一ルールの対象となることがあり、名前が異なる場合はそれぞれ個別に検討する必要があります。
- 「その他のWi-FiではConnect」というルールも使う場合は、指定SSIDのDisconnectより後に配置してください。
- ネットワークの種類を限定しないフォールバックルールは、本当に必要な場合にのみ追加します。広範囲のConnectを先に置くと、後続の具体的な条件が適用されません。
- Wi-Fi名の取得に必要なシステム権限を確認してください。SSIDを取得できない場合、指定した名前の例外に一致したと決めつけないでください。
- 公衆Wi-Fiでは、先にネットワークへのログインが必要な場合があります。ネットワーク自体がまだ通信できない状態では、Connectは接続を試みることを示すだけで、成功を保証するものではありません。
複数ルールが一致したときは、まず外側の順序を確認
システムの外側のOn Demandルールはリスト順に評価され、最初に一致したルールの動作が適用されます。一致したすべての動作が重ねて適用されるわけではありません。1つの外側ルールでインターフェースの種類とSSIDの両方を指定した場合は、両方の条件を満たす必要があります。一方、SSIDリストに複数の名前がある場合は、そのうち1つに一致すれば対象です。ドメイン評価は別のレイヤーで行われるため、通常のネットワーク条件と同じようには扱えません。
| 順序 | 条件 | 動作 | 確認する動作 |
|---|---|---|---|
| 1 | Wi-Fi、SSIDがHome-WiFi | Disconnect | この名前のWi-Fiに接続したときに、この動作を適用 |
| 2 | 任意のWi-Fi | Connect | その他のWi-Fiではこの条件に一致 |
| 3 | Cellular | Connect | モバイル通信に切り替えたときに、この動作を適用 |
まとめ:例外を先に確認し、次に一般条件をテスト
保存後、まずHome-WiFiに接続し、2つ目のルールが先に接続を開始しないことを確認します。次に別のWi-Fiとモバイル通信に切り替えてください。最初のテストで想定どおりにならない場合は、Configを同時に変更せず、SSIDとルール順を確認します。
Connectは条件を満たしたときに接続を開始する動作です。Disconnectは切断し、その条件ではこの仕組みによる接続を行わない動作です。Ignoreは、その回のオンデマンド評価で接続状態を変更しないという意味です。Disconnectとは異なり、「このルールを飛ばして次のルールを探す」という意味でもありません。特定のネットワークで確実に切断状態を保ちたい場合は、Ignoreではなく目的に合った動作を選んでください。
- 明確な例外を広範囲の条件より前に置き、保存後にページを開き直して順序を確認してください。
- 元のネットワークでWebページを何度も再読み込みするのではなく、実際にネットワークへ接続・切断して評価を発生させてください。
- 「条件に一致したが接続が開始されない」場合と「接続を開始したが失敗した」場合を分けて記録してください。後者では、基本のネットワーク接続と既存の設定も確認する必要があります。
ドメインによる自動接続:オンデマンド評価と通信振り分けを区別する
「特定のドメインにアクセスしたら接続する」には、異なる2つの要件があります。トンネル未接続時にドメインを評価して接続の要否を判断する方法と、トンネル接続後に特定のドメインをPROXY経由にする方法です。前者はシステムのOn DemandにあるEvaluateConnection機能、後者はConfigルールに該当します。DOMAIN-SUFFIXを追加するだけでは、前者の機能は有効になりません。
システムルールでは、EvaluateConnectionにドメインの評価項目を含めることができます。ConnectIfNeededは、ドメインの名前解決と到達可能性の条件をもとに、トンネル接続が必要かどうかを判断します。任意のWebアドレスへのアクセスを検知して無条件に接続するものではありません。NeverConnectは、そのドメインの評価項目を接続のきっかけにしない設定です。通信ルールのDIRECTとは異なり、すでに接続しているトンネルを切断する機能もありません。
- 設定画面を確認:Settings → On Demandを開き、現在の画面にドメイン評価の項目があるか確認します。Wi-FiやCellularなどのネットワーク条件しかない場合、ドメインをSSID欄に入力しないでください。また、通信振り分けルールを貼り付けてもシステム機能が追加されるわけではありません。
- URLではなくドメインを入力:ドメイン条件には
example.comのような名前を指定します。https://、/accountのようなパス、:443のようなポート番号は入力しません。具体的な一致範囲は項目の説明に従い、ワイルドカードをむやみに追加しないでください。 - 外側で最初に一致するルールに注意:先に任意のWi-Fiに対するConnectルールがあると、後続のEvaluateConnectionは選択されません。ドメインをオンデマンド評価するには、そのネットワークで適用する動作を見直してください。
- DNSキャッシュを考慮:すでに名前解決した結果、アプリ独自の名前解決方法、IPアドレスへの直接アクセスなどにより、新たなドメイン評価が行われない場合があります。Webページを再読み込みしただけでは、ルールが動作していないとは判断できません。
目的が「example.comはプロキシ経由、それ以外の通信は直接接続」の場合は、現在のConfigで実際に使用しているポリシー名に合わせて振り分けを設定できます。以下はルール構文の例です。現在の設定でPROXYポリシーが有効であることを前提としており、On Demandの設定でも、接続サービスを含むものでもありません。
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
このルールを使うには、まず動作するトンネルを用意し、Global RoutingでConfigを選択します。既存の設定にほかのルールがある場合、2行の例で全体を置き換えないでください。先に一致する条件がないかを確認し、必要な既存設定を残してください。
決まった手順で自動接続の問題を切り分ける
テストでは同じ既存設定を使い、変更する条件は1つだけにします。その都度、現在のネットワーク、想定する動作、実際のVPN状態、Webページの表示結果を記録してください。Webページが開いたことから分かるのは、そのアクセスが成功したことだけです。On Demandのルールに一致したことや、通信がPROXY経由だったことの証明にはなりません。
- 指定したWi-Fiをテスト:設定したSSIDに接続し、ネットワークの接続が完了してからVPNの状態を確認します。Disconnectが目的の場合は、別の自動化によって再接続されていないことも確認してください。
- 別のWi-Fiをテスト:名前が異なり、正常にインターネットへ接続できるネットワークに切り替えて、広範囲のConnectルールが接続を開始するか確認します。ネットワークのログインが済んでいない状態を設定ミスと誤認しないでください。
- Cellularをテスト:Wi-Fiをオフにし、モバイルデータ通信が使えることを確認してから、トンネルの状態を確認します。テスト中はGlobal Routingのモードを変えないでください。
- ドメインをテスト:ドメイン評価を実際に設定している場合に限り実施します。まずトンネルが未接続であることを確認し、新たにドメインへアクセスして、接続状態と利用可能なログを確認します。ページが表示されたかどうかだけで判断しないでください。
- 基本状態に戻して確認:再接続を繰り返す場合は、On Demandをオフにして手動接続をテストします。手動接続も失敗するなら、まずネットワークまたは既存設定の問題を解決してください。
接続を切ったのに、しばらくするとまた接続されるのはなぜ?
まずSettings → On Demandでオンデマンド接続をオフにし、その後VPNを切断してください。それでも接続される場合は、システムVPNで実際に有効な構成と、ほかの自動化設定を確認します。アプリ内の設定を1項目オフにしただけで済ませないでください。
自宅のWi-FiをDisconnectに設定したのに、なぜ接続される?
正確なSSID、名前を取得する権限、ルール順を確認してください。特に、任意のWi-Fiに対するConnectが前に置かれていないか確認します。保存後にネットワークから一度切断し、再接続して評価を再実行してください。
DOMAIN-SUFFIXを追加したのに、Webサイトへアクセスしても自動接続されないのはなぜ?
このキーワードはConfigの通信振り分け用であり、トンネルを接続する機能はありません。まず手動接続し、Home → Global RoutingでConfigを選んでルールを確認してください。ドメインを条件にトンネルを接続するには、現在のOn Demand設定に対応する評価項目があるか別途確認します。
モバイル通信では接続済みと表示されるのにWebページが開かない場合、まず何を変更すればよい?
まずOn Demandをオフにして、同じモバイル通信ネットワークで手動接続をテストします。既存の設定が使えることを確認してから、Global RoutingとConfigのルール一致状況を調べてください。プロトコル、DNS、ルール順を同時に変更しないでください。