Shadowrocketを手動で接続できるiPhone・iPadユーザー向けの記事です。まずOn Demandと接続後の通信振り分けの違いを確認し、Wi-Fiとモバイル通信の条件を設定します。その後、ドメイン条件とルールの順序を確認します。読み終えると、元に戻せる自動接続の設定方法と、「自動接続しない」「接続後の通信先が違う」場合に確認すべき箇所がわかります。
On Demandは接続を管理し、Configは接続後の通信を振り分ける
ShadowrocketのOn Demandは、iOSのVPNオンデマンド機能を利用し、ネットワーク環境や接続評価の条件に応じて接続を開始するか判断します。バックグラウンドで定期的に接続スイッチを操作する機能でも、WebサイトごとにVPNを作成する機能でもありません。設定場所はSettings → On Demandです。編集できる条件は、現在のアプリ画面で確認してください。
On Demandは「トンネルを確立するか」を決め、Global Routingは確立後の通信をどう処理するかを決めます。Proxyはすべての通信をプロキシ経由にする設定、Directはすべての通信を直接接続する設定です。Configは現在の設定にあるルールに従い、Sceneは選択中のシーンの設定に従います。設定内のDOMAIN-SUFFIXなどのルールを検証する場合は、まずGlobal RoutingがConfigになっていることを確認してください。2つの仕組みを混同して調べないようにしましょう。
- Home:選択中の接続プロファイルが有効で、手動接続後に正常に通信できることを確認します。
- Config:使用中の設定とルールの順序を確認し、選択されていないファイルを編集していないか確かめます。
- Settings → On Demand:システムが接続を試みる条件を設定します。ここにプロキシプロトコルの認証情報は入力しません。
この記事では、ユーザー自身が利用するサービスとサブスクリプションを用意していることを前提とします。On Demandを設定しても、期限切れの接続情報は修復されず、無効になったサブスクリプションURLも更新されません。手動接続に失敗する場合は、自動化を有効にする前に基本の接続を解決してください。
有効にする前に:手動接続と元に戻す方法を確認
初めて設定する場合は、自動接続をオフにしたまま作業します。まず手動接続を行い、システムのVPN構成を追加する許可が求められたら承認してから、Settings → On Demandに戻ります。テスト中はサーバー、DNS、Global Routing、On Demandの条件を同時に変更しないでください。複数の要因があると、失敗の原因を特定しにくくなります。
- Homeで有効な接続プロファイルを選び、接続スイッチを手動でオンにします。
- テスト内容に合わせてGlobal Routingを選びます。Configによる振り分けを確認する場合はConfigを選択します。
- 普段利用できるページにアクセスし、ネットワークの種類と接続状態を記録します。
- Settings → On Demandを開き、まずネットワーク条件を1組だけ追加してから、オンデマンド接続を有効にします。
- Wi-Fiとモバイル通信を一度切り替え、Homeの接続状態とシステムのVPN状態を確認します。
自動接続を停止する方法を先に確認自動接続を停止するには、まずSettings → On Demandでオンデマンド機能をオフにし、その後、接続を手動で切断します。Homeの接続スイッチをオフにするだけでは、その後のネットワーク変化を受けてシステムがOn Demandルールを再評価し、再接続する場合があります。システム設定のVPN項目は「VPN」と検索して探せます。組織が管理するデバイスでは、管理ポリシーの制限を受けることもあります。
モバイル通信に対応していないiPadでは、Wi-Fi条件だけを確認してください。システム要件はApp Storeの掲載内容をご確認ください。モバイル通信への切り替えが表示されないことを、モバイル通信条件が機能しない証拠と判断しないでください。
Wi-Fiとモバイル通信:具体的な条件を先に、汎用条件を後に設定
ネットワーク条件は「インターフェイスの種類 + 必要に応じてWi-Fi名 + アクション」の形で設定します。ここでは、自宅のWi-Fiではトンネルを自動接続せず、それ以外のWi-Fiとモバイル通信では自動接続する例を紹介します。Home-WiFiは説明用のSSIDです。設定時には実際に接続するWi-Fi名に置き換えてください。ルーターの管理画面アドレスではありません。
自宅のWi-Fiを例外にする
- 設定場所
- Settings → On Demand
- InterfaceTypeMatch
- WiFi
- SSIDMatch
- Home-WiFi
- Action
- Disconnect
具体的なSSIDの条件を先に、すべてのWi-Fiに一致する条件を後に設定します。
モバイル通信で接続
- 設定場所
- Settings → On Demand
- InterfaceTypeMatch
- Cellular
- SSIDMatch
- 設定しない
- Action
- Connect
モバイル通信の条件にWi-Fi名は指定しません。デバイスでモバイル通信が利用できる必要があります。
上記の英語キーは、システムのオンデマンド条件を説明するためのものです。アプリの画面に同じ項目名がそのまま表示されるとは限りません。現在の画面にあるWi-Fi、モバイル通信、アクションの選択肢を使って設定してください。これらのキーをConfigの通常の通信振り分けルールに貼り付けないでください。
| 評価順 | 一致する条件 | アクション | 想定される結果 |
|---|---|---|---|
| 1 | WiFi、SSIDがHome-WiFi | Disconnect | 自宅のWi-Fiでは例外に一致し、このOn Demand VPN接続を維持しない |
| 2 | WiFi、SSIDを指定しない | Connect | その他のWi-Fiで接続を開始 |
| 3 | Cellular | Connect | モバイル通信で接続を開始 |
結論:まずルールの優先順位を確認し、その後に接続情報を調べる
自宅のWi-Fiでも自動接続する場合は、まず、すべてのWi-Fiに対するConnectが、指定SSIDのDisconnectより前に設定されていないか確認してください。具体的な例外を先に評価する順序にしてから、ネットワークを切り替えて再テストします。
SSIDは大文字・小文字、スペース、実際に接続しているWi-Fi名を確認してください。同じルーターでも周波数帯ごとに異なる名前が設定されている場合があり、ゲストネットワークも別のSSIDを使うことがあります。SSIDによる照合で確認できるのは名前だけで、ネットワークの安全性ではありません。自宅のSSIDに一致したことを安全性の認証とみなさないでください。
ドメインによるオンデマンド接続:DOMAIN-SUFFIXとは別の仕組み
ドメインによるオンデマンド接続は、システムの接続評価機能です。システムレベルのEvaluateConnectionでは、ドメイン条件とConnectIfNeededを組み合わせて使えます。「そのドメインにアクセスするたびに必ず再接続する」という意味ではありません。現在のネットワークで名前解決と接続評価が行える場合、システムがVPNを起動しないことがあります。キャッシュ、既存の接続、アプリによる名前解決の方法も、確認結果に影響します。
以下はシステムのオンデマンドルールの構造を示したもので、Action、Domains、DomainActionの関係を確認できます。説明用のプロパティリスト断片であり、ShadowrocketのConfigファイルでも、ユーザーがそのまま読み込む設定でもありません。現在のOn Demand画面に該当するドメイン評価項目がある場合に限り、画面上で設定してください。
<dict>
<key>Action</key>
<string>EvaluateConnection</string>
<key>ActionParameters</key>
<array>
<dict>
<key>Domains</key>
<array>
<string>example.com</string>
</array>
<key>DomainAction</key>
<string>ConnectIfNeeded</string>
</dict>
</array>
</dict>
- EvaluateConnection:無条件にConnectを実行するのではなく、接続評価を行います。
- Domains:評価対象のドメイン範囲を指定します。完全なURL、パス、ポートは入力しません。
- ConnectIfNeeded:システムの評価条件を満たす場合に接続を試みます。アクセスのたびに接続が開始されるとは限りません。
- NeverConnect:該当ドメインの評価を理由に接続を開始しません。すでに確立されているトンネル全体を切断する設定ではありません。
たとえば、example.comはドメインですが、example.com:443にはポートが含まれます。同じドメイン条件として入力しないでください。HTTPSではポート443が一般的ですが、On Demandのドメイン照合はポートを基準に接続を切り替える仕組みではありません。IPアドレスに直接アクセスしても、ドメイン条件の一致は確認できません。
ネットワーク条件とドメイン条件は分けてテスト前のルールがすべてのWi-FiにConnectを実行する設定の場合、後続のドメイン評価で接続開始を決める機会がないことがあります。反対に、前のDisconnectがドメイン評価より先に適用される場合もあります。まずドメイン評価だけを検証し、その後にネットワーク条件を追加してください。互いに競合する複数のアクションが、システムによって自動的に統合されるとは考えないでください。
トンネル確立後:Configで宛先ごとの通信先を設定
「接続を維持しながら、指定したドメインだけをプロキシ経由にする」場合は、通常、トンネル全体を何度も接続・切断するのではなく、Configで通信を振り分けます。On Demandでモバイル通信時の自動接続を設定し、Configでドメイン、IP、地域に応じたポリシーを設定できます。2つの仕組みは併用できますが、互いに置き換えることはできません。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY
この例はルールの構文を示すもので、接続設定一式ではありません。DOMAIN-SUFFIXはドメインの末尾に一致し、IP-CIDRは指定したIPアドレス範囲に一致します。GEOIPはIPアドレスの所在地データベースに基づいて照合し、FINALはそれ以前のルールに一致しなかったリクエストを処理します。現在の設定と各ルールのポリシーに照らして確認し、Config全体をそのまま置き換えないでください。
| 解決したいこと | 変更する場所 | 混同しないポイント |
|---|---|---|
| モバイル通信に切り替えたら自動接続 | Settings → On Demand | GEOIPルールの追加ではない |
| 接続後、example.comをプロキシ経由にする | Config内のDOMAIN-SUFFIX | トンネルを開始する条件ではない |
| ローカルネットワークのアドレスは直接接続 | Config内のIP-CIDR | Directによる振り分けはシステムVPNの切断を意味しない |
| ほかのルールに一致しないリクエスト | Config内のFINAL | 優先して照合したいルールの後に配置 |
問題の切り分けも層ごとに行います。まずシステムがトンネルを確立しているかを確認し、次にGlobal RoutingがConfigになっているかを確認します。最後に、実際に一致した通信振り分けルールを調べます。接続されていない場合、FINALを変更してもオンデマンド接続は解決しません。接続済みなのに通信先のポリシーが違う場合は、Wi-Fi条件を何度も変更せず、設定を確認してください。
テストとトラブルシューティング:変更する条件は一度に1つ
自動接続が正常かどうかは、再現可能なネットワーク切り替えで確認します。以下はテスト手順と想定される状態であり、あらゆるネットワーク環境での接続時間を保証するものではありません。切り替え後はシステムのネットワーク評価が完了するまで待ってから状態を確認してください。切り替えと同時に接続スイッチを何度も手動操作しないでください。
- 指定Wi-Fiを確認:Home-WiFiに接続し、Disconnectの例外に一致することを確認します。それでも接続状態が続く場合は、SSIDとルールの順序を確認してください。
- 別のWi-Fiを確認:名前がわかっている別のWi-Fiに切り替え、汎用Wi-FiのConnectで接続が開始されることを確認します。
- モバイル通信を確認:Wi-Fiをオフにし、デバイスがモバイルデータ通信に接続できていることを確認してから、VPNが起動するか観察します。
- ドメイン条件を単独で確認:先に一致する汎用アクションを一時的に取り除き、既存のトンネルを切断してから、ドメイン評価条件をテストします。キャッシュされたページを何度も再読み込みするだけで判断しないでください。
- 元に戻せることを確認:On Demandをオフにして手動で切断し、その後ネットワークを切り替えます。ほかの自動化機能や管理ポリシーによって接続が再開されないことを確認してください。
接続をオフにしたのに、しばらくすると再接続するのはなぜですか?
まずSettings → On Demandでオンデマンド機能をオフにし、次にHomeで切断します。それでも再接続する場合は、システムのVPN設定にほかの有効なオンデマンド構成がないか、デバイスが組織によって管理されていないか確認してください。
自宅のWi-FiでDisconnectが機能しないのはなぜですか?
まずシステムのWi-Fi設定で現在のSSIDを確認し、指定SSIDの条件を汎用Wi-Fiの条件より前に配置します。同じルーターに異なる名前のネットワークが2つある場合は、対象となるSSIDをそれぞれ条件に含めてください。
指定したドメインにアクセスしても、すぐに接続しないのはなぜですか?
まずConfig内のDOMAIN-SUFFIXではなく、ドメイン評価を使っていることを確認します。次に、それより前にConnectまたはDisconnectが一致していないか確認してください。ConnectIfNeededはシステムの評価結果に基づきます。通常のネットワークでそのまま名前解決してアクセスできる場合、接続が始まらなくても仕様に沿った動作の可能性があります。
VPNに接続済みなのに、宛先への通信が直接接続になるのはなぜですか?
HomeでGlobal Routingを確認してください。Configを使用している場合は、現在の設定でより前にあるルールと、最終的に一致したポリシーを調べます。システムにVPN接続済みと表示されるのはトンネルが存在することを示すだけで、すべてのリクエストがPROXYを使うことを意味しません。
最終的に使う設定を記録する際は、実際のSSID、ルールの順序、Global Routingの設定、テスト時のネットワークの種類を記録してください。トラブルシューティングの記録にサブスクリプションURLや認証情報を公開しないでください。後から条件を追加する場合は、まず現在の設定を再テストし、その後ルールを1つずつ追加してください。