この記事の要点

ShadowrocketのOn Demandは、システムVPNトンネルをいつ確立・切断するかを管理する機能です。接続後の通信を振り分けるルールとは別のものです。自分で用意した接続情報があり、手動接続できる方を対象に、まずWi-Fiとモバイル通信を分けた最小限のルールを設定し、次にドメインによる動作を個別に確認します。最後に優先順位とシステムの許可を確認し、「接続済み」ならすべての通信がプロキシ経由になる、という誤解を防ぎます。

On DemandとGlobal Routingの違い

On Demandの設定画面はSettings → On Demandです。ネットワークインターフェース、Wi-Fi名、ドメインの評価などを条件にして、システムのVPN機能が接続を制御します。時刻で動くタスクではなく、Shadowrocketが前面に表示されているかどうかだけで動作が決まるわけでもありません。自動接続には、有効なVPN構成、システムの許可、利用可能なネットワークが必要です。

一方、Global Routingはトンネル確立後の通信処理を決めます。HomeのGlobal RoutingにはProxy、Direct、Config、Sceneなどの選択肢があります。Configでは、現在の構成に設定されたルールに従って通信が振り分けられます。On DemandのConnectはGlobal RoutingをProxyに変更する操作ではなく、DisconnectもDirectに変更する操作ではありません。問題を調べるときは、この2つを分けて確認してください。

ネットワーク条件が変化 On Demandの条件を評価 システムがトンネルを確立 ルールに従って通信を振り分け 送信先のポリシーを適用

たとえば、モバイル通信でConnectの条件に一致しても、Global RoutingがConfigなら、DIRECTに一致する通信は直接接続します。プロキシポリシーに一致した通信のみ、対応する送信先を使用します。逆に、構成にDOMAIN-SUFFIXルールがあっても、そのドメインへのアクセス時にトンネルが自動で確立するとは限りません。

2つの層
トンネルの接続条件と、接続後の通信振り分けを分けて確認
3ステップ
Settings → On Demand → 条件とアクションを確認
1項目
1回の検証で変更する条件は1つだけ。結果を比較できるように記録

確認の順番:まずトンネル、次に送信先

自動接続しない場合は、まずOn Demandを確認します。システム上は接続済みなのに通信経路が想定と異なる場合は、Global RoutingとConfigを確認し、関係のない設定を繰り返し変更しないようにしましょう。

設定前に手動接続で基準を確認

自動化ルールで接続情報の不備は解消できません。始める前にHomeで既存の構成を選び、手動で接続して、システムがVPN構成の追加を許可していることと、実際に利用する宛先へアクセスできることを確認してください。サブスクリプションは既存の接続情報を提供・更新するもので、Wi-Fiの条件やドメインによる接続方法を決めるものではありません。

  1. 現在の設定を記録:Homeで選択中の項目、Global Routingの設定、Configで使用中の構成を記録します。既存のOn Demandルールがある場合は、その順序とアクションも控えておきます。
  2. 接続を確認:テストするWi-Fiとモバイル通信のそれぞれで手動接続します。どちらかのネットワークで通常の接続ができない場合は、先にネットワークまたは既存の構成を確認してください。
  3. 設定画面を開く:Settings → On Demandを開き、ネットワーク条件、アクション、ルールの順序を確認します。項目の位置や利用できる条件はアプリ内の現在の表示に従い、古い説明を頼りにボタンを探さないでください。
  4. システム設定を確認:iPhone / iPadのシステムSettingsでVPN構成を開き、Shadowrocketに対応する構成とConnect On Demandの状態を確認します。具体的な設定手順や名称は、デバイスに現在表示されている内容に従ってください。
  5. 条件を1つずつテスト:まずネットワーク条件のルールだけを有効にし、ドメイン評価は追加しません。ネットワーク切り替え時の動作を確認してから、次の種類の条件を追加してください。

Wi-Fi名とモバイル通信に応じたアクションの設定

まず目的を明確にします。たとえば、Home-WiFiというWi-Fiに接続したらトンネルを切断し、モバイル通信に切り替わったらトンネルを確立する設定です。ここでのHome-WiFiは任意のネットワーク名の例です。入力時には、実際にデバイスが接続しているSSIDに置き換えてください。存在しない名前をそのまま使わないでください。

SSIDの条件では、実際のネットワーク名について大文字・小文字、空白、記号を確認します。同じ名前の複数のアクセスポイントが、同じ条件に一致する場合があります。また、SSIDだけでネットワークの安全性を判断することはできません。職場と自宅のネットワーク名が同じなら、名前だけでは区別できません。

特定のWi-Fiを条件にする

設定画面
Settings → On Demand
インターフェース
Wi-Fi
SSIDの例
Home-WiFi。実際のネットワーク名を入力
アクション
Disconnect
順序
汎用のWi-Fi条件より前に配置

そのネットワークで本当にトンネルを確立したくない場合に限りDisconnectを使用してください。ネットワークの安全性を判定する機能ではありません。

モバイル通信の条件

設定画面
Settings → On Demand
インターフェース
Cellular
SSID
モバイル通信インターフェースには適用されない
アクション
Connect
確認方法
Wi-Fiをオフにして、新しいリクエストを送信

モバイル通信に対応していないiPadには適用されません。インターネット共有に接続している場合、接続先のデバイスは通常Wi-Fiインターフェースを使用します。

  1. 指定したWi-FiにSSID条件を追加してDisconnectを選びます。保存後、条件がWi-Fiに正しく紐付いており、インターフェースを限定しない汎用ルールになっていないことを確認してください。
  2. CellularにConnect条件を追加します。デバイスでモバイルデータ通信が利用できることを確認してください。Wi-Fiをオフにしただけでモバイルデータ通信が使えない場合、有効な通信テストにはなりません。
  3. ほかのWi-Fiでも自動接続したい場合は、指定SSID以外のWi-Fiを対象とするConnect条件を追加し、指定SSIDの例外ルールより後に配置します。
  4. 対象のWi-Fiに再接続した後、モバイル通信に切り替え、それぞれで新しいリクエストを1回ずつ送信します。ネットワーク名、想定するアクション、システムVPNの実際の状態を記録してください。

ネットワーク切り替え時は、既存の接続、切り替え中のインターフェース、システムの処理タイミングによって観察結果が変わることがあります。切り替え直後のアイコンだけで判断せず、ネットワークが利用可能になってからVPNの状態と新しいリクエストの結果を確認してください。ルールのテストに、短時間で何度もネットワークを切り替える方法は使わないでください。

ドメインで接続を開始する設定:DOMAIN-SUFFIXをOn Demandに転用しない

ドメインによるオンデマンド接続と、通常のドメインルールによる通信振り分けは目的が異なります。前者は、ドメインに関する接続条件をシステムが評価し、トンネルが必要かどうかを判断します。後者は、トンネルが動作している間に通信のポリシーを選択します。Appleのオンデマンド機能では、EvaluateConnectionとドメイン評価アクションを使ってこのような条件を扱えます。ConnectIfNeededは条件に応じて接続が必要かを判断するもので、特定のWebサイトを開くたびに無条件で接続する機能ではありません。

Settings → On Demandを開き、現在の画面にドメイン評価の項目と対応するアクションがあるか確認します。利用できる場合は、https://internal.example.com/pathではなく、internal.example.comのようにドメインを入力してください。例のドメインは入力形式を示すためのもので、利用可能な内部サービスではありません。実際のテストでは、アクセスする権限があり、DNSの条件を把握しているドメインを使ってください。

「どのWi-FiでもまずConnect」と「特定のドメインが必要なときだけ接続」は、同じ目的ではありません。前者では、ネットワーク条件に一致した時点でトンネルの確立を求めています。その後にドメイン条件を追加しても、対象を絞り込むことはできません。ドメインに応じて接続したい場合は、汎用ネットワークルールがドメイン評価より先に一致しないか、個別に確認してください。

Configのドメインルールが対象にするのは接続後の通信

以下はConfigのルール構文の例であり、On Demandの設定文ではありません。該当する通信にポリシーを適用する内容で、システムの自動接続条件を指定するものではありません。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

Global RoutingがConfigの場合、先頭のルールに一致するドメインにはPROXYを適用し、それ以外の通信はFINALのDIRECTに振り分けます。実際の構成では、PROXYに有効な送信先が設定されていることを確認してください。このルールをConfigに保存しても、ドメインによるオンデマンド接続の設定が完了したことにはなりません。

複数の条件に一致する場合:ルールの順序を確認

システムはOn Demandのルールを順番に評価し、最初に一致したルールのアクションを適用します。すべてのアクションが重ねて実行されるわけではありません。一般に、具体的な例外は広い範囲に適用されるネットワーク条件より前に配置します。ドメイン評価ルール内の条件も別途確認し、Configのルール順序と混同しないでください。

順序一致条件アクション確認ポイント
1Wi-Fiに接続し、SSIDがHome-WiFiDisconnect具体的なSSIDの例外を汎用Wi-Fiより先に配置
2ほかのWi-Fiネットワークに一致Connect最初のルールに一致しない場合にのみ評価
3CellularConnectモバイルデータ通信が使える状態で確認

この表はネットワーク条件を優先する設定例で、ドメイン評価は含みません。汎用Wi-FiのConnectを先頭に移すと、Home-WiFiもその条件に一致するため、後続のDisconnectで想定どおりの例外を設定できません。インターフェースを限定しない汎用条件を追加する場合も、後続のネットワークルールが評価されなくならないか確認してください。

  1. 結果が想定と異なる場合は、先頭のルールから「現在のインターフェースに一致するか」「SSIDに一致するか」「どのアクションか」を1つずつ書き出します。
  2. 追加したルールを一時的に無効にし、それまでに動作を確認できた最小限のルールだけを残して、追加条件を外すと問題が解消するか確認します。
  3. 1回の変更で調整するのは、ルール1つの位置またはアクション1つだけにします。保存後、ネットワークを切り替えて新しいリクエストを送信し、再テストしてください。

ここでいうルールの「順序」は、ConfigのFINALでは修正できません。FINALは通信振り分けの最終ルールであり、システムのOn Demandにおける接続アクションではありません。誤ったSSID条件も修正しません。

自動接続しない・切断後に再接続する・ドメインで接続しない場合の確認

まず、再現できる手順を記録します。どのネットワークからどこへ切り替えたか、選択中の構成、最初に一致した条件、システムVPNの状態を控えてください。以下では症状ごとに確認するため、すべての設定を一度にリセットする必要はありません。

On Demandを有効にしたのに、モバイル通信へ切り替えても接続しない

まずモバイルデータ通信が利用できることを確認し、Settings → On DemandでCellular条件とConnectアクションを確認します。先に一致する汎用Disconnectがないかも確認してください。続いて、システムのVPN構成でConnect On Demandの状態を確認します。手動接続も失敗する場合は、既存の接続構成に戻って原因を調べてください。

Homeで手動切断したのに、しばらくすると再接続するのはなぜですか?

On Demandが有効なままだと、その後のネットワークイベントやリクエストが接続条件に一致し、再接続することがあります。一時停止を確認するには、Settings → On Demandでオンデマンド接続を無効にしてから手動で切断し、システム上の該当構成の状態を確認してください。Homeの接続スイッチを繰り返し操作するだけでは確認できません。

特定のWi-FiにDisconnectを設定したのに、接続状態のままなのはなぜですか?

実際のSSIDを確認します。特に末尾の空白や、よく似た文字に注意してください。指定SSIDのルールが汎用Wi-FiのConnectより前にあることも確認します。さらに、システムで接続中のVPN構成がShadowrocketに対応するものか確認し、別の構成の接続状態をこのルールの結果と取り違えないようにしてください。

対象ドメインにアクセスしても接続しません。ドメインの入力ミスですか?

まず、完全なURLではなくドメインを入力していることを確認し、先に一致して評価を終了させるネットワークアクションがないか調べます。ConnectIfNeededを使う場合は、通常のネットワークのDNSがすでに条件を満たしていないか、テストするアプリが既存の接続を再利用していないかも確認してください。ConfigにDOMAIN-SUFFIXを追加し続けても、システムの接続条件は修正できません。

自動接続できても、一部の通信が直接接続されるのはなぜですか?

Homeに戻り、Global Routingを確認してください。Configを使っている場合は、対象に一致するポリシーとFINALを1つずつ確認します。Directを選んでいる場合、On DemandのConnectによって通信が自動的にプロキシ経由へ切り替わることはありません。まず通信に適用されたポリシーを特定し、その後、既存の送信先が利用可能か確認してください。

元に戻す場合は、まずOn Demandを無効にして手動接続に戻し、基本の接続が引き続き使えることを確認してから、ルールを1つずつ復元します。日常利用では、それぞれの結果を説明できる最小限のルールだけを残してください。互いに上書きする条件を重ねて、問題を覆い隠さないようにしましょう。