ブログ

Armadillo Base OS:SoftEtherVPNのサーバとして使用する

at_takuma.fukuda
2023年11月6日 16時59分

*注意事項
2024/10/11時点において、この記事で使用しているコンテナイメージについて、ARM32bitアーキテクチャ向けのものが配布されなくなったため、 Armadillo-610、Armadillo-640、Armadillo-IoT A6Eではこの記事の手順そのままで設定を進めても正常に動作しないものとなってしまいました。 これらの製品をお使いの場合、以下の記事を元にATDEを使ってコンテナを構築・インストールしてください。 Armadillo Base OS:SoftEtherVPNのサーバとして使用する(VSCode編)

概要

ローカルネットワーク内で共有していたファイルを、複数拠点間で共有したい場合や、
複数拠点に存在するセンサデータを1つに集めたい場合、近年ではクラウドサービスなどを使うことが一般的です。

クラウドサービスを使用することで、ローカルサーバの管理コストを低減させたり、システムの高機能・高性能化を図ることが出来ます。
一方で一旦ローカルで構築したシステムをリプレースすることによるコストや手間がかかり、また外部からの侵入・改竄に対する対策なども必要となります。
VPNを使用すれば、複数のローカルネットワークをインターネットを介して接続し、あたかも一つの大きなローカルネットワークのようにすることができるので、システムをリプレースせずに複数拠点間でのやり取りが可能となります。

Armadillo Base OSとSoftEther VPNを使えば、後付けで簡単にVPNを構築できます。 この記事ではArmadillo-IoT A6Eを使った手順をご紹介します。

SoftEtherVPNとは

SoftEther VPNは複数 VPN プロトコルに対応した オープンソースVPN ソフトウェアです。
"SoftEther" は 「ソフトウェアによるイーサネット」を意味します

SoftEther VPNを使ってVPNサーバを構築することの最大の利点は、VPN Azure Cloudというサービスを利用すればグローバルIPを必要としない事です。
通常、VPNクライアントはVPNサーバに直接アクセスしますが、
SoftEther VPNとVPN Azure Cloudを組み合わせて使用する場合、クライアントはVPN Azure Cloudのサーバ(以下中継サーバ)にアクセスします。
VPNサーバと中継サーバとは常時接続を確立した状態となっています。
中継サーバはクライアントからの通信をVPNサーバにリダイレクトするため、
VPNサーバ自身がグローバルIPアドレスを持っていなくてもインターネット上でVPNサーバとして振る舞う事が出来ます。

手順

用意するもの

  • Armadillo-IoT A6E
    SIMカードを挿してLTE通信を行える状態に設定しておく
  • WIndows PC
    サーバの設定および、動作確認時のクライアントとして使用する
  • SoftEther VPNサーバー管理マネージャー
    サーバの設定操作のためのツール。予め上記PCにインストールしておく
  • SoftEther VPNクライアント接続マネージャ
    クライアントとしてSoftEther VPNのサーバに接続するためのツール。予め上記PCにインストールしておく
  • 任意のネットワーク機器
    Ethernetポートを持っていてDHCPサーバーからのIPアドレス割り当てを受けられ、外部からpingによる導通確認が出来るもの
    この記事ではArmadillo-640を使用しました。

設定操作

設定時の接続構成

設定操作の際には、PCとArmadillo-IoT A6Eが同じネットワークに接続していて、かつインターネットにも接続できる状態となっていることが望ましいです。

コンテナ準備

Armadillo-IoT A6EにSoftEther VPNのサーバ機能を持ったコンテナを構築します。
まずはDocker Hubからコンテナイメージをダウンロードします。

podman pull docker.io/softethervpn/vpnserver:stable

このイメージを元にコンテナを作成しますが、SoftEther VPNのサーバ設定を保存するためのディレクトリを別途用意しておきます。

mkdir /var/app/volumes/softether

コンテナ起動のための設定ファイルを作成します。

vi /etc/atmark/containers/softether.conf
 
#コンテナイメージ指定
set_image softethervpn/vpnserver:stable
#ポートフォワーディング設定
add_ports 443:443/tcp 992:992/tcp 1194:1194/udp  5555:5555/tcp  500:500/udp 4500:4500/udp 1701:1701/udp
#サーバの設定ファイル等を格納するディレクトリをコンテナ上にマウント
add_volumes /var/app/volumes/softether:/mnt
#ホストOSのネットワークをそのまま使用する設定
set_network host
#特権を設定
add_args --privileged

設定ファイルを保存し、コンテナを起動します。

persist_file /etc/atmark/containers/softether.conf
podman_start softether

サーバー設定

コンテナが起動したら、SoftEther VPNサーバー管理マネージャーでサーバの設定を行います。
サーバー管理マネージャーの操作方法そのものについては別途検索願います。
設定しておくべき項目は以下の通りです。

  • 仮想HUBの作成
  • SecureNATの有効化
  • 仮想DHCPサーバー機能の有効化
  • ローカルブリッジ設定→ブリッジ先はeth0

動作確認

動作確認時の接続構成

Armadillo-IoT A6EはArmadillo-640とのみEthernetで接続し、LTEでインターネットと接続した状態としています。
PCはArmadillo-IoT A6EともArmadillo-640とも直接接続していません。

IPアドレス割り当ての確認

接続された各機器のIPアドレスを確認します。
今回の構成では以下の通りとなっていました。

  • Armadillo-640:192.168.30.10
  • PC:192.168.30.11(ネットワークアダプタ―:VPN Client)

導通確認

それぞれの機器からpingコマンドを実行して導通することを確認する PC→Armadillo-640、Armadillo-640→PCのいずれのケースも導通していることが確認出来ました。

PC→Armadillo-640
C:\Users\XXXX>ping 192.168.30.10
 
192.168.30.10 に ping を送信しています 32 バイトのデータ:
192.168.30.10 からの応答: バイト数 =32 時間 =2442ms TTL=64
192.168.30.10 からの応答: バイト数 =32 時間 =528ms TTL=64
 
 
Armadillo-640→PC:
armadillo:~# ping 192.168.30.11
PING 192.168.30.11 (192.168.30.11): 56 data bytes
64 bytes from 192.168.30.11: seq=1 ttl=128 time=1839.093 ms
64 bytes from 192.168.30.11: seq=2 ttl=128 time=1984.332 ms