本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「SORACOM Arcによるプライベート接続で、クラウドやオンプレミスのサーバーとIoTデバイスをD2D(Device to Device)で接続する」を再編集したものです。
SORACOM Arc(アーク、以下Arc)はWireGuardという VPN 技術を用いて SORACOM プラットフォームへのプライベート接続を提供します。VPN接続はSORACOM上で発行する「バーチャル SIM/Subscriber」を用いる事で Wi-Fiや光回線といったインターネット接続回線からでもLTE/5Gセルラー通信と同様に扱えるセキュアリンクサービスになっています。
そこで本ブログでは任意のクラウドやオンプレミス環境のサーバーにArcを設定し、「デバイス間接続(D2D:Device to Device)機能」を持つSORACOM Gate(以下Gate)を組み合わせIoTデバイスからプライベート接続経由でアクセスするIoTバックエンド構成をご紹介します。
SORACOM Arcの特徴
SORACOM ArcはWireGuardのインターネットVPNを基盤とするため、インターネットに接続できる任意のクラウド、オンプレミスのサーバーへのプライベート接続として利用できます。プライベート接続のSORACOMサービスは他にもSORACOM Canal、Door、Directがあり、そのうちArcと同じインターネットVPNを利用するSORACOM Doorとの比較表を↓に作ってみました。ArcはDoorと比べて基本料金が低廉で手軽に利用でき、一方のDoorはデバイスからサーバーへの接続用途により向いていると言えますね。
特長 | SORACOM Arc+Gate D2D | SORACOM Door |
費用 | VPG Type-Eで利用できるためDoorよりも安価 | VPG Type-Fが必要でArcと比べて高価 |
VPN実装 | WireGuard Clientのため固定グローバルIP不要でNAT配下OK | IPsec Site to Site VPNのため固定グローバルIPアドレスが必要 |
マルチテナント対応 |
SIM同士の相互接続が可能なため不向き | VPGプライバシーセパレータ機能で SIM同士の接続を制限できる |
デバイスへの接続 | 可能 |
Gate C2D(Cloud to Device)のGate Peer(VXLAN)構成が必要 |
メリット/デメリットがそれぞれあるので用途に応じて使い分けるのがおすすめですし、迷うときはサポートにお問い合わせいただいたり、セールスにご相談ください。また、クラウドのマネージドサービスにプライベートネットワーク経由で連携したいという場合は、SORACOM Beam/Funnel/Funkといったアプリケーション連携サービスからAWS IoT Core、Azure Event Hubs、Google Cloud Pub/Subに連携することも可能です。
設定手順
それでは、実際に設定する手順を見ていきましょう。どのクラウド/オンプレミス環境でも良いのですが、今回はGoogle Cloudで試してみます。
動作確認環境
SORACOMのカバレッジ:日本
サーバーホスト:Google Compute Engine 東京リージョン
ホストのOS:Ubuntu 20.04 LTS
クライアント:Raspberry Pi 4B + SORACOM Onyx LTE USBドングルSC-QGLC4-C1 + SORACOM特定地域向けIoT SIM(plan-D)
SORACOM上でVPG(Virtual Private Gateway)の作成とGateの設定
まずはSORACOMユーザーコンソールで設定を進めます。ユーザーコンソールのメニューから[SORACOM Air for Cellular] – [VPG] を選択し、 [+ VPGを追加] をクリックします。以下の要領でVPGを作成します。
・名前:任意のVPG名(例 arc-for-backend-vpg)
・タイプ:Type-Eを選択
・デバイスサブネットIPアドレスレンジ:サーバー側のPrivate IPのレンジと重複しないもの(例 192.168.200.0/24)
作成したVPGをクリックし、 [高度な設定] タブの「Gateを有効にする」のスイッチをオンにし、[保存]をクリックします。
続いて、VPGにSIMを紐付けるSIMグループを作成します。
グループを作成したら、[SORACOM Air for Cellular設定]を開き、[VPG(VIRTUAL PRIVATE GATEWAY)] のスイッチをオン、先ほど作成したVPGを選択して画面をしばらくスクロールさせたところの[保存]ボタンをクリックします。
これでVPGおよびGate D2Dの設定は完了です。クライアントとなるデバイスのSORACOM IoT SIMをSIMグループに追加しておきましょう。
サーバーホストでのsoratun(WireGuard)の構成
続いてクラウド/オンプレミスのホストでSORACOM Arcへの接続を設定します。Arcへの接続はWireGuardを利用するため、LinuxのWireGuardを構成しても良いですが、Arcの接続設定(バーチャルSIM/Subscriber)の作成とWireGuardクライアントを一括で行なうsoratunというツールをSORACOMが公開しているので、今回は以下の手順を元にsoratunを利用します。
まずはsoratunからSORACOM APIにアクセスするためのSAM(SORACOM Access Management)ユーザーを作成します。SORACOMユーザーコンソール右上のメニューから[セキュリティ]をクリックし、[ユーザー] – [SAM ユーザー作成]で任意のユーザー名でSAMユーザーを作成します。リストから作成したSAMユーザーをクリックし、[権限設定]タブの直接指定のテキストボックスに以下をコピー&ペーストします。
{
"statements": [
{
"api": [
"Sim:createSim",
"Sim:createArcSession"
],
"effect": "allow"
}
]
}
[保存]ボタンで保存します。続いて[認証指定]タブをクリックし[認証キーを生成]ボタンをクリックして表示される認証キーIDと認証キーシークレットをコピーしておきましょう。このあとsoratunのセットアップ時に利用します。
続いてサーバーホストをセットアップしましょう。Google Cloud ConsoleのCompute Engine管理画面にアクセスし、[VM インスタンス] – [インスタンスを作成]から必要な項目を選択していきます。ブートディスクでUbuntu 20.04 LTSを選択する以外は、用途に合った任意の項目で問題ありません。
SORACOM ArcはWireGuardクライアントとしてSORACOMが提供するWireGuardサーバーに接続する構成のため、VPC ネットワークのファイヤーウォールで着信(上り)のルールを許可する必要はありません。
作成したVMインスタンスが実行中になったらVMインスタンス一覧から [SSH] をクリックしSSH接続します。今回はVMインスタンスにウェブサーバー(Nginx)をインストールし、デバイスからの接続を受け付けます。
$ sudo apt update
$ sudo apt install nginx
$ sudo service nginx start
$ sudo systemctl enable nginx
以下のコマンドラインでsoratunをセットアップします(コマンドをコピー&ペーストする場合は先頭の$を省いてください)。
soratunの実行プログラムはGitHubのリリースページから実行するアーキテクチャーに合わせたファイルのURLを確認してください。GCEのVMインスタンスはx86_64アーキテクチャーのため、バージョン名の後ろがlinux_amd64のファイルのURLをコピーします。
$ wget
$ tar xvf soratun_1.0.0_linux_amd64.tar.gz
$ cd soratun_1.0.0_linux_amd64/
$ sudo cp soratun /usr/local/bin
これでsoratunが実行できるようになりました。続いて先ほど控えておいたSAMユーザーの認証キーを用いてArcのバーチャルSIMを生成します。
$ soratun --config arc.json bootstrap authkey
Not enough information to bootstrap. Launching wizard.
SORACOM API auth key ID (starts with "keyId-"): <認証キー IDをペースト>
SORACOM API auth key (starts with "secret-"): <認証認証キー シークレットをペースト>
Coverage to create a new virtual SIM:
Virtual subscriber SIM ID: XXXXXXXXXXXXXXXXXX
Created/updated configuration file: /home/<ユーザー名>/soratun_1.0.0_linux_amd64/arc.json
$
SORACOMユーザーコンソールのSIM一覧にバーチャルSIM(サブスクリプションがplanArc01のもの)が追加されているので、バーチャルSIMを選択して[操作] – [所属グループ変更]からVPGを設定したグループ(例:arc-for-backend)を選択します。
VPGへの接続設定を更新するために、再度soratunコマンドを実行します。
$ soratun --config arc.json bootstrap authkey
Virtual subscriber SIM ID: XXXXXXXXXXXXXXXXXX
Created/updated configuration file: /home/<ユーザー名>/soratun_1.0.0_linux_amd64/arc.json
$
これでArcで接続するための設定情報がarc.jsonファイルに書き出されました。今回はArc経由でIoT SIMからの接続を受け付けるために、エディタで一箇所設定を追加します。Arcから通知されるルーティング設定にはVPGのデバイスサブネットIPアドレスレンジが含まれないため、vimエディターなどでadditionalAllowedIPsに追加することでサーバーからIoT SIMへの戻りの通信がsoratunによるWireGuardインターフェースに向くようになります。
{
: (中略)
"additionalAllowedIPs": ["192.168.200.0/24"]
}
JSON形式なので、ファイル末尾の } の前の行に挿入することに注意します。
これでOKです。以下のコマンドを実行してArcに接続します。
$ sudo soratun --config arc.json up
(DEBUGメッセージがいっぱい出る)
この状態でArcに接続し、Gate経由でIoT SIMからの通信が着信できる状態です。
動作確認
では、クライアントであるデバイスから接続してみましょう。セルラー接続のルーティングにもVPGのデバイスサブネットIPアドレスレンジを追加しておきます
$ sudo route add -net 192.168.200.0/24 dev ppp0
ではcURLでアクセスしてみます。サーバーのIPアドレスはSORACOMユーザーコンソールのバーチャルSIM/Subscriberの詳細画面か、arc.jsonファイルのarcClientPeerIpAddressにあります。
$ curl http://192.168.200.41/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
$
ウェブサーバーのレスポンスが返ってきました!
動作確認後はサーバーホストの端末で
セキュリティー対策
クラウドやオンプレミスにはホストを保護するためのやファイヤーウォール機能、セキュリティーグループ機能やアプライアンス製品がありますが、SORACOM Arc経由のアクセスはWireGuard VPN通信によりそれらの対象外になります。LinuxのNetfilter(iptables)などホストのファイヤーウォール機能を設定してWireGuardインターフェースでの目的外の通信をフィルターし、サーバーのセキュリティー対策を十分検討しましょう。
次のステップ : 高可用性戦略
サーバーのハードウェア、ソフトウェア障害に備える、高可用性構成も考えたいところですね。クラウドや仮想化基盤であればなんらかの高可用性機能があるので、サービス継続の要件と機能の運用コストが見合う方法を考えるのが良さそうです。デバイスからはひとつのIPアドレス宛に通信するためロードバランサを組み込むのは難易度が高く、多少のダウンタイムを許容し1台のホストを維持する仕組みが多くのケースで妥当でしょう。Google Cloudであればマネージドインスタンスグループ機能があります。AWSならばEC2のAuto Scaling、オンプレミス環境だとVMware vSphere HAが候補になりそうです。
構成図にするとこんな感じです。
自動スケーリングをスケールアウトのみにしつつ、インスタンス数1で構成すると良いでしょう。
頑張るならマルチノードでノード間でクラスタを組む構成が考えられます。ただし、VRRPのような仮想IPアドレスの仕組みはないため、主系から副系へのフェイルオーバーはDNSなどIP以外の仕組みを検討することになるでしょう。この辺りはまた別の機会で構成例を紹介したいと思っています。
また、一般的な高可用性機能はVMインスタンスを作成、起動するだけなので、soratunの接続が起動時に自動で行なわれるようにsystemdを構成するのが良いでしょう。以下のドキュメントが参考になります。
soratunの使用方法:インストールする | SORACOM Arc | SORACOM Users
SORACOM ユーザー向けサイト
systemdの設定例ではarc.jsonが/etcにあるのが前提なので、VMインスタンスのテンプレートを作る前に移動しておきましょう。
$ sudo mv arc.json /etc
まとめ
IoTバックエンドをクラウドやオンプレミスのサーバーからSORACOM Arcで繋いで使う構成をご紹介しました。ユーザーサイトにArcのユースケースをまとめたドキュメントを追加したので、こちらも参考になれば嬉しいです。
ユースケースと構成例: 通信回線の冗長化やオフロードによるデータ通信量の削減 | SORACOM Arc | SORACOM Users
SORACOM ユーザー向けサイト
SORACOM Arcの使い道はまだまだ広がると思うので、皆さんも思いついたものがあればSNSやブログで教えてください!
この連載の記事
-
第474回
デジタル
SORACOM Flux の AI アクションに Amazon Bedrock – Anthropic Claude 3.5 Haiku を追加、Teltonika RUT240 の価格を改訂 takuyaのほぼ週刊ソラコム 11/02-11/15 -
第473回
デジタル
IoTセキュリティの基本知識と実践をご紹介 ― 10/31開催:SORACOMユーザー向けオンラインセミナー開催レポート -
第472回
デジタル
SORACOM Flux に追加された Incoming Webhook をつかってインタラクティブな Flux アプリを作る -
第471回
デジタル
サーバールームの異常な温度上昇を通知する新規掲載レシピのご紹介 -
第470回
デジタル
Virtual Private Gateway (VPG) Type-F2 が正式リリースになりました! -
第469回
デジタル
暗号化非対応のTCPクライアントでもNapterまでの通信を暗号化する方法 -
第468回
デジタル
SORACOM Beam や SORACOM Flux の開発・デバッグに使える HTTP モックサーバーを素早く作る方法 -
第467回
デジタル
IoTプラットフォームSORACOMの契約回線数が700万を突破、次世代SIMテクノロジー「iSIM」を商用化、搭載モジュールを提供開始 takuyaのほぼ週刊ソラコム 10/12-11/02 -
第466回
デジタル
カメラとAIで楽器演奏シーンを簡単に残す、IoTプロトタイピングの裏側 -
第465回
デジタル
数千を超えるIoT機器を管理!生成AIで設備運用を効率化するhacomonoの挑戦
この記事の編集者は以下の記事もオススメしています
-
デジタル
特定のSIMに対してSORACOM プラットフォームからpingの送信ができる「デバイス ping」の提供を開始 -
デジタル
IoTデータの可視化サービス「SORACOM Lagoon」、アップデート提供を開始 -
デジタル
Wi-Fiや有線回線からもソラコムを。セキュアリンクサービス“SORACOM Arc”の提供を開始します -
デジタル
IoT 向けデータ通信サービス “SORACOM Air” の新プラン 「plan-D D-300MB」、本日より提供開始! -
デジタル
ソラコム、新サービス「SORACOM Arc」活用のブログを募集。8月31日まで -
デジタル
2021年の「#ソラコム色」キャンペーン、大賞の発表! -
デジタル
IoT活用のオンライン勉強会「SORACOM IoT Meetup」開催レポート ~ IoTのデータ活用とIoTサーバーレスアーキテクチャーの資料公開 -
デジタル
【開催レポート】スマート保育園を実現するユニファと、IoTプラットフォームのソラコムが語る「テクノロジー×ビジネスの融合」 -
デジタル
IoTデバイスの電波状況をSORACOMに保管し、SORACOM ユーザーコンソールで一覧する方法 -
デジタル
Wi-Fiや有線からもSORACOMのサービスを利用できるSORACOM Arcのブログコンテスト開始!&SORACOM Meetup開催レポート【7月27日(火)】