1NCE Connect | OpenVPNをゲートウェイ化させてネットワークで繋げるようにする

2024年9月6日掲載

キービジュアル

皆さんこんにちは。IoT ソリューションアーキテクトのTakamasaです。

低容量IoT回線「1NCE」で標準で使用できるOpenVPNを使ったゲートウェイ構成について、説明していきたいと思います。

目次

1NCEとは?

先ずはおさらいですが、1NCE(ワンス) というIoT回線の特徴を簡単にまとめてみます。

  • 1回線当たり一括2,200円の支払いのみで、最長10年間、500MBまで利用可能(プリペイド式)
  • 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ショップ

1NCEのSIM回線プラットフォーム自体には、REST APIや、IMEIロック、SMS送信、回線無効化、追加チャージなど、回線に関わる操作が一元的に管理できるものなっています。

1NCE ポータル画面

標準閉域接続サービス「OpenVPN」について

OpenVPNは、仮想プライベートネットワーク(VPN)のソリューションの1つであり、主な特徴としては、オープンソースのソフトウェアであり、現在も世界中で利用されているサービスの1つです。

オープンソースというのは、インターネット上でソースが公開されているということで、誰でもコードをレビューしたり、コード自身をカスタマイズできるので、セキュリティや信頼性が高いと言えます。但し、逆に言えば管理者という人はいないので、カスタマイズにより動作しなくなる、不安定になるといったことは自己責任になります。

因みにコード自体はGitHubで公開されています。

OpenVPN - Github

ただ基本的にOpenVPNを使う場合には、色々なライブラリが配布されていますので、難しく考えずにライブラリをインストールして、設定ファイルをいれれば接続自体は完成します。

また1NCEのOpenVPNの制限としては、以下のポイントを抑えておいてください。

  • 無償で使えること

  • インターネット内での論理閉域になること

  • OpenVPN ClientのIPアドレスは静的に割り当てられる(Crendentialファイルを変えない限りは変わらない)

  • 1ブレイクアウト当たり、1接続までのしか使用できない

  • ローカルブレイクアウトは自動モードではなく、リージョン固定で使用すること

OpenVPNをルーター化させる方法は?

さてここから主題になりますが、OpenVPNは基本的にServer - Client構成になっており、どちらかというとパソコンやサーバにインストールさせて、Point to Pointで接続する方式になっていると思います。

1NCE側のOpenVPN Serverのルーティングテーブルに、ルーティングさせたいネットワーク情報を書き込むようなことも理論的には可能ですが、基本的に1NCE側のサーバは共通のものになっているのでここでの変更はできません。

そのため、OpenVPN Client側にIP ForwardingとNAT設定、そして正しいルーティングを設定することで、ゲートウェイとして動作させるような構成が可能です。

OpenVPN Gatewayの作り方

OpenVPN ゲートウェイの構成例は、以下のような形になります。

1NCE OpenVPN Gatewayの構成

今回試験で作成したサーバ側のソフトウェア要件は以下になります。

  • Amazon Linux 2

  • OpenVPN 2.6.9


1NCE ポータルでOpenVPNコンフィグファイルを取得する

 

先ずは1NCEポータルサイトにアクセスし、閉域接続させたいアカウントでログインしてください。

設定>OpenVPNまで進めば、ファイルがダウンロードできるようになります。

1NCE ポータル - 設定

1NCE OpenVPN 設定ファイル

この.confファイルと.txtファイルをダウンロードし、一先ず自分のPCに保存しておいてください。

因みに設定ファイル(.conf)の中を見てみるといくつかの設定項目があるかと思いますが、基本は何も変更せずにそのまま利用することが可能です。

但し、設定自体はカスタマイズ可能な項目もあるので、以下を参照して変更したいものがあればこれを参照ください。

1NCE ポータル - OpenVPN設定

OpenVPN Clientを構築する

次に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自体は完成となります。

IP Forwardingやネットワーク関連の設定をする

それではここからが、OpenVPNクライアントをゲートウェイ化させていく設定になりますが、大きくは3つあります。

  1. IP Forwardingを有効化

  2. NAT機能を設定する

  3. Public/Private Subnetにルーティングテーブルを設定する

また今回は検証ということで、NAT GatewayをEC2上に一緒に設定していきます。

(HA構成として作るのであれば、NAT Gatewayもしくは、NATインスタンスにしてもよいと思います。)

OpenVPN IP Forwarding NAT Gateway

先ずは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> —> OpenVPNクライアントのENI

SIM IPのCIDRに関しては、1NCEポータルの設定>ネットワーク設定のタブを開いて、IPアドレス範囲(CIDR)の部分で確認可能です。

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してパケットを確認してみました。

Wireshark

ちゃんと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ショップ

関連サービス

1NCE IoTフラットレートはIoTコネクティビティに特化した通信接続サービスです。

▶ 「低容量SIM」ユースケース 資料ダウンロード

おすすめの記事

条件に該当するページがございません