第341回 SORACOM公式ブログ

ソラコム公式ブログ

ルーター配下のIoTデバイスとクラウドとでNATなし双方向通信を実現する方法

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「ルーター配下の IoT デバイスとクラウドとで NAT なし双方向通信を実現する方法」を再編集したものです。

こんにちは、Customer Reliability Engineer(CRE)の三國です。

このブログでは SORACOM Discovery 2023で発表された 「SIMベースルーティング機能」を使ってどのようなネットワーク構成ができるようになったのか、手順を踏まえて紹介します。

ネットワーク構成

今回ご紹介する構成は以下のとおりです。

  • IoT SIM:SORACOM Air for セルラー plan-D D300MB
  • IoT Device(IoT デバイス):Rapsberry Pi
  • Router(ルーター):RUT240
  • 接続先の Cloud network:Amazon VPC
  • Gate Peerおよび Server(サーバー):Amazon Elastic Compute Cloud(EC2)

ポイントは大きく3つあります。

  1. ルーター配下のIoTデバイスとサーバーとで双方向通信ができる
  2. IoTデバイスやサーバーが増えても多対多の双方向通信ができる
  3. IoTデバイスとサーバー間で送信元 IPアドレスを維持したまま(NATなしに)双方向通信ができる

特に1については、多くのユーザー様よりご要望をいただいておりました。今まではルーターでのポートフォワーディングが必要といった制約があったのですが、SIM ベースルーティングの登場によって制約が大きく緩和されました。

なお、前提として VPGや Gate Peerといった SORACOM の用語については以下のドキュメントを参照してください。AWSの用語についての解説は、当ブログでは割愛します。

また、今回は AWS と接続した構成手順を紹介していますが、SORACOM Doorで Azure VPN Gatewayなどへ繋いだ場合も同様な構成が可能です。その他にも様々な構成が可能であり、今回紹介する構成が最適ではない場合もあります。ネットワーク設計について相談したい場合は IoT導入相談会を是非ご利用ください。

手順概要

手順は大きく6ステップです。

  1. ルーターと IoTデバイスを設定する(IoTデバイスから VPGへ疎通できる)
  2. SORACOM Canalを設定する(IoT デバイスから Gate Peerへ疎通できる)
  3. SORACOM Gate C2Dを設定する(Gate Peerとルーターで双方向通信できる)
  4. SIMベースルーティングを設定する(Gate Peerから IoTデバイスで双方向通信できる)
  5. SORACOM Junction Redirectionを設定する(IoTデバイス とサーバーで双方向通信できる)
  6. ルーターの NATを無効化する(IoTデバイスとサーバーで NATなしに双方向通信できる)

現時点では、今回のようなネットワークを構成するにはルーター・Gate Peerに幾らかの設定が必要になります。主なポイントを紹介します。

注意

●ルーターや Gate Peerの設定については、デバイスや OSに依存する部分もあります。Priorityサポートプランを利用すると、これらの SORACOM外の設定でお困りの場合にベストエフォートで支援できます。

●ルーターによっては今回の構成をサポートしていない場合もあるので注意してください。

●今回実施する各コマンドはルーティングや転送設定の永続化をしません(再起動後は再設定が必要です)。永続化が必要な場合はカーネルモジュールの読み込みや sysctlといった、それぞれの設定について手順を確認してください。

ステップ 1. ルーターと IoTデバイス を 設定する(IoTデバイス から VPGへ疎通できる)

以下の手順で設定します。

操作前の確認ポイント

●SORACOM Webコンソール上での操作は 日本カバレッジで行ってください。

●お手元のグローバルカバレッジのSIMをご利用の場合は グローバルカバレッジで行ってください。

  1. VPG Type-Fを作成する(参考:https://users.soracom.io/ja-jp/docs/vpg/create-vpg/
  2. ルーターの SIMを VPGへ所属させる(参考:https://users.soracom.io/ja-jp/docs/vpg/use-vpg/
  3. ルーターにAPNなどを設定して SORACOMへ繋げる(参考:https://users.soracom.io/ja-jp/guides/devices/rut240/setup/
  4. IoTデバイスをルーターへ繋げる

注意点は以下のとおりです。

  • 必要に応じて、IoTデバイスへはルーターから固定 IPアドレスを割り当てておく
  • VPGのデバイスサブネット IPアドレスレンジはデフォルトで 10.128.0.0/9であるが、LANやクラウド側のネットワークと重複する場合は変更する

上記が完了すると、IoTデバイスから VPGへ疎通できるようになります。以下のような方法で確認してください。

確認 1. セッション履歴に作成した VPGの名前がある

SORACOMユーザーコンソールにてセッション履歴に作成した VPGの名前があることを確認します。名前がない場合は上記の手順2ができているか確認してください。

確認 2. IoTデバイスから VPGへ pingが通る

以下のコマンドで PING用のエンドポイント(pong.soracom.io)へ疎通できることを確認します。疎通できない場合は上記の手順3および手順4ができているか確認してください。

ping pong.soracom.io -c 4

ステップ 2. SORACOM Canalを設定する(IoTデバイス から Gate Peerへ疎通できる)

以下の手順で設定します。

  1. VPCと EC2(Gate Peer)を作成する(参考ドキュメント:https://users.soracom.io/ja-jp/docs/canal/peering/
  2. VPGと VPCを SORACOM Canalで繋ぐ(参考ドキュメント:同上)

注意点は以下のとおりです。

  • Gate Peerには Ubuntuまたは Amazon Linux 2を使用すること
  • VPCのピアリング設定、ルーティングテーブル
  • 確認パートの疎通で使うプロトコル(たとえば ICMP)もセキュリティーグループで許可すること

上記が完了すると、IoTデバイスから Gate Peerへ疎通できるようになります。この段階ではまだ Gate Peerから IoTデバイスへの疎通はできません。以下のような方法で確認してください。

確認: IoTデバイスから Gate Peerへ pingが通る

以下のコマンドで Gate Peerへ疎通できることを確認します。172.16.1.11は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の各手順ができているか確認してください。

ping 172.16.1.11 -c 4

ステップ 3. SORACOM Gate C2Dを設定する (Gate Peer とルーターで双方向通信できる)

以下の手順で設定します。

  1. SORACOM Gate C2Dを設定する(参考:https://users.soracom.io/ja-jp/docs/gate/cloud-to-device/

注意点は以下のとおりです。

  • Gate Peerに割り当てたセキュリティーグループにて SORACOMからの VXLAN用の通信 UDP Port 4789を許可すること
  • VPG設定画面で Gate Peerを設定したときに表示されたスクリプトを使うこと
    • Amazon Linux 2の場合は、スクリプト中の eth0を enX0へ置き換えること

上記が完了すると、Gate Peerからルーターへ疎通できるようになります。この段階ではまだ Gate Peerから IoTデバイスへの疎通はできません。以下のような方法で確認してください。

確認 1. Gate Peerからルーターへ疎通できる

ルーターへ取り付けた SIMの IPアドレスへ疎通できることを確認します。10.128.128.10は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順1ができているか確認してください。また、ルーターによっては WANからの PINGを拒否する場合もあるので、ルーターの説明書を確認してください。

ping 10.128.128.10 -c 4

確認 2. ルーターから Gate Peerへ疎通できる

もしルーターから PINGを送ることができるのであれば、Gate Peerの VXLANインターフェースへ疎通できることを確認します。10.128.128.11は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順 1ができているか確認してください。

ping 10.128.128.11 -c 4

確認 3. IoTデバイスから Gate Peerへ疎通できる

IoTデバイスから Gate Peerの VXLANインターフェースへ疎通できることを確認します。10.128.128.11は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順1ができているか確認してください。

ping 10.128.128.11 -c 4

解説

SORACOM Canalを設定したステップ2において Gate Peerでパケットをキャプチャすると、送信元が 100.67.xx.xxのような IPアドレスとの通信を確認できます。これはつまりSIMからクラウドへの通信が VPGで NATされていることを示しています。
一方で、ステップ 3の確認 1~3の際に Gate Peerで VXLANインターフェース vxlan0をパケットキャプチャすると 10.128.128.11や 10.128.128.10といった IPアドレスを確認できます。つまり、Gate Peerとルーターは同じ IPアドレスレンジ 10.128.0.0/9内で通信しているように見えます。ステップ 3のように、クラウド上の Gate Peerと SIMを取り付けたデバイスとを VXLAN を用いて同じ L2ネットワークへ所属させるのが SORACOM Gateです。詳細は以下のドキュメントをご参照ください。

ステップ 4. SIMベースルーティングを設定する(Gate Peerと IoTデバイス で双方向通信できる)

以下の手順で設定します。

  1. ルーターの IP転送を設定する(参考:https://users.soracom.io/ja-jp/docs/vpg/sim-based-routing/)
  2. VPGの SIMベースルーティングを設定する(参考:同上)
    1. 上記手順のステップ3では宛先ネットワークに 192.168.1.0/24を指定してください。
  3. Gate Peerのルーティングでルーターの LAN宛のネクストホップを VXLANインタフェース にする

手順 1については、RUT240以外のルーターを使っている場合はルーターのドキュメントを確認してください。

手順 3については、たとえば以下のようなコマンドをサーバーで実行します。 10.195.17.94と 10.195.17.100 は今回の構成例の IPアドレスです。自身の環境の IPアドレスは VPG詳細画面の「デバイス LAN設定」タブ >「VPGの Gate Peer一覧」 >「デバイスサブネット内 IPアドレス」にあるアドレスです。

sudo ip route add 192.168.1.0/24 nexthop via 10.195.17.94 weight 1 nexthop via 10.195.17.100 weight 1 dev vxlan0

上記が完了すると、Gate Peerと IoTデバイス で双方向通信できるようになります。以下のような方法で確認してください。

確認 1. Gate Peerから IoTデバイスへ疎通できる

IoTデバイスへ疎通できることを確認します。192.168.1.10は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の各手順ができているか確認してください。

ping 192.168.1.10 -c 4

確認 2. IoTデバイスから Gate Peerへ疎通できる

IoTデバイスから Gate Peerの VXLANインターフェースへ疎通できることを確認します。10.128.128.11は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の各手順ができているか確認してください。

ping 10.128.128.11 -c 4

解説

このステップでは Cloud networkから LAN向けの通信をルーターへ向けるように Gate Peerと VPGのルーティングを設定し、ルーターも WANから LAN向けの通信を転送できるように設定しました。

ステップ 5. SORACOM Junction Redirectionを設定する(IoTデバイスとサーバーで双方向通信できる)

以下の手順で設定します。今回のブログで最も手順が多いパートですので、1つずつ作業していきましょう。クラウド側のネットワークを設定する必要があります。

  1. VPGの Junction Redirectionを有効化する(参考: https://users.soracom.io/ja-jp/docs/junction/use-redirection/
  2. Gate Peerの EC2管理画面で送信元/送信先チェックを無効化する(参考:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
  3. Gate Peerで転送設定を有効にする
  4. サーバー(EC2)を作成する
  5. サーバーの所属するサブネットのルーティングテーブルにてデバイスサブネットとルーターの LANの宛先を Gate Peerにする

手順3は以下のコマンドを Gate Peerで実施します。

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" sudo sysctl -p

手順 5は AWSの場合、以下の画像のようなルーティングテーブルになります。設定する IPアドレスレンジは自身の環境へ置き換えてください。

Destination Target
172.16.0.0/16 local
100.67.xx.xx/27 Peering Connection(VPG との Peering Connection)
192.168.1.0/24 Network Interface(Gate Peer の ENI)
10.128.0.0/9 Network Interface(Gate Peer の ENI)

注意点は以下のとおりです。

  • 手順 4で作成するサーバーが用いるセキュリティグループにて ルーター配下の LANの CIDR(今回の例では 192.168.1.0/24)からの通信を許可すること
  • このステップで行った設定により、Gate Peerは VPG以外から通信が来た場合も転送ができるため、意図した通信だけ許可すること

上記が完了すると、サーバーと IoTデバイス で双方向通信できるようになります。以下のような方法で確認してください。

確認 1. IoTデバイスからサーバーへ疎通できる

IoTデバイスからサーバーへ疎通できることを確認します。172.16.1.10は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順1から手順5ができているか確認してください。

ping 172.16.1.10 -c 4

確認 2.サーバーからIoTデバイスへ疎通できる

EC2から IoTデバイスへ疎通できることを確認します。192.168.1.10は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順4から手順5ができているか確認してください。

ping 192.168.1.10 -c 4

解説

このステップでは LANから Cloud network向けの通信を Gate Peerへ向けるように Junction Redirectionを設定しました。また、Gate Peerの転送設定により、LANから Cloud network向けの通信を転送できるようにしました。加えて、サーバーから LANへ向かうためのルーティングを設定しました。 Gate Peerの転送設定ではデフォルトで送信元・送信先の IPアドレスを保持していますが、ルーターでは NATしています。最後のステップではルーターの NATを無効化します。

ステップ 6. ルーターの NATを無効化する(IoT デバイス とサーバーで NAT なしに双方向通信できる)

  1. [設定手順] ルーターの設定にて、LANから WAN宛の通信で NAT を無効化する
  2. [設定手順] ルーターの設定にて、WANから LAN宛の通信で NAT を無効化する

RUT240の場合、コンソールから Network >FIREWALL >ZONESの MASQUERADINGをすべて OFFにします。

上記が完了すると、EC2と IoTデバイスで NATなしに双方向通信できるようになります。以下のような方法で確認してください。

確認1. 送信元 IPアドレスを保持したまま IoTデバイスからサーバーへ疎通できる

サーバーでパケットをキャプチャすることで送信元を確認してください。Amazon Linux 2ではない場合は enX0をデバイス名に置き換えてください。

sudo tcpdump -i enX0 -n icmp

サーバーでパケットキャプチャしたまま、IoTデバイスからサーバーへ疎通できることを確認します。172.16.1.10は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順1から手順4ができているか確認してください。

ping 172.16.1.10 -c 4

確認2. 送信元 IPアドレスを保持したままサーバーから IoTデバイスへ疎通できる

IoTデバイスでパケットをキャプチャすることで送信元を確認してください。

sudo tcpdump -i eth0 -n icmp

IoTデバイスでパケットキャプチャしたまま、サーバーから IoTデバイスへ疎通できることを確認します。192.168.1.10は今回の構成例の IPアドレスなので、自身の環境に置き換えてください。疎通できない場合は上記の手順5および手順6ができているか確認してください。

ping 192.168.1.10 -c 4

(参考)費用の目安

2023年 11月 15日現在の料金において、以下のような費用が発生します。実際の費用については各サービスの見積ツールなどを利用して確認してください。

初期費用

総額:30,360円+Raspberry Piの費用

※金額は税込・送料別です

月額のランニング費用

総額:約 44,750円~(データ通信量によって変動します)

※金額は税込・送料別です

まとめ

ネットワーク間で通信をしたい際、通信要件によっては NATが課題になることもあります。SORACOMは SORACOM Gateでクラウド・デバイス間の NATを解決し、SORACOM Jucntion Redirectionと SIMベースルーティングで更に広い範囲の NATを解決できるようにしました。柔軟なネットワーク構成でお客様の要件を満たせれば幸いです。

―ソラコム三國(mick)

投稿 ルーター配下の IoT デバイスとクラウドとで NAT なし双方向通信を実現する方法は SORACOM公式ブログ に最初に表示されました。

過去記事アーカイブ

2024年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
2023年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2022年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2021年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月