ShadowrocketのOn Demand設定|Wi-Fi・モバイル通信・ドメインで自動接続

ShadowrocketのOn Demand設定を解説。指定したWi-Fi、モバイル通信、ドメインの条件と、複数ルールが一致した場合の判定順を確認できます。

この記事の要点

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に接続済みというだけで、特定のドメインの通信が必ずプロキシ経由だと判断しないよう、問題を調べる際はそれぞれの状態を記録してください。

ネットワーク条件の変化オンデマンドルールの評価トンネル状態の変化リクエストがトンネルに入るルーティングポリシーの判定

設定前に再現可能な接続状態を確認する

自動化を有効にする前に、同じ設定で手動接続が正常に動作することを確認してください。On Demandは、誤ったサーバーアドレスや認証情報、無効な設定を修正する機能ではありません。手動接続に失敗している状態で自動再接続を加えても、問題の原因特定が難しくなるだけです。

  1. Homeで利用可能な自分の設定を選び、現在のGlobal Routingモードを記録します。通信振り分けを確認する場合はConfigを使用します。
  2. Settings → On Demandでオンデマンド接続を一時的にオフにし、手動で接続して、通常開けるページにアクセスします。基本の接続が正常に動作することを確認してください。
  3. テストに使うWi-FiのSSIDを正確に記録します。ルーターの機種名や自分で付けたネットワークのメモではなく、システムのWi-Fi一覧に表示される名前を使ってください。
  4. Settings → On Demandを開き、まず必要最小限のネットワーク条件を設定します。一度に変更するのは1項目だけにし、保存後にネットワークを切り替えて確認してください。
  5. システムの「設定 → 一般 → 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が存在する可能性があるため、名前が一致しても信頼できるネットワークの証明にはなりません。同じ名前の異なる周波数帯は同一ルールの対象となることがあり、名前が異なる場合はそれぞれ個別に検討する必要があります。

複数ルールが一致したときは、まず外側の順序を確認

システムの外側のOn Demandルールはリスト順に評価され、最初に一致したルールの動作が適用されます。一致したすべての動作が重ねて適用されるわけではありません。1つの外側ルールでインターフェースの種類とSSIDの両方を指定した場合は、両方の条件を満たす必要があります。一方、SSIDリストに複数の名前がある場合は、そのうち1つに一致すれば対象です。ドメイン評価は別のレイヤーで行われるため、通常のネットワーク条件と同じようには扱えません。

順序条件動作確認する動作
1Wi-Fi、SSIDがHome-WiFiDisconnectこの名前のWi-Fiに接続したときに、この動作を適用
2任意のWi-FiConnectその他のWi-Fiではこの条件に一致
3CellularConnectモバイル通信に切り替えたときに、この動作を適用

まとめ:例外を先に確認し、次に一般条件をテスト

保存後、まずHome-WiFiに接続し、2つ目のルールが先に接続を開始しないことを確認します。次に別のWi-Fiとモバイル通信に切り替えてください。最初のテストで想定どおりにならない場合は、Configを同時に変更せず、SSIDとルール順を確認します。

Connectは条件を満たしたときに接続を開始する動作です。Disconnectは切断し、その条件ではこの仕組みによる接続を行わない動作です。Ignoreは、その回のオンデマンド評価で接続状態を変更しないという意味です。Disconnectとは異なり、「このルールを飛ばして次のルールを探す」という意味でもありません。特定のネットワークで確実に切断状態を保ちたい場合は、Ignoreではなく目的に合った動作を選んでください。

  1. 明確な例外を広範囲の条件より前に置き、保存後にページを開き直して順序を確認してください。
  2. 元のネットワークでWebページを何度も再読み込みするのではなく、実際にネットワークへ接続・切断して評価を発生させてください。
  3. 「条件に一致したが接続が開始されない」場合と「接続を開始したが失敗した」場合を分けて記録してください。後者では、基本のネットワーク接続と既存の設定も確認する必要があります。

ドメインによる自動接続:オンデマンド評価と通信振り分けを区別する

「特定のドメインにアクセスしたら接続する」には、異なる2つの要件があります。トンネル未接続時にドメインを評価して接続の要否を判断する方法と、トンネル接続後に特定のドメインをPROXY経由にする方法です。前者はシステムのOn DemandにあるEvaluateConnection機能、後者はConfigルールに該当します。DOMAIN-SUFFIXを追加するだけでは、前者の機能は有効になりません。

システムルールでは、EvaluateConnectionにドメインの評価項目を含めることができます。ConnectIfNeededは、ドメインの名前解決と到達可能性の条件をもとに、トンネル接続が必要かどうかを判断します。任意のWebアドレスへのアクセスを検知して無条件に接続するものではありません。NeverConnectは、そのドメインの評価項目を接続のきっかけにしない設定です。通信ルールのDIRECTとは異なり、すでに接続しているトンネルを切断する機能もありません。

目的が「example.comはプロキシ経由、それ以外の通信は直接接続」の場合は、現在のConfigで実際に使用しているポリシー名に合わせて振り分けを設定できます。以下はルール構文の例です。現在の設定でPROXYポリシーが有効であることを前提としており、On Demandの設定でも、接続サービスを含むものでもありません。

DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

このルールを使うには、まず動作するトンネルを用意し、Global RoutingでConfigを選択します。既存の設定にほかのルールがある場合、2行の例で全体を置き換えないでください。先に一致する条件がないかを確認し、必要な既存設定を残してください。

決まった手順で自動接続の問題を切り分ける

テストでは同じ既存設定を使い、変更する条件は1つだけにします。その都度、現在のネットワーク、想定する動作、実際のVPN状態、Webページの表示結果を記録してください。Webページが開いたことから分かるのは、そのアクセスが成功したことだけです。On Demandのルールに一致したことや、通信がPROXY経由だったことの証明にはなりません。

  1. 指定したWi-Fiをテスト:設定したSSIDに接続し、ネットワークの接続が完了してからVPNの状態を確認します。Disconnectが目的の場合は、別の自動化によって再接続されていないことも確認してください。
  2. 別のWi-Fiをテスト:名前が異なり、正常にインターネットへ接続できるネットワークに切り替えて、広範囲のConnectルールが接続を開始するか確認します。ネットワークのログインが済んでいない状態を設定ミスと誤認しないでください。
  3. Cellularをテスト:Wi-Fiをオフにし、モバイルデータ通信が使えることを確認してから、トンネルの状態を確認します。テスト中はGlobal Routingのモードを変えないでください。
  4. ドメインをテスト:ドメイン評価を実際に設定している場合に限り実施します。まずトンネルが未接続であることを確認し、新たにドメインへアクセスして、接続状態と利用可能なログを確認します。ページが表示されたかどうかだけで判断しないでください。
  5. 基本状態に戻して確認:再接続を繰り返す場合は、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、ルール順を同時に変更しないでください。

App Storeで正規アプリを確認