2016年10月18日

ブロードバンドタワー岩本です。
初投稿になりますのでまずは自己紹介させていただきます。
新卒でブロードバンドタワーに入社し2年目です。所属部署は、Cloud&SDN研究所に所属しており、主に新規クラウドサービスの開発・運用等を担当しています。
そして少し宣伝ですが、私が携わる開発システムをITpro2016のSORACOMと協賛ブースでデモシステムを展示します。宜しければ、ご来場頂けますと幸いです。
場所:東京ビックサイト 10月19日〜21日 「IoT Japan 2016」
http://www.bbtower.co.jp/bbtow_er-report/event/2016/1011_001164/

そこで、今回は上記で展示するIoT Japan2016のブースデモの説明させていただきます。

最近のトレンドキーワードとしてIoTという言葉が目立ちます。 多くのモノがインターネットへ接続し、あらゆる情報を得る事で色々な事に活かしていくような面白い動きです。 我々の部署でも当社のデータセンターとIoTデバイスを繋げる新しいサービスの開発を行っています。 今回の展示では、インフラ管理者の目線でのIoT利用例として、SORACOM SIMをネットワークデバイスの管理ネットワークに適用しました。管理ネットワークは、一般的にサービスネットワーク(ネットワークサービスを提供するためのネットワーク)と物理レイヤレベルで分離して構築する必要があります。 なぜならば、サービスネットワークにおいて障害が起きた際に、影響を受けないように設計する必要があるからです。 そのためインフラの管理者は、サービス用回線とは別に回線を引き込み、管理ネットワークとして用いる事が非常に多いです。 しかし、新規の回線の引き込みは利用可能となるのに約2~4週間程の時間を費やすのが実情です。 そこでIoTデバイスを管理ネットワークのゲートウェイとして用いる事にすれば、安価かつ飛躍的にデプロイ時間を飛躍的に短縮して管理ネットワークを構築できると考えまして、管理ネットワークに用いる事を実践しました。 また、単純にインターネットを介して接続するだけでなく閉域網でパブリッククラウドへの接続を行いました。

SORACOMでセキュリティ問題を解決

インターネット経由での管理ネットワークでは、セキュリティホールを生み出してしまうと疎通性のある機器全てに影響が出る可能性が高いです。 そのため高価なセキュリティアプライアンス等を用い、非常に厳密なセキュリティポリシーを決める必要があります。 こういった部分でも非常にコストが高いといえます。 よって閉域網から接続することでこのような問題は解決できます。 SORACOMには専用線で接続する「SORACOM Direct」というサービスや、AWSのVPCとプライベート接続する「SORACOM Canal」というサービスがあります。 これらを用いればSORACOM SIMからAWSのインスタンスまでの通信をAWSの仕組みの中だけで収めることができます。 これによりインターネット経由の通信がなくなり、セキュリティのリスクが大幅に軽減されます。

SORACOMを閉域網でマルチクラウドへ接続

SORACOMがAWSと簡単にプライベート接続できる理由は、 SORACOMがAWS内部にネットワークサービスを置いている事からです。
しかし、AWS以外のプライベートクラウドとの接続はどうでしょうか。 インターネット経由であれば接続できますが閉域網接続となると非常に難しいといえます。 そこで当社の「dc.connect」サービスを用いてネットワークを繋ぐ事で解決できます。 dc.connectは、当社データセンターとプライベートクラウド間を専用線接続したシステムを提供するサービスです。 これを用いれば、当社データセンターを介してAWSのDirect ConnectとAzureのExpress route等あらゆるプライベートクラウドサービスに接続することができます。 そこで今回は、一つの例としてSORACOMをAzureへ接続を試みました。

image1

接続試験

今回は、SORACOM SIMをぷらっとホーム株式会社が販売しているOpenBlocks IoT EX1(以下EX1)を用いて上述した接続を行いました。 OpenBlocks IoT EX1は、RaspberyPiと比較すると高価なデバイスですが、インターフェースが充実しており非常に汎用性が高いIoT機器です。

第一工程:IoTデバイスをSIM経由で通信する

openblocks
図2:EX1開封写真

まずは、SIMを手に入れSORACOM Consoleで設定を行ってください。 そしてEX1にSIMカードを差し込みます。 EX1は、2点ネジ止めされておりネジを外して中を開けないとSIMが刺せません。

ログインを終えたらping等のコマンドでインターネットに接続する事が出来れば問題ありません。

第二工程:Canalを用いてIoTデバイスとAWSへの接続

試行1:単純なCanal接続

AWS上でIoTデバイスと通信するためのVPCとEC2インスタンスを作成します。そして作ったVPCに属するEC2インスタンスを作成します。 その後SORACOM ConsoleでVPGを作成します。Virtual Private Gatewayの略でありSORACOMのVPCと思っていただければ良いと思います。 SORACOM VPGとAWS VPC間でAWS VPC Peeringを用いたピア接続することにより、IoTデバイスからEC2インスタンスまで接続が可能になります。 大雑把にやらなければならない事として、

    • [AWS の設定] VPC、および EC2インスタンスを作成
    • [SORACOM の設定] VPG を作成し、VPCピア接続を設定
    • [AWS の設定] ピアリング接続を受諾し、ネットワークを設定
      image3
      図3 Canal接続

      これにより、IoTデバイスからEC2インスタンスのプライベートアドレスにPingを試みると、通信が成功します。 しかし反対にEC2インスタンスからIoTデバイスのPPP0のIPアドレスに対してPingを試みると通信は失敗します。 これは、SORACOM VPGとAWS VPCの間でアドレス変換 (NAT) の仕組みが入っており、IoTデバイスとは別なアドレス(100.64.150.241)からEC2インスタンスへ ICMP echo replyを送信されています。そのため実際には、EC2インスタンスからIoTデバイスへのIPの到達性がありません。

      image4
      図4:OpenBlocksからのPing
      image5
      図5:EC2インスタンスからのPing
      image6
      図6:EC2インスタンスのパケットダンプ

      試行2:SORACOM Gate

      SORACOMには、SORACOM Gateと呼ばれるサービスがあります。これは、VXLANを用いる事でSORACOM Airで接続されたSORACOMのGWとEC2インスタンス間を仮想的にL2接続を行うサービスです。 これによりIoTデバイスからEC2のインスタンスまで双方向の通信が可能になるため、今回私が構築したい内容に沿っていると考えたためGateを試してみました。

      image7
      図7:SORACOM ConsoleによるGateの設定

      Gateの設定は、SORACOM Consoleで有効化した後に、EC2上のインスタンスに対してVXLANの設定を行います。 なおインスタンスは、Amazon Linuxまたは、Ubuntuを利用することを推奨して書かれていたため今回は、Ubuntuを用いています。

      rmmod vxlan 
      modprobe vxlan udp_port=4789 
      ip link add vxlan0 type vxlan local 10.0.0.254 id 10 port 4789 4789 dev eth0 
      ifconfig vxlan0 10.251.109.37/9 up 
      bridge fdb append 00:00:00:00:00:00 dev vxlan0 dst 100.64.150.4 
      bridge fdb append 00:00:00:00:00:00 dev vxlan0 dst 100.64.150.132 
      echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o vxlan0 -j MASQUERADE

 

以上の設定でEC2インスタンスとIoTデバイスで双方向通信が可能になります。

image8
図8:SORACOM Gateのトラフィック挙動

次にオンプレミスサーバとAWS VPC内のインスタンスのIP到達性をもたせるためDirectConnectで接続をしまして、 同時にSORACOM側でもオンプレミスサーバへのIPの到達性を持たせる設定を行いますが、 SORACOM側のゲートウェイがSORACOMの管理下にあるため、私達では操作ができません。 そのためCanal接続のVPC以外のオンプレミスサーバのアドレスへの通信に関しては、SORACOM側のデフォルトルートへ流れてしまいます。

試行3:CanalとOpenVPN接続を用いた接続

openvpn
図9:OpenVPN接続

これまでの試行錯誤からAWSのCanalで接続したVPC以外からIoTデバイスへの接続は、Canalとそれに付随するSORACOMサービスのみで行うことが難しいです。 よって試行2のGateを使うことをやめ、EC2のインスタンスでOpenVPNサーバを作り、IoTデバイスからVPN接続を試みました。 結果EC2のインスタンスとIoTデバイス間でVPN接続することにより仮想的なL3接続することができました。またEC2のVPNインターフェースもコントロール配下にあるため経路制御することも可能になりました。これにより当社データセンターまでIPによる双方向からの通信を確認できました。

第三工程:GREによるEC2インスタンスと当社の接続

次にAWSから見てオンプレミスから先にあるAzureの経路をルータとして動いているEC2インスタンスに伝えます。 そのためには、EC2インスタンスと当社を接続する際はVPN接続する必要があります。 なぜなら、AWSもSORACOMと同様に私達の管理配下に無いゲートウェイがあるためです。 よって当社データセンター内にハードウェアルータを用いてVPNによる接続を行いました。

 

第四工程:Azureへの接続

Azureへの接続は、Azure Express Routeサービスを用いて接続を行いました。 Express Routeを用いる事によりピア接続でAzureと接続することができます。 その際にBGPによる経路制御でEC2インスタンスへの経路とAzureまでの経路の追加を行う事でルーティング可能になります。 ここまででAzureからIoTデバイスまでの双方向通信が可能となり管理ネットワークができました。

第五工程:Azure上でウェブサーバの作成とWebUIの作成

image11
図10:デモ画面

IoTデバイスからAzureインスタンスまでの双方向接続ができましたので、今回はウェブブラウザからShellを制御することで管理対象のコンピュータ機器を制御するアプリケーションをAzure側に作成しました。 フロントエンドの画面自体は、Bootstrapを用いてUIを作成し、ターミナルの画面描画に関しては「Shellinabox」というアプリケーションを用いて、管理ネットワーク経由でIoTデバイスのコンソールへアクセスすることを可能にしています。

まとめ

SORACOMではIoTデバイスの使い方として、デバイスからサーバへデータを送る事が前提となっており、他のネットワークからIoTデバイスへアクセスするような双方向通信を実現するには、幾つかの工夫が必要です。 これまでお話してきたようにSORACOM SIMからCanal間にNAT(Network address translation)が存在しており、単純なL2接続ではありません。 そのためにSORACOM Gateというサービスが用意されており、EC2インスタンスとVPG間でVXLANを用いた接続を行いL2接続の提供できると記述されていますが 通信経路が行きと返りが異なってしまいます。 なおかつこのSORACOM側のゲートウェイは、ユーザの管理配下に無いためルーティング制御が難しいです。 我々の解決策として、EC2インスタンス上でOpenVPNを用いてIoTデバイスからVPN接続を行う事で双方向通信を可能にしました。 これによりTunnelインターフェースを制御することでルーティングが可能になりました。 この速度であればTelnet,SSHであれば動きます。

ブロードバンドタワーはSPSネットワークパートナー

SORACOMには、SORACOMパートナースペースと呼ばれるパートナープログラムがあります。当社は、SPSネットワークパートナーの認定を受けています。 そのため当社のデータセンターのお客様にSORACOM Directのサービスを提供することができます。

参考Webサイト

  • https://dev.soracom.io/jp/start/canal/
  • https://dev.soracom.io/jp/start/gate/
  • https://github.com/shellinabox/shellinabox
  •  

    本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
    品質保証を目的としたものではございません。