Cradlepoint(旧Pertino) GatewayでSORACOM Gateにリモートアクセスする
ども、大瀧です。
先日のSORACOM Conference "Discovery" 2016で発表された新サービスSORACOM Gate、みなさん早速試してみましたか?
Gateを使うとAmazon VPC上のEC2インスタンスからSIMを差したIoTゲートウェイに接続できるようになるわけですが、実際にメンテナンスをする端末からAmazon VPCへのアクセスもセキュアしたいこともあるかなと思い、今回はVPN/SD-WANサービスのCradlepoint(旧Pertino)と組み合わせたリモートアクセス構成をご紹介します。
概要
Cradlepointは、クライアントをインストールしたマシン同士で仮想ネットワークを構築するサービスです。今回はGateピアとなるインスタンスにCradlepointクライアントをインストールして仮想ネットワークの終端とし、VPC-IoTゲートウェイ間はSORACOM Gate/Canalの閉域接続を利用します。
IoTゲートウェイにCradlepointクライアントをインストールする代わりにGateピアでCradlepoint Gatewayを設定し、IoTゲートウェイにトラフィックを転送する形にしてみました。そうすることで、IoTゲートウェイにはCradlepointクライアントをインストールすることなく、特別な構成なしでリモートアクセスの環境を導入することができます。
SORACOM Gateの構成
Gateの構成は、こちらのエントリーと特に変わりません。SORACOM CanalとGateピアとしてのAmazon Linuxインスタンスを構成します。VXLANトンネルのインターフェス名はvxlan0
としています。
$ ifconfig vxlan0 vxlan0 Link encap:Ethernet HWaddr 8A:ED:0F:61:87:4A inet addr:10.225.194.171 Bcast:10.255.255.255 Mask:255.128.0.0 inet6 addr: fe80::88ed:fff:fe61:874a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:8951 Metric:1 RX packets:244 errors:0 dropped:0 overruns:0 frame:0 TX packets:382 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:31289 (30.5 KiB) TX bytes:35411 (34.5 KiB) $
VXLANのインターフェースにSORACOMデフォルトのCIDR、10.128.0.0/9
のアドレスが割り当てられているのがわかりますね。
Cradlepointの構成
GateピアのインスタンスにCradlepointクライアントをインストールします。今回はAmazon Linuxなので、ダウンロードページの「Linux Installation guide」→「Using yum」の手順に沿ってインストールしました。Cradlepointのトンネルインターフェース名はpertino0
で、CIDRは172.86.160.0/20
でした。
$ ifconfig pertino0 pertino0 Link encap:Ethernet HWaddr 8E:3F:00:3C:C5:35 inet addr:172.86.160.5 Bcast:172.86.175.255 Mask:255.255.240.0 inet6 addr: fe80::8c3f:ff:fe3c:c535/64 Scope:Link inet6 addr: 2001:470:813b::4891:0:2102/48 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1 RX packets:1006 errors:0 dropped:0 overruns:0 frame:0 TX packets:28 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:93356 (91.1 KiB) TX bytes:3952 (3.8 KiB) $
続いて、Cradlepoint Gatewayを有効にします。CradlepointのWebコンソールから[Devices] - [GATEWAY]を選択、先ほどクライアントをインストールしたインスタンスを選択し、[Enable Gateway]をクリックします。
External(Cradlepoint Gatewayの転送先)の登録画面になるので、任意の[Host Name]と(今回はbx1)、[External IPv4 Address]にSORACOM Air SIMに付与されたIPアドレスを入力し、[Save]をクリックします。
登録されたら、[IPv4 Address]をメモしておきます。PCからIoTゲートウェイに接続するときは、このIPアドレスを利用します(今回は172.86.160.6
)。
それからもう1点、SORACOMのデバイスネットワークはルーティングテーブルを編集する機能がないため、帰りのトラフィック向けのCradlepoint仮想ネットワーク宛てのルーティングエントリーが設定できません。そこで今回はCradlepoint→Gateに対してIPマスカレードを設定し、帰りのトラフィックをGatewayのVXLANトンネルのアドレスに向くように工夫しました。
$ sudo iptables -t nat -A POSTROUTING -s 172.86.160.0/20 -o vxlan0 -j MASQUERADE $ sudo service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] $
これでOKです。
動作確認
それでは、CradlepointクライアントをインストールしたPCからIoTゲートウェイに接続してみます。
$ ping 172.86.160.6 PING 172.86.160.6 (172.86.160.6): 56 data bytes 64 bytes from 172.86.160.6: icmp_seq=0 ttl=63 time=438.554 ms 64 bytes from 172.86.160.6: icmp_seq=1 ttl=63 time=146.970 ms 64 bytes from 172.86.160.6: icmp_seq=2 ttl=63 time=143.491 ms 64 bytes from 172.86.160.6: icmp_seq=3 ttl=63 time=143.880 ms 64 bytes from 172.86.160.6: icmp_seq=4 ttl=63 time=150.069 ms ^C --- 172.86.160.6 ping statistics --- 5 packets transmitted, 5 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 143.491/204.593/438.554/117.005 ms suzaku:~ ryuta$ ssh root@172.86.160.6 root@172.86.160.6's password: Linux obsiot.example.org 3.10.17-poky-edison #3 SMP PREEMPT Fri Sep 4 11:53:01 JST 2015 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Jul 17 01:08:09 2016 from 10.225.194.171 root@obsiot:~#
接続できました!
まとめ
CradlepointのVPNとSORACOM Gateを利用して、IoTゲートウェイにエージェントを入れることなくPCから接続する構成をご紹介しました。先日追加されたSORACOMリファレンスアーキテクチャのWebカメラ管理システムの実装例として見ていただいてもいいのではないかと思います。