フォーム読み込み中
2024年9月6日掲載
皆さんこんにちは。IoT ソリューションアーキテクトのTakamasaです。
低容量IoT回線「1NCE」で標準で使用できるOpenVPNを使ったゲートウェイ構成について、説明していきたいと思います。
先ずはおさらいですが、1NCE(ワンス) というIoT回線の特徴を簡単にまとめてみます。
SIMカード1枚からオンラインで購入可能
日本国内に加えて、170以上の国と地域において追加料金なしでローミングサービスを利用可能
SIMカードに加えて、ウェブ上の回線管理ツール(CMP)や、お客さまのシステムとのデータ連携を可能にするAPI、安全にデータを伝送するOpen VPNなどの機能を追加料金なしで利用可能
eSIMやIPSec(各拠点のLANを相互接続する高セキュリティーのネットワーク)、Transit GW(AWS VPC同士を接続)などの機能を、有償の追加オプションとして提供
一番の特徴は、IoT回線でよくありがちな基本料金+従量課金ということではなく、一括で10年間前払いするという部分がとても特徴的ですね。
また今回使ってみるSIM管理プラットフォームについても、2,200円の中で使用できるということなので、気軽にIoTをプロトタイピングしてみるといった使い方でもできそうです。
なお、1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWebで購入が可能です。
1NCEのSIM回線プラットフォーム自体には、REST APIや、IMEIロック、SMS送信、回線無効化、追加チャージなど、回線に関わる操作が一元的に管理できるものなっています。
OpenVPNは、仮想プライベートネットワーク(VPN)のソリューションの1つであり、主な特徴としては、オープンソースのソフトウェアであり、現在も世界中で利用されているサービスの1つです。
オープンソースというのは、インターネット上でソースが公開されているということで、誰でもコードをレビューしたり、コード自身をカスタマイズできるので、セキュリティや信頼性が高いと言えます。但し、逆に言えば管理者という人はいないので、カスタマイズにより動作しなくなる、不安定になるといったことは自己責任になります。
因みにコード自体はGitHubで公開されています。
ただ基本的にOpenVPNを使う場合には、色々なライブラリが配布されていますので、難しく考えずにライブラリをインストールして、設定ファイルをいれれば接続自体は完成します。
また1NCEのOpenVPNの制限としては、以下のポイントを抑えておいてください。
無償で使えること
インターネット内での論理閉域になること
OpenVPN ClientのIPアドレスは静的に割り当てられる(Crendentialファイルを変えない限りは変わらない)
1ブレイクアウト当たり、1接続までのしか使用できない
ローカルブレイクアウトは自動モードではなく、リージョン固定で使用すること
さてここから主題になりますが、OpenVPNは基本的にServer - Client構成になっており、どちらかというとパソコンやサーバにインストールさせて、Point to Pointで接続する方式になっていると思います。
1NCE側のOpenVPN Serverのルーティングテーブルに、ルーティングさせたいネットワーク情報を書き込むようなことも理論的には可能ですが、基本的に1NCE側のサーバは共通のものになっているのでここでの変更はできません。
そのため、OpenVPN Client側にIP ForwardingとNAT設定、そして正しいルーティングを設定することで、ゲートウェイとして動作させるような構成が可能です。
OpenVPN ゲートウェイの構成例は、以下のような形になります。
今回試験で作成したサーバ側のソフトウェア要件は以下になります。
Amazon Linux 2
OpenVPN 2.6.9
先ずは1NCEポータルサイトにアクセスし、閉域接続させたいアカウントでログインしてください。
設定>OpenVPNまで進めば、ファイルがダウンロードできるようになります。
この.confファイルと.txtファイルをダウンロードし、一先ず自分のPCに保存しておいてください。
因みに設定ファイル(.conf)の中を見てみるといくつかの設定項目があるかと思いますが、基本は何も変更せずにそのまま利用することが可能です。
但し、設定自体はカスタマイズ可能な項目もあるので、以下を参照して変更したいものがあればこれを参照ください。
次にOpenVPN Clientを構築していきます。
今回は、AWS上に構築していきますが、AWS側の設定はここでは省きますが、必要なリソースやキーペア、セキュリティグループなどは適切に設定してください。
先ずはOpenVPNをインストールしていきたいと思いますが、AWSのUbuntuに関しては基本的にデフォルトでインストールされています。
$ openvpn –version
もしインストールされていないようであれば、以下コマンドからOpenVPNをインストールしていきましょう。
$ sudo amazon-linux-extras install epel
$ sudo yum install openvpn
あとは1NCEポータルからダウンロードした、.txtファイルを以下のフォルダ直下においてください。
/etc/openvpn
また.confファイルについては接続先情報になるので、以下のフォルダの中に、設定ファイルを保存しておきます。
$ mkdir /etc/openvpn/client
その状態で、以下コマンドを実行させてOpenVPNのサービスをスタートさせ、その後サービスを再起動時でも動作するようにしておきます。
$ sudo systemctl start openvpn-client@ap-northeast-1-client
$ sudo systemctl enable openvpn-client@ap-northeast-1-client
これでOpenVPN Client自体は完成となります。
それではここからが、OpenVPNクライアントをゲートウェイ化させていく設定になりますが、大きくは3つあります。
IP Forwardingを有効化
NAT機能を設定する
Public/Private Subnetにルーティングテーブルを設定する
また今回は検証ということで、NAT GatewayをEC2上に一緒に設定していきます。
(HA構成として作るのであれば、NAT Gatewayもしくは、NATインスタンスにしてもよいと思います。)
先ずはOpenVPNクライアントにログインし、IP転送を有効化させていきます。
$ sudo sysctl -w net.ipv4.ip_forward=1
/etc/sysctl.confファイルにも、以下の行を追加して再起動後も有効にします。
net.ipv4.ip_forward=1
NATとDNATの設定を追加
# tun0はOpenVPNのインターフェースでNAT設定
$ sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# 今回はICMPトラフィックを後ろ側のサーバに転送するDNAT設定
$ sudo iptables -t nat -A PREROUTING -i tun0 -s <SIM IPのCIDR> -p icmp -j DNAT --to-destination <送信先のAPPサーバ>
そして、最後にPublic subnectとPrivate Subnetのルーティングテーブルに以下のような形で設定を両方に追加してください。
SIM IPのCIDRに関しては、1NCEポータルの設定>ネットワーク設定のタブを開いて、IPアドレス範囲(CIDR)の部分で確認可能です。
これで設定は完了になります。
それでは、ここまで出来たら、あとは疎通試験をしてみたいと思います。
先ずは、試験的にAPPサーバをPrivate Subnet内に立ててみましたので、ここからSIMに対して、Pingを打ってみます。
[ec2-user@ip-172-21-xxx-xxx ~]$ ping 10.xxx.xxx.23
PING 10.xxx.xxx.23 (10.xxx.xxx.23) 56(84) bytes of data.
64 bytes from 10.xxx.xxx.23: icmp_seq=1 ttl=60 time=1220 ms
64 bytes from 10.xxx.xxx.23: icmp_seq=2 ttl=60 time=781 ms
64 bytes from 10.xxx.xxx.23: icmp_seq=3 ttl=60 time=753 ms
64 bytes from 10.xxx.xxx.23: icmp_seq=4 ttl=60 time=702 ms
64 bytes from 10.xxx.xxx.23: icmp_seq=5 ttl=60 time=662 ms
64 bytes from 10.xxx.xxx.23: icmp_seq=6 ttl=60 time=632 ms
正しく、Replyが帰ってきたことがわかりますね。
次に登り方向の通信になりますが、こちらの場合はSIMからの通信先はOpenVPNクライアントになるので、CLIだと少し分かりづらいですね。
というのも、今回の構成はNAT構成にしているので、SIMからはAPPサーバのIPは秘匿されています。DNAT(Destination NAT)設定を入れることで、ポートフォワーディングのような設定になっているので、ちゃんと届いたかどうかを確認するには少し工夫が必要です。
今回は、SIMからは単純にOpenVPNクライントにPingを打ち、その状態でAPPサーバのインターフェースで、tcpdumpしてパケットを確認してみました。
ちゃんとSIM IP(10.xxx.xxx.23)から、APPサーバ(172.xxx.xxx.202)にパケットが届いていることがわかりましたね。
これで、1NCE SIMの入ったIoTデバイスが複数のサーバとNATを介して接続できるようになり、より自由度の高い構成を作ることができるようになります。
今回は、OpenVPNをゲートウェイのようにして、SIMと複数のサーバを通信できるようにしてみました。
今回はHAの構成を考慮していないので、完全にシングル構成にしていますが、HA構成にする場合は、OpenVPNクライアントを冗長化させて、APPサーバ側もHA構成にするなどすれば、OpenVPNでも十分に信頼性の高いシステムを構築できると思います。
これから1NCEを使って、IoTシステムを構築したいと思っている方は是非ソフトバンクもしくは1NCEまでご相談ください。
1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWEBで購入が可能で、今回紹介した1NCE SIM管理プラットフォームの機能は、アカウントユーザーであればであれば誰でも無料で試すことができますので、先ずは是非触ってみてください。
1NCE IoTフラットレートはIoTコネクティビティに特化した通信接続サービスです。
▶ 「低容量SIM」ユースケース 資料ダウンロード
条件に該当するページがございません