ソラコムでは2024年5月現在、本記事で紹介しているデバイスによる通信網(PLMN)の固定を非推奨としてご案内しています。この背景や具体的な対応方法は「デバイス実装ガイドライン」をご覧ください。本記事は技術情報としてご覧いただければ幸いです。
こんにちは、Customer Reliability Engineer (CRE) の三國です。
SORACOM Discovery 2022 の発表で planX1 が NTT ドコモ 回線にも追加で対応したことに伴い、お客様より 1 枚で複数のキャリアにつながるマルチキャリア対応の SIM について多く問い合わせをいただいております。
問い合わせの中では、「現在接続しているキャリアへの通信が上手くいかなくなった際にどのように切り替えられるのか」というご質問もしばしばいただきます。このブログでは、この質問に対しての回答と実装例を紹介します。
SIM がマルチキャリアに対応していても、接続するキャリアを指定するのはデバイス
「現在接続しているキャリアへの通信が上手くいかなくなった際にどのように切り替えられるのか」というご質問をいただく際、お客様のよくある期待に「SIM がマルチキャリアに対応しているのだから、通信の失敗をきっかけに SIM がキャリアを切り替えてくれるのではないか」というものがあります。しかしながら、実際には接続するキャリアを指定するのはデバイスです。
SIM はあくまで特定のキャリアへ接続するための “鍵” のようなものを持っていて、使う鍵をデバイスが選択する、とご理解ください。たとえば plan01s をデバイスに用いた場合、(2022 年 8 月において) NTT ドコモと SoftBank への接続には成功しますが、KDDI へ接続させようとしても失敗します。 これは plan01s が持つ “鍵” が、NTT ドコモと Softbank の 2 つであるためです。
SORACOM IoT SIM には、1 枚で複数のキャリアへ接続できるサブスクリプション (プラン) の SIM があります。たとえば日本において、plan01s は NTT ドコモ・SoftBank、planX1 は NTT ドコモ・KDDI・SoftBank へ接続できます。これにより、SIM の差し替えなしで、利用用途やエリアによって回線を切り替えることができます。
なお、デバイスを複数のキャリアへ接続させるには、複数種類の SIM を差す (いわゆるデュアル SIM) など他のアプローチも考えられます。このブログではマルチキャリア対応 SIM を利用するシナリオについて取り扱いますが、他のアプローチについては別の機会で紹介できればと思います。
スマートフォン (iPhone) を例にしたキャリア切り替えのイメージ
デバイスがキャリアを切り替えるイメージとして、スマートフォン (iPhone) での例を紹介します。NTT ドコモと SoftBank に対応している plan01s を取り付けましょう。セットアップはソラコムユーザードキュメントの iOS デバイスで SORACOM Air を使用する を参考にしてください。
iPhone の「設定」>「モバイル通信」>「(plan01s SIM に設定したモバイル通信プラン名)」をタップすると、「ネットワーク選択」欄に現在接続しているキャリアが表示されます。ここでは NTT ドコモに接続していることが分かります。同様の表示が iPhone 画面の左上にもあります。
「ネットワーク選択」をタップすると、どのように iPhone がネットワークを選択するかを設定できます。デフォルトでは「自動」になっており、iPhone のアルゴリズムに則って選択されます。「自動」を無効にすると、数秒ほど検索した後、iPhone は周辺のキャリアを表示します。
「ネットワーク選択」が「自動」となっていても、接続しているキャリア経由で通信ができない際に別のキャリアへ切り替わらないことがあります。お客様によって明示的に切り替えたい場合に「自動」を解除します。
明示的に SoftBank を選択して、接続できることを確認します。なお切り替えには数秒~数十秒かかります。
SORACOM ユーザーコンソールの「セッション履歴」でも、NTT ドコモから SoftBank へと切り替えて接続できていることが分かります (参考: セッション履歴を確認する)。
ここでお伝えしたかったのは以下の二点です。
- ネットワーク選択を自動でするのか、手動でするのかの判断はデバイス側にあります。
SIM は接続できるキャリアの選択肢を提供しているにすぎません。 - デバイスにネットワーク選択を自動でさせた場合、お客様が期待したタイミングでキャリアを切り替えるかはわかりません。
自動選択の仕様が明確なデバイスを利用するか、お客さまにて切り替えロジックを実装する必要があります (iPhone の場合はスクリプトによる切り替えなどができないので手動で切り替えます)
Raspberry Pi と USB ドングルを用いた、キャリアの切り替えの実装例
それでは、IoT デバイスでのキャリア切り替えの実装例を、Raspberry Pi と USB ドングルを用いて紹介します。
注意点
本実装例は理解のしやすさを優先したサンプルであり、本番での利用は想定してません。どのような実装が考えられるかの参考にご活用ください。また、本番への実装を検討するにあたっては後述の「本番への実装にあたっての参考情報」も参考にしてください。
また、当サンプルスクリプトは plan01s を日本国内で利用して NTT ドコモと SoftBank 間で切り替えるようにしています。サブスクリプションや利用国が異なる場合はスクリプトの編集が必要ですのでご注意ください。
実装のイメージ
今回はシンプルなシェルスクリプトを GitHub に用意しています。
このシェルスクリプトは以下のようにキャリアを切り替えます。
- Google Public DNS の 8.8.8.8 へ 10 回 ping をしてロス率を計測する
- 100% のロスが見られた場合はキャリア切り替えの関数を呼び出す
- キャリア切り替えの関数は現在接続しているキャリアを確認し、他に接続できるキャリアへと切り替える
たとえば cron などでこのスクリプトを定期的に実行することで、ping 疎通が失敗したときにキャリアを切り替えられます。
準備
ハードウェアは、以下を用意します。
- Raspberry Pi (当記事は Raspberry Pi 3 Model B で検証しました)
- SORACOM Onyx LTE USB ドングル SC-QGLC4-C1
- SORACOM IoT SIM (plan01s) (NTT ドコモ回線と SoftBank 回線へ接続できます)
Raspberry Pi には Raspberry Pi OS をインストールしてください。インストール方法は、以下のブログを参考にしてください。
Raspberry Pi Imagerの使い方 ― v1.7.2以降 対応版 – SORACOM公式ブログ
Raspberry Pi OS を起動できたら、以下の README の「prerequisites (事前準備)」に記載された手順で、必要なソフトウェアのインストールや SORACOM への接続準備をしてください。
サンプルスクリプトの実行
SORACOM に接続できていることを確認した後、以下のコマンドでダウンロード・実行してください。
wget https://raw.githubusercontent.com/soracom-labs/multi-carrier-failover-demo/main/raspberry_pi/switch-carrier_plan01s_jp.sh chmod +x ./switch-carrier_plan01s_jp.sh sudo ./switch-carrier_plan01s_jp.sh
サンプルスクリプトの解説
解説はリポジトリの README にありますので、別途そちらを参照してください。
キャリア切り替えの検証方法
ここでは、紹介したサンプルスクリプトについて検証方法を紹介します。
障害をきっかけにしたキャリア切り替えは検証が非常に難しいです。なぜなら、「基地局の障害」「キャリアのネットワーク障害」などは現時点で通常はお客様によるテストができないためです。ここでは一つのアイデアとして、インターネットへの直接通信を禁止した「Private Garden」に SIM を所属させる方法を紹介します。インターネットへの直接通信を禁止しているため ping が失敗し、疑似的に障害を模すことができます。なお、「Private Garden」は無料で利用できます。
Private Garden を用いた検証手順は以下のとおりです。
- 前述の準備を完了した Raspberry Pi を SORACOM プラットフォームへ接続する
- スクリプトを実行して何も起きないこと (通信ができていること) を確認する
※この時点で、cron などへ登録して数分おきにスクリプトを実行するようにしてもかまいません。 - SIM をグループへ所属させる
※ 参考: IoT SIM、LoRaWAN デバイス、Sigfox デバイスが所属するグループを切り替える - グループの利用する VPG に Private Garden を設定する
※ 参考: Private Garden 機能を使用する - Private Garden を利用する設定を反映するため、SIM のセッションを削除する
※ 参考: IoT SIM のセッションを再確立する - スクリプトを実行する。ping 疎通が失敗して、キャリアが切り替わることを確認する
- Private Garden の利用を解除する
※ SIM グループ画面で [SORACOM Air for セルラー設定] をクリックし、[VPG (VIRTUAL PRIVATE GATEWAY)] のスイッチを OFF に切り替える - Private Garden の利用解除を反映するため、SIM のセッションを削除する
※ 参考: IoT SIM のセッションを再確立する - スクリプトを実行して何も起きないこと (通信ができていること) を確認する
キャリアが切り替わっていることの確認は、SIM のセッション履歴から確認してください (参考: セッション履歴を確認する)。
本番への実装にあたっての参考情報
本番への実装にあたっては、以下も参考にしてください。
監視の対象や閾値
切り替えの判断基準
今回のサンプルは ping の到達性を監視対象とし、 ping 10 回のパケットロス率が 100% の時に切り替えるようにしていますが、お客様の要件によっては変わる可能性があります。たとえば、監視対象には「電波強度」「ネットワーク登録の状況」「セッション作成の成功・失敗」「お客様通信の成功率」などを判断基準に加えることも考えられます。
切り替え完了までの時間
なお、キャリアの切り替えには多少の時間が必要です。監視が厳しすぎると実際は十分に通信ができているにもかかわらず頻繁にキャリアが切り替わり、結果として通信できる時間を短くしてしまうという可能性があります。セルラーの IoT において一時的に通信ができなくなるということは十分に考えられますので、リトライを実装するなど、通信断があってもビジネスへの影響を極小化するような工夫をすることも強くお勧めします。SORACOM Air for セルラーベストプラクティスガイドも用意していますので参考にしてください。
切り替え先ネットワークの状況確認と切り戻し
サンプルでは切り替わり先のネットワークが存在することを確認していませんのでご留意ください。商用環境での実装においては周囲のネットワーク状況を確認しながら切り替え先が活用できることを予め確認したうえで切り替える、または投機的に切り替えてみるなどビジネス要求に応じた切り替えロジックをご検討ください。
実装のアプローチ
今回紹介したように実装は複雑になりがちです。またエンドツーエンドでの IP レベルの疎通性監視ではご利用データ通信量に応じた通信費用が発生します。本当に冗長性が必要なのか、ビジネス要件を確認した方が良い場合もあります。さらに冒頭に触れたように、マルチキャリアに対応した SIM を使う方法以外にも、複数の物理 SIM を用いる (デュアル SIM) という考え方もあります。実装のアプローチについて詳細な相談には、SORACOM IoT 導入相談会もご活用ください。
まとめ
このブログでは、マルチキャリアに対応した SIM を扱う際に、デバイス側でどのようにキャリアの切り替えを実装出来るか、具体的な例を交えて解説しました。少しでも参考になれば幸いです。
― ソラコム三國 (mick)