クラウドからデバイスへアクセスする
当ガイドでは、Canal と Gate を組み合わせ、Amazon Web Services(AWS) 上に構築したお客様の仮想プライベートクラウド環境(Amazon Virtual Private Cloud、以下、VPC)と、デバイスが双方向で通信できる環境を構築する手順を紹介します。
当ガイドの前提は以下のとおりです。
- SORACOM のアカウントを作成済みであること
- SORACOM CLI のセットアップが完了しており、使える状態になっていること
- SORACOM Air の SIM (IoT SIM)、および使用できるデバイスが準備されていること
- AWS のアカウントを作成済みであること
当ガイドではお客様の VPC 内に EC2 インスタンスを作成し、そのインスタンスを Gate Peer として構成しますが、Gate Peer となるサーバは EC2 以外も利用可能です。例えば、ステップ 1 で Canal の代わりに SORACOM Direct, Door を使えば、オンプレミスのサーバやネットワーク機器も Gate Peer として使うことができます。
ステップ 1: SORACOM Canal の環境を構築する
こちらのステップについては、 Getting Started: SORACOM Canal を使用して閉域網で接続する (VPC ピアリング) に掲載されている手順に沿って構築してください。最終的に VPC と EC2 インスタンスの構築が完了し、IoT SIM を搭載したデバイスからお客様の VPC 上にある EC2 インスタンスにプライベート IP アドレスで接続可能であることを確認できたらステップ 1 は完了です。
ステップ 2: Gate Peer となる EC2 インスタンスを登録する
VPG 設定画面>「高度な設定」で、「お客様の Gate Peer 一覧」にある「Gate Peer を追加」ボタンをクリックします。
ダイアログで Gate Peer の IP アドレスを登録します。
- トンネル接続用 IP アドレス: Gate Peer となる EC2 インスタンスのプライベート IP アドレスを指定してください。この項目は入力必須です。
- デバイスサブネット内 IP アドレス:この項目の入力は任意です。Gate Peer が仮想的な L2 ネットワーク内で使用する IP アドレスを指定できます。空欄にしておくと自動割当となります。
registerGatePeer API を使って Gate Peer (お客様 VPC 内に配置された、デバイスへのゲートウェイとなる EC2 インスタンス)のプライベート IP アドレスを登録します。この設定を行った後、ステップ 3 で説明する VXLAN の設定を投入することで、Gate Peer を経由してデバイスへの通信ができるようになります。
$ soracom vpg register-gate-peer --outer-ip-address {gate_peer_private_ip} --vpg-id {vpg_id}
登録が完了すると、API のレスポンスとして Gate Peer の設定情報が返ってきます。outerIpAddress が VPC 上で Gate Peer に割り当てられた IP アドレス、innerIpAddress は VXLAN で使われる IP アドレスです。
{
"innerIpAddress": "{gate_peer_innerIpAddress}",
"netmask": null,
"outerIpAddress": "{gate_peer_outerIpAddress}",
"ownedByCustomer": true
}
ステップ 3: [AWS の設定] Gate Peer に VXLAN の設定を投入する
Gate Peer の登録が完了したら、続いて VXLAN の設定を行います。
AWS マネジメントコンソールでの設定
まず、AWS マネジメントコンソールにて、以下のポート/プロトコルで通信ができるよう Gate Peer の EC2 セキュリティグループの設定を行います。
- 22/tcp (SSH) …設定を行う PC から SSH 接続できるように設定
- 4789/udp (VXLAN)… Getting Started: SORACOM Canal を使用して閉域網で接続する (VPC ピアリング) で設定した VPC ピアリング接続の「説明」タブに記載されている「リクエスタ VPC CIDR」(下図参照) を指定して、VPG からの通信を許可するように設定
- ICMP (ping)…0.0.0.0/0 からの ping に応答するように設定
- 同一 VPC 内からデバイスへの通信に使用するプロトコル…例えば、デバイスへ http アクセスしたいなら 80/tcp を通す、全ての通信を許可するのであればアクセス元としてお客様の VPC CIDR を指定し全ての通信を許可するよう設定
次に、AWS マネジメントコンソールで Gate Peer の送信元/送信先チェックを外します。この設定は、Gate Peer 以外のサーバから Gate Peer を経由して通信するために必要な設定です。具体的な設定方法は Amazon VPC ユーザーガイド「送信元/送信先チェックを無効にする を参照してください。
SORACOM の API で Gate Peer の情報を確認
VPG 設定画面>「高度な設定」の、「VPG の Gate Peer 一覧」で必要な情報が確認できます。この後の手順で「トンネル接続用 IP アドレス」に記載されている IP アドレス (API レスポンスの outerIpAddress に該当する IP アドレス)を使います。
SORACOM の API を実行します。VXLAN の設定に必要となる VPG の詳細情報を listGatePeers API で確認します。
$ soracom vpg list-gate-peers --vpg-id {vpg_id}
API のレスポンスのうち、"ownedByCustomer": false
となっているエントリは、VPG の IP アドレスを指しています。 また、"ownedByCustomer": true
となっているエントリは、Gate Peer を指しています。
この後の手順で VPG の outerIpAddress(当ガイドの例だと 100.67.xxx.68, 100.67.xxx.84) が必要になりますのでメモしておきます。
[
{
"innerIpAddress": "xxx.xxx.x.68",
"netmask": "255.128.0.0",
"outerIpAddress": "100.67.xxx.68",
"ownedByCustomer": false
},
{
"innerIpAddress": "xxx.xxx.xxx.84",
"netmask": "255.128.0.0",
"outerIpAddress": "100.67.xxx.84",
"ownedByCustomer": false
},
{
"innerIpAddress": "{gate_peer_innerIpAddress}",
"netmask": "255.128.0.0",
"outerIpAddress": "{gate_peer_outerIpAddress}",
"ownedByCustomer": true
}
]
```
Gate Peer に SSH 接続し、VXLAN の設定を投入
続いて Gate Peer となる EC2 インスタンスに VXLAN の設定を投入します。Gate Peer に SSH 接続し、以下の手順で設定用のスクリプトを実行します。
まず、VXLAN の設定を行うためのスクリプト (gate_init_vxlan.sh
) をダウンロードし、実行権限を付けます。
$ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/gate-peer-tools/gate_init_vxlan.sh
$ chmod +x gate_init_vxlan.sh
続いて、設定スクリプト gate_init_vxlan.sh
に引数を付けて root 権限で実行します。それぞれの引数は Gate Peer や VPG に割り当てられた IP アドレスに読み替えてください。
$ sudo ./gate_init_vxlan.sh {Gate Peer のネットワークインタフェース名} {Gate Peer のトンネル接続用 IP アドレス} {VXLANに割り当てる ネットワークインタフェース名} {Gate Peer のデバイスサブネット内 IP アドレス} {デバイスサブネット IP アドレスレンジのネットマスク} {VXLAN ID} {VPG のトンネル接続用 IP アドレス1} {VPG のトンネル接続用 IP アドレス2}
- 第 1 引数: お客様の Gate Peer のネットワークインタフェース名
- 今回は eth0
- 第 2 引数: お客様の Gate Peer のトンネル接続用 IP アドレス
- ユーザーコンソールの「お客様の Gate Peer 一覧」に表示されているもの
- 第 3 引数: VXLAN に割り当てる ネットワークインタフェース名
- 今回は vxlan0
- 第 4 引数: お客様の Gate Peer のデバイスサブネット内 IP アドレス
- ユーザーコンソールの「お客様の Gate Peer 一覧」に表示されているもの
- 第 5 引数: デバイスサブネット IP アドレスレンジのサブネットマスク
- デフォルトでは /9 のため、今回は 9 を指定
- 第 6 引数: VXLAN ID
- デフォルトでは 10 のため、今回は 10 を指定
- 第 7 引数: VPG のトンネル接続用 IP アドレス 1
- ユーザーコンソールの「VPG の Gate Peer 一覧」に表示されているもの。当ガイドの例だと 100.67.xxx.68 の IP アドレス
- 第 8 引数: VPG のトンネル接続用 IP アドレス 2
- ユーザーコンソールの「VPG の Gate Peer 一覧」に表示されているもの。当ガイドの例だと 100.67.xxx.84 の IP アドレス
- 各 VPG で「VXLAN に割り当てる ネットワークインタフェース名」「VXLAN ID」「デバイスに割り当てるプライベート IP アドレスレンジ」が重複しないようにしてください。「VXLAN ID」はユーザーコンソールの VPG 設定画面>「高度な設定」の、「Gate を有効にする」から設定できます。また、「デバイスに割り当てるプライベート IP アドレスレンジ」は VPG 作成時に指定できます。
なお、コマンド実行の際に以下のようなメッセージが出力されることがありますが、そのまま次のステップに進んで問題ありません。このメッセージは vxlan の設定投入前など、カーネルモジュール(vxlan)の読み込みが行われていない場合に出力されるものです。
==出力例==
rmmod: ERROR: Module vxlan is not currently loaded
また、上記の他に以下のようなメッセージが出力されることもあります。こちらも問題ないメッセージですので、そのまま次のステップに進んでください。
==出力例==
vxlan: destination port not specified
Will use Linux kernel default (non-standard value)
Use 'dstport 4789' to get the IANA assigned value
Use 'dstport 0' to get default and quiet this message
上記はコマンド引数の指定形式に対するメッセージです。今回は port オプションを使って VXLAN の src/dst port を指定しているため、そのまま次に進んでください。
(オプション) NAT による Gate Peer 以外からのパケット転送の有効化
Gate Peer 以外の EC2 インスタンスからデバイスに接続するためには、Gate Peer を NAT インスタンスとして動作させるために iptables パケット転送を有効化する必要があります。 デバイスにアクセスするときに Gate Peer に ssh などでログインしてからさらにもう一度デバイスに ssh でログインする、いわゆる「踏み台サーバ」として Gate Peer を利用する場合はこのパケット転送の設定は必要ありません。
Gate Peer を NAT インスタンスとして利用する場合は Gate Peer となる EC2 インスタンスで以下を実行してください。
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
$ sudo iptables -t nat -A POSTROUTING -o vxlan0 -j MASQUERADE
上記 2 行目の iptables の設定は OS を再起動すると消えてしまいます。必要に応じてご利用の Linux ディストリビューションにあわせた iptables 設定の永続化を実行してください。
Amazon Linux AMI の例
$ sudo /etc/init.d/iptables save
次に、AWS マネジメントコンソールで VPC のルートテーブルで、デバイスサブネット IP アドレスレンジ宛のルートの Target として Gate Peer のインスタンスを指定します。具体的な設定方法は Amazon VPC ユーザーガイド「メインルートテーブルを更新する を参照してください。 その際には [Destination] ボックスの入力値として [0.0.0.0/0] ではなく、デバイスサブネット IP アドレスレンジを指定する必要があります。
ステップ 4: Gate を有効化する
ユーザーコンソールまたは CLI を使って Gate を有効化します。有効化すると、Gate Peer と VPG での通信が可能となり、さらにデバイス間での通信も可能となります。
VPG 設定画面>「高度な設定」の、「Gate を有効にする」を ON に設定し、保存します。 ここでは加えて、以下を設定できます。
- VXLAN Network Identifier : VXLAN ID を 1-16777215 の範囲で任意に指定できます。
- プライバシーセパレータ : この設定を ON にすると、Gate 有効時に IoT SIM を取り付けたデバイス間の通信 (Gate D2D) を抑制できます。
openGate API を実行して Gate を有効化します。この操作を行うと、お客様の VPC とデバイスが VXLAN で接続されて Gate Peer からデバイスへの直接アクセスやデバイス間での通信が可能となります。
$ soracom vpg open-gate --vpg-id {vpg_id}
有効化が完了すると、API レスポンスとして VPG やピア接続の詳細が返ってきます。
{
"allowedOperators": null,
"createdTime": 1593533599322,
"deviceSubnetCidrRange": "10.128.0.0/9",
"fixedIpAddressesEnabled": false,
"gateOpened": true,
"gateVxlanId": 10,
"junctionEnabled": false,
"lastModifiedTime": 1594052964835,
"operatorId": "OP9999999999",
"placement": {
"infrastructureProvider": "aws",
"region": "ap-northeast-1"
},
"primaryServiceName": "Canal",
"size": "small",
"status": "running",
"tags": {
"name": "Gate-Test01"
},
"type": 15,
"ueSubnetCidrRange": "10.128.0.0/9",
"useInternetGateway": true,
"virtualInterfaces": null,
"vpcPeeringConnections": {
"pcx-xxxxxx": {
"destinationCidrBlock": "10.0.0.0/16",
"id": "pcx-xxxxxx",
"peerOwnerId": "999999999999",
"peerRegion": "ap-northeast-1",
"peerVpcId": "vpc-xxxxxx"
}
},
"vpgId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
ステップ 5: Gate Peer からデバイスに接続できることを確認する
ここまでの設定が終わると、お客様の VPC とデバイスが Gate で接続された状態になっています。Gate Peer からデバイスに接続できることを確認しましょう。
まず、IoT SIM を使ってデバイスをネットワークに接続します。
- 参考:デバイスの接続例は Getting Started: 各種デバイスで SORACOM Air を使用する を参照してください。
IoT SIM でデバイスを接続できたら、Gate Peer からデバイスに ping や http でアクセスしてみましょう。
以下は Gate Peer でコマンドを実行し、USB ドングルでネットワーク接続した Raspberry pi に 対して ping と http でアクセスした例です。プライベート IP アドレスで疎通が取れています。
[ec2-user@Gate Peer]$ ping 10.219.96.63
PING 10.219.96.63 (10.219.96.63) 56(84) bytes of data.
64 bytes from 10.219.96.63: icmp_seq=1 ttl=64 time=816 ms
64 bytes from 10.219.96.63: icmp_seq=2 ttl=64 time=403 ms
64 bytes from 10.219.96.63: icmp_seq=3 ttl=64 time=423 ms
64 bytes from 10.219.96.63: icmp_seq=4 ttl=64 time=422 ms
[ec2-user@Gate Peer]$ curl http://10.219.96.63
Hello World!
以上で Gate のセットアップと動作確認は終了です。ステップ 1 で Canal を設定したことで、デバイスからお客様の VPC への通信が可能となり、ステップ 2 からステップ 5 で Gate を設定したことで、お客様の VPC からデバイスへの通信が可能となりました。
Gate の機能を使わない時には、ユーザーコンソールまたは closeGate API によって Gate を無効化できます。Gate を無効化すると、お客様のネットワークからデバイスへの通信、デバイス間の通信を停止できます。
ステップ 6: 使い終わったリソースを削除する
SORACOM VPG と Canal, Gate Peer で利用する AWS EC2 にはそれぞれ利用料金が発生します。不要であれば削除してください。
VPG を削除する
VPG を削除する場合、まずは VPC ピア接続の削除とグループの解除が必要です。VPG 設定画面の「基本設定」タブから VPC ピア接続の削除とグループの解除を実行します。
VPC ピア接続の削除とグループの解除が終わったら、続いて「高度な設定」タブの最下部にある「この VPG を削除」ボタンをクリックします。これで VPG が削除され、グループに対する Canal の設定も解除されます。
Gate Peer を削除する
Gate Peer として利用した EC2 インスタンスは AWS マネジメントコンソール、または API から削除します。詳しくは Amazon EC2 ユーザーガイド を参照してください。