SORACOM Developers

Gate Getting Started

SORACOM Gate を使用してデバイスにアクセスする

はじめに

SORACOM Gate(以下、Gate)はお客様のネットワークとデバイスを LAN 接続するサービスで、IoT デバイスへのセキュアな接続を実現します。SORACOM外のネットワークに、ゲートウェイとなるサーバ(以下、Gate Peer)を作成し SORACOM Virtual Private Gateway (以下、VPG) と仮想的な L2 ネットワークを構築することで、お客様の VPC からデバイスへのセキュアな接続とデバイス間での通信が可能となります。

Gate の特徴

Gate には IoT デバイスの活用に役立つ2つの特徴があります。

お客様VPCからデバイスへの直接アクセス機能

SORACOM 外のネットワークと Gate を有効化した VPG との間で、トンネルを張ることによって仮想的な L2 ネットワークを構成できます。トンネリングされた SORACOM 外のネットワークと、VPG 配下のデバイスのネットワークが接続され、SORACOM 外のネットワークからVPGを経由してデバイスにプライベート IP アドレスでアクセスできるようになります。なお、現時点ではトンネリング技術として VXLAN を採用しています。

デバイス間通信機能

Gate を有効化すると、VPG と IoT デバイスが同じ仮想的なサブネット (Virtual Subnet) に配置されます。すなわち Gate が有効化されているグループに所属するデバイスであれば、グループ内のデバイス同士で通信することも可能です。

Getting Started

当ガイドでは、Canal と Gate を組み合わせ、Amazon Web Services(AWS) 上に構築したお客様の仮想プライベートクラウド環境(Amazon Virtual Private Cloud、以下、VPC)と、デバイスが双方向で通信できる環境を構築する手順を紹介します。

セットアップから接続確認までは6つのステップに分かれています。

システム概要

当ガイドの前提は以下のとおりです。

当ガイドではお客様の VPC 内に EC2 インスタンスを作成し、そのインスタンスを Gate Peer として構成しますが、Gate Peer となるサーバは EC2 以外も利用可能です。例えば、ステップ 1で Canal の代わりに SORACOM Direct, Door を使えば、オンプレミスのサーバやネットワーク機器も Gate Peer として使うことができます。

ステップ 1: SORACOM Canal の環境を構築する

こちらのステップについては、 Getting Started : SORACOM Canal を使用して閉域網で接続するに掲載されている手順に沿って構築してください。最終的に VPC と EC2 インスタンスの構築が完了し、Air SIM を搭載したデバイスからお客様の VPC 上にある EC2 インスタンスにプライベート IP アドレスで接続可能であることを確認できたらステップ 1 は完了です。

ステップ 2: Gate Peer となる EC2 インスタンスを登録する

ユーザコンソールでの登録方法

VPG 設定画面>「高度な設定」で、「お客様の Gate Peer 一覧」にある「Gate Peer を追加」ボタンをクリックします。

VPG登録ボタン

ダイアログで Gate Peer の IP アドレスを登録します。

VPG登録ダイアログ

CLI での登録方法

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アドレスです。

{
  "outerIpAddress": "{gate_peer_outerIpAddress}",
  "ownedByCustomer": true,
  "innerIpAddress": "{gate_peer_innerIpAddress}"
}

ステップ 3: [AWS の設定] Gate Peer に VXLAN の設定を投入する

Gate Peer の登録が完了したら、続いて VXLAN の設定を行います。

AWS マネジメントコンソールでの設定

まず、AWS マネジメントコンソールにて、以下のポート/プロトコルで通信ができるよう Gate Peer の EC2 セキュリティグループの設定を行います。

次に、AWS マネジメントコンソールで Gate Peer の送信元/送信先チェックを外します。この設定は、Gate Peer 以外のサーバから Gate Peer を経由して通信するために必要な設定です。具体的な設定方法は Amazon VPC ユーザーガイド「送信元/送信先チェックを無効にする」 を参照してください。

SORACOM の API で Gate Peer の情報を確認

ユーザーコンソール の確認方法

VPG 設定画面>「高度な設定」の、「VPG の Gate Peer 一覧」で必要な情報が確認できます。この後の手順で「トンネル接続用 IP アドレス」に記載されている IP アドレス(API レスポンスの outerIpAddress に該当するIPアドレス)を使います。

VPGのIP確認画面

CLI での確認方法

続いて、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.64.xxx.4, 100.64.xxx.132) が必要になりますのでメモしておきます。

[
  {
    "outerIpAddress": "100.64.xxx.4",
    "ownedByCustomer": false,
    "innerIpAddress": "10.192.xxx.4"
  },
  {
    "outerIpAddress": "100.64.xxx.132",
    "ownedByCustomer": false,
    "innerIpAddress": "10.192.xxx.132"
  },
  {
    "outerIpAddress": "{gate_peer_outerIpAddress}",
    "ownedByCustomer": true,
    "innerIpAddress": "{gate_peer_innerIpAddress}"
  }
]

Gate Peer に SSH 接続し、VXLAN の設定を投入

続いて Gate Peer となる EC2 インスタンスに VXLAN の設定を投入します。Gate Peer に SSH 接続し、以下の手順で設定用のスクリプトを実行します。

注意
  • 本ステップは Amazon Linux AMI または Ubuntu を Gate Peer として利用する想定で書かれています。他の OS では設定方法が異なる場合があります。
  • 本ステップでのルーティング設定、パケットの転送設定は Gate Peer を再起動すると設定が削除されます。Gate Peer を永続的に利用する場合には、設定スクリプトを作成するなどして、再起動時に自動的に設定が行われるようにしてください。

まず、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 アドレスレンジのネットマスク} {VPG のトンネル接続用 IP アドレス1} {VPG のトンネル接続用 IP アドレス2}

注意

なお、コマンド実行の際に以下のようなメッセージが出力されることがありますが、そのまま次のステップに進んで問題ありません。このメッセージは vxlan の設定投入前など、カーネルモジュール(vxlan)の読み込みが行われていない場合に出力されるものです。

# rmmod vxlan

==出力例==
rmmod: ERROR: Module vxlan is not currently loaded

また、上記の他に以下のようなメッセージが出力されることもあります。こちらも問題ないメッセージですので、そのまま次のステップに進んでください。

# ip link add vxlan0 type vxlan local {gate_peer_outerIpAddress} id 10 port 4789 4789 dev eth0 

==出力例==
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"e
$ 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 に設定し、保存します。

Gate有効化

CLI での設定方法

openGate API を実行して Gate を有効化します。この操作を行うと、お客様の VPC とデバイスが VXLAN で接続されて Gate Peer からデバイスへの直接アクセスやデバイス間での通信が可能となります。

$ soracom vpg open-gate --vpg-id {vpg_id}

有効化が完了すると、API レスポンスとして VPG やピア接続の詳細が返ってきます。

{
  "operatorId": "OP999999999999",
  "vpgId": "{00000000-0000-0000-0000-000000000000",
  "type": 12,
  "status": "running",
  "useInternetGateway": true,
  "tags": {
    "name": "gate-getting-started"
  },
  "createdTime": 1467007824685,
  "lastModifiedTime": 1467012076035,
  "primaryServiceName": "Canal",
  "vpcPeeringConnections": {
    "pcx-00000000": {
      "id": "pcx-99999999",
      "peerOwnerId": "000000000000",
      "peerVpcId": "vpc-99999999",
      "destinationCidrBlock": "{customer_vpc_cidr}"
    }
  },
  "virtualInterfaces": null,
  "gateOpened": true
}


ステップ 5: Gate Peer からデバイスに接続できることを確認する

ここまでの設定が終わると、お客様の VPC とデバイスが Gate で接続された状態になっています。Gate Peer からデバイスに接続できることを確認しましょう。

まず、Air SIM を使ってデバイスをネットワークに接続します。

Air 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 を無効化すると、お客様のネットワークからデバイスへの通信、デバイス間の通信を停止できます。

注意
Gate の有効化・無効化を切り替える際には数秒間の通信断が発生します。


ステップ 6: 使い終わったリソースを削除する

SORACOM VPG と Canal, Gate Peer で利用する AWS EC2 にはそれぞれ利用料金が発生します。不要であれば削除してください。

注意
  • Gate の利用料金は、VPG セットアップ料金、基本料金、SORACOM Air VPG 利用オプション料金で構成されます。詳しくは 課金体系のページ をご覧ください。
  • VPG セットアップ料金は VPG 作成のタイミングごとに課金されます。
  • VPG 基本料金は起動時間に応じて課金されます。VPG 起動後は課金を一時的に停止することはできません。課金を止めたい場合には、VPG 自体と、関連するネットワーク接続(VPCピア接続、VPN,専用線接続など)を削除してください。
  • VPG が割り当てられた Air SIM グループにSIMが登録されていると、SORACOM Air VPG 利用オプション料金が発生します。SIMカードがオフラインの場合や、Gate が無効化されていた場合でも料金が発生しますのでご注意ください。
  • VPG を削除する

    VPG を削除する場合、まずは VPC ピア接続の削除とグループの解除が必要です。ユーザコンソールの「閉域網接続」メニューの「基本設定」タブから VPG を選択し VPC ピア接続とグループの解除を実行します。

    ピア接続削除とグループの解除

    VPC ピア接続とグループの解除が終わったら、続いて「高度な設定」タブで「この VPG を削除」ボタンをクリックします。これで VPG が削除され、グループに対する Canal の設定も解除されます。

    VPG削除

    Gate Peer を削除する

    Gate Peer として利用した EC2 インスタンスはAWSマネジメントコンソール、または API から削除します。詳しくはAmazon EC2 ユーザーガイドを参照してください。 Getting Started : SORACOM Canal を使用して閉域網で接続するに掲載されている Cloud Formation テンプレートを使ってインスタンスを起動した場合には、Cloud Formation スタックの削除を行ってください。削除手順はAWS CloudFormation ユーザーガイドをご覧ください。


    参考1: トンネリング技術とオーバレイネットワークの概要

    Gate で使用している仮想的な L2 ネットワークは、トンネリング技術と、その上で構築されるオーバレイネットワークによって実現されています。これらの技術の背景を把握しておくと Gate の特徴がよく理解できますので、ここで簡単に技術解説をします。

    「トンネリング」とは、あるネットワークの上に、仮想的に別のネットワークを構築することを意味しています。このとき仮想的に構築されたネットワークは、もともとのネットワークの上に重なる(overlay)ように構成されるため、「オーバレイネットワーク」と呼ばれます。トンネリングを使ったオーバレイネットワークの実現方法にはいろいろな種類がありますが、Gate では VXLAN が使われています。

    トンネリングを使った通信では、本来別々のネットワークにある機器同士で通信を行うために、トンネルの両端にあるエンドポイントでパケットのカプセル化が行われます。具体的には、VXLAN 上で使われるIPアドレス(Inner IP Address)を宛先に持ったパケットを、エンドポイントの IP アドレス(Outer IP Address)を宛先に持つパケットでカプセル化することとなります。これによって、デバイスとお客様のサーバは L3 で分断されているにも関わらず、VXLAN によってデバイスとお客様のサーバは L2 で同じネットワークに接続されているのと同じように通信ができるようになります。

    トンネリング技術

    参考2: Gate Peer での VXLAN 設定の概要

    このセクションでは、「ステップ 3: [AWS の設定] Gate Peer に VXLAN の設定を投入する」で利用した gate_init_vxlan.sh の内容を解説します。

    以下の項目は VPG や Gate Peer の IP アドレスに読み替えてください。

    カーネルモジュールの読み込み

    VXLAN を使用するにはカーネルモジュールの読み込みが必要です。rmmodコマンドで一旦モジュールを外して古い設定を削除し、modprobeコマンドでVXLANで使用するUDPポート番号を指定しています。

    # rmmod vxlan
    # modprobe vxlan udp_port=4789
    

    VXLAN のインタフェースの設定

    VXLANで使用するインタフェースを登録します。

    # ip link add vxlan0 type vxlan local {gate_peer_outerIpAddress} id 10 port 4789 4789 dev eth0
    # ifconfig vxlan0 {gate_peer_innerIpAddress}/{netmask} up
    

    パケット転送の設定

    以下のコマンドは、パケットの転送設定を行うためのものです。この設定を行うことで、Gate Peerからデバイスへの通信が正しくルーティングされるようになります。

    # bridge fdb append 00:00:00:00:00:00 dev vxlan0 dst {vpg_outerIpAddress1}
    # bridge fdb append 00:00:00:00:00:00 dev vxlan0 dst {vpg_outerIpAddress2}
    


    参考3: トラブルシューティングガイド

    デバイスとうまく通信できないときは、次の4つの項目を確認ください。

    以下に具体的な確認方法をまとめました。チェックポイント1から順に確認してみてください。

    チェックポイント1: VPGとGate Peerの疎通を確認

    Gate Peerとデバイスが通信するためには、まずGate PeerとVPGで疎通が取れていることが必要です。(a),(b)の手順で疎通をチェックしてください。

    チェックポイント2: Gate Peer の VXLAN 設定を確認

    当ガイドのステップ3で実行した VXLAN 設定コマンドに誤りがないか確認してください。IP アドレスの入れ違い、タイプミス等があると、正しく設定ができず通信できないことがあります。

    また、Gate Peer で 4789/udp (VXLAN) の通信が許可されているか合わせて確認してください。Gate Peer の EC2 セキュリティグループや Gate Peer 内部のファイアウォールで、4789/udp が拒否されていると正しく通信できません。

    チェックポイント3: デバイス側のセッションを再作成

    Gate Peer と VPG の疎通に問題ないようであれば、デバイス側でセッション切断・再接続をお試しください。Air SIM グループの VPG 設定を変更したときには、セッションを作り直さないと設定が反映されません。

    セッションを再作成する方法には、以下があります。

    上記すべてを試しても通信できないようであれば、以下の情報をお書き添えの上サポートチケットでお問い合わせください。

    上記と合わせて、事前にお客様の Gate Peer で以下のコマンドを実行した結果をチケットに添付してお送りいただけると、調査がスムーズに進みますのでご協力お願いいたします。

    $ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/get_gate_peer_info.sh
    $ chmod +x ./get_gate_peer_info.sh
    $ sudo ./get_gate_peer_info.sh {VPG トンネル接続用 IP アドレス1} {VPG デバイスサブネット内 IP アドレス1} {VPG トンネル接続用 IP アドレス2} {VPG デバイスサブネット内 IP アドレス2} {デバイスの IP アドレス}
    

    Getting Started

    SORACOM Air for セルラー

    SORACOM Air for LoRaWAN

    SORACOM Air for Sigfox

    SORACOM Beam

    SORACOM Canal/Direct/Door

    SORACOM Endorse

    SORACOM Funnel

    SORACOM Gate

    SORACOM Harvest

    SORACOM Inventory

    SORACOM Junction

    SORACOM Krypton

    SORACOM Lagoon

    Gadgets

    サービス機能詳細

    Developer Tools

    pagetop