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

まず、VXLANの設定を行うためのスクリプト (gate_init_vxlan.sh) をダウンロードし、実行権限を付けます。

$ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/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を指定しているため、そのまま次に進んでください。

ステップ 4: Gate を有効化する

ユーザコンソールまたは CLI を使って Gate を有効化します。有効化すると、Gate Peer と VPG での通信が可能となり、さらにデバイス間での通信も可能となります。

ユーザコンソールでの設定方法

VPG 設定画面>「高度な設定」の、「Gate を有効にする」を ON に設定し、保存します。

Gate有効化

CLI での設定方法

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

$ 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 には利用料金がかかります。不要であれば削除しておきましょう。

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}

パケット転送の有効化

Gate Peer以外のEC2インスタンスからデバイスに接続するために、iptablesを使ってパケット転送を有効化します。この設定がないと、Gate Peer以外のインスタンスからはデバイスに接続できません。

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING  -o vxlan0 -j MASQUERADE

参考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

サービス機能詳細

Developer Tools

pagetop