MENU

Soracom

Users

クラウドからデバイスへアクセスする

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

デバイス間通信機能だけを有効化する手順は SORACOM Gate Document: SORACOM Gate によるデバイス間通信 (SORACOM Gate D2D) をご覧ください。

システム概要

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

  • 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 を追加」ボタンをクリックします。

VPG登録ボタン

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

  • トンネル接続用 IP アドレス: Gate Peer となる EC2 インスタンスのプライベート IP アドレスを指定してください。この項目は入力必須です。
  • デバイスサブネット内 IP アドレス:この項目の入力は任意です。Gate Peer が仮想的な L2 ネットワーク内で使用する IP アドレスを指定できます。空欄にしておくと自動割当となります。

VPG登録ダイアログ

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 を指定し全ての通信を許可するよう設定

VPGのCIDR確認画面

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

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

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

VPGの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 接続し、以下の手順で設定用のスクリプトを実行します。

  • 本ステップは Amazon Linux 2 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 アドレスレンジのネットマスク} {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 アドレス

EC2 インスタンスと接続する VPG が複数ある場合は、以下についてご対応・ご留意いただく必要があります。

  • gate_init_vxlan.sh を VPG の数分実行してください。
  • gate_init_vxlan.sh の実行前に、既存の VXLAN 設定を削除する処理 rmmod vxlan をコメントアウトしてください。
  • 各 VPG で「VXLAN に割り当てる ネットワークインタフェース名」「VXLAN ID」「デバイスに割り当てるプライベート IP アドレスレンジ」が重複しないようにしてください。「VXLAN ID」はユーザーコンソールの VPG 設定画面>「高度な設定」の、「Gate を有効にする」から設定できます。また、「デバイスに割り当てるプライベート IP アドレスレンジ」は VPG 作成時に指定できます。
  • SORACOM Door をご利用でルータサーバを Gate Peer として動作させる場合は設定スクリプトとして代わりに door_gate_init_vxlan.sh を使用してください。
  • door_gate_init_vxlan.sh の実行には gate_init_vxlan.sh, check_bgp_neighbor_state.py も必要となります。以下のようにダウンロードし実行権限をつけてください。
$ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/gate-peer-tools/door_gate_init_vxlan.sh
$ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/gate-peer-tools/gate_init_vxlan.sh
$ wget https://soracom-files.s3-ap-northeast-1.amazonaws.com/gate-peer-tools/check_bgp_neighbor_state.py
$ chmod +x door_gate_init_vxlan.sh gate_init_vxlan.sh check_bgp_neighbor_state.py
  • door_gate_init_vxlan.sh に引数を付けて root 権限で実行してください。引数は gate_init_vxlan.sh と同様です。

なお、コマンド実行の際に以下のようなメッセージが出力されることがありますが、そのまま次のステップに進んで問題ありません。このメッセージは 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) を抑制できます。

Gate有効化

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 を使ってデバイスをネットワークに接続します。

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

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

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

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

  • Gate の利用料金は、VPG セットアップ料金、基本料金で構成されます。詳しくは 課金体系のページ をご覧ください。
  • VPG セットアップ料金は VPG 作成のタイミングごとに課金されます。
  • VPG 基本料金は起動時間に応じて課金されます。VPG 起動後は課金を一時的に停止することはできません。課金を止めたい場合には、VPG 自体と、関連するネットワーク接続 (VPC ピア接続、VPN、専用線接続など)を削除してください。

VPG を削除する

VPG を削除する場合、まずは VPC ピア接続の削除とグループの解除が必要です。VPG 設定画面の「基本設定」タブから VPC ピア接続の削除とグループの解除を実行します。

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

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

VPG削除

Gate Peer を削除する

Gate Peer として利用した EC2 インスタンスは AWS マネジメントコンソール、または API から削除します。詳しくは Amazon EC2 ユーザーガイド を参照してください。