第16回 SORACOM公式ブログ

SORACOM Arcによるプライベート接続で、クラウドやオンプレミスのサーバーとIoTデバイスをD2D(Device to Device)で接続する

大瀧(takipone)/ソラコム

  • この記事をはてなブックマークに追加
  • 本文印刷

 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 CanalDoorDirectがあり、そのうち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 BeamFunnelFunkといったアプリケーション連携サービスからAWS IoT CoreAzure Event HubsGoogle 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を利用します。

Getting Started: soratun で SORACOM API の認証キーを使用してバーチャル SIM/Subscriber をブートストラップする | SORACOM Arc | SORACOM Users
SORACOM ユーザー向けサイト

 まずは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>
$

 ウェブサーバーのレスポンスが返ってきました!

 動作確認後はサーバーホストの端末で+キーを押しsoratunを終了します。

セキュリティー対策

 クラウドやオンプレミスにはホストを保護するためのやファイヤーウォール機能、セキュリティーグループ機能やアプライアンス製品がありますが、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やブログで教えてください!

この連載の記事

過去記事アーカイブ

2024年
01月
02月
03月
2023年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2022年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2021年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月