ブログ

Armadillo Base OS:SoftEtherVPNのサーバとして使用する(サーバへのアクセスも必要な場合)

at_takuma.fukuda
2023年12月22日 16時33分

はじめに

ArmadilloをSoftEther VPNサーバとして使用し、
Armadilloとローカルネットワークで接続された機器に、
クライアントからリモート接続する方法を下記の記事でご案内しました。
Armadillo Base OS:SoftEtherVPNのサーバとして使用する
上記ではとても簡単にSoftEther VPNサーバを構築することができますが、
一方でArmadillo自身はルーターのように振舞うのみで、クライアントからArmadillo自身へのアクセスは行うことができませんでした。
そこでこの記事では、上記の記事と同じネットワーク構成を維持しつつ、クライアントからArmadilloへのアクセスも可能とする方法をご案内します。

どうやるか

上記のネットワークでは、VPNサーバから直接eth0(イーサネットポート)へブリッジ接続をしていました。
VPNサーバから直接ブリッジ接続されたネットワークデバイスに対してはクライアントからアクセスすることができず、そのネットワークデバイスの先に繋がったほかのデバイス(上記ではArmadillo-640)へはアクセスすることができるため、今回は仮想ブリッジインタフェースと仮想ネットワークデバイスを使用して多重ブリッジ接続を行います。 このためには、Armadillo Base OSのネットワーク設定の変更および設定を適用するためのスクリプト作成と、
SoftEtherVPNサーバの設定変更が必要です。

手順

設定手順を紹介します。すでに過去記事に従ってSoftEtherVPNサーバーは構築済みであることを前提とします。

ブリッジインタフェース作成

仮想ブリッジインタフェースを作成します。

[armadillo ~]# nmcli con add type bridge ifname br0
[armadillo ~]# nmcli con mod bridge-br0 ipv4.method manual ipv4.address "192.168.30.2/24"
#VPNと同じセグメントのIPアドレスで、DHCPサーバの指定範囲外のIPアドレスを設定します。
#確認時は、192.168.30.10~20/24をDHCPサーバの指定範囲としており、
#VPNサーバのアドレスを192.168.30.1としていたので、上記IPアドレスとしました。
上記のIPアドレスと
[armadillo ~]# nmcli con up bridge-br0
[armadillo ~]# persist_file /etc/NetworkManager/system-connections/bridge-br0.nmconnection

eth0をブリッジインタフェースのスレーブにする

イーサネットポートeth0をブリッジインタフェースと紐づけるために、そのためのコネクション設定を作成します。
また、デフォルトで用意されているeth0のコネクション設定であるWired connection 1を削除しておきます。

[armadillo ~]# nmcli con del "Wired connection 1"
[armadillo ~]# nmcli con add type bridge-slave ifname eth0 master bridge-br0
[armadillo ~]# persist_file /etc/NetworkManager/system-connections/bridge-slave-eth0.nmconnection

tapデバイスとtapデバイスへのブリッジ接続を作成する

tapデバイスの作成については、SoftEtherVPNのサーバ管理マネージャから行うことができます。
ローカルブリッジ設定で、「既存のLANカードとのブリッジ接続」ではなく、「新しいtapデバイスとのブリッジ接続」を選択し、任意のtapデバイス名を入力してください。(仮にtestという名称を入力したものとします。
「ローカルブリッジを追加」を選択すると、Armadillo Base OS上にtapデバイスが作成され、
SoftEtherVPNのネットワークとブリッジ接続されます。
nmcliコマンドでデバイスが作成されていることを確認してみてください。

[armadillo ~]# nmcli device
DEVICE        TYPE      STATE                   CONNECTION
ttyCommModem  gsm       connected               gsm-ttyCommModem
br0           bridge    connected               bridge-br0
lo            loopback  connected (externally)  lo
tap_test      tun       connected (externally)  tap_test
eth0          ethernet  connected               bridge-slave-eth0
ppp0          ppp       unmanaged               --

tapデバイスとブリッジインタフェースをブリッジ接続する

tapデバイスとブリッジインタフェースとをブリッジ接続させます。
以下のようにbrctlコマンドで設定することができます。

[armadillo ~]# brctl addif br0 tap_test

このコマンド実行をopenrcを使って自動化させます。
この時に留意すべきことは、tapデバイスはSotEtherVPNサーバによって都度作成されるということです。
tapデバイスが作成される前に先ほどのコマンドを実行してしまうと、想定通りにブリッジ接続されません。
このため、tap_testというネットワークデバイスが作成されていることを確認してからコマンドを実行するようにしたいです。
これを実行するスクリプトファイルを以下のように作成します。

[armadillo ~]# vi /sbin/bridge_tap
 
#!/bin/sh
TAP=""
while [ "$TAP" = "" ]
do
  TAP=`nmcli d |grep tap_test`
done
brctl addif br0 tap_test
 
[armadillo ~]# chmod +x /sbin/bridge_tap
[armadillo ~]# persist_file  /sbin/bridge_tap

このスクリプトをopenrcで呼び出すためのサービスの定義ファイルを作成します。

[armadillo ~]# vi /etc/init.d/bridge_tap
 
#!/sbin/openrc-run
 
name="bridge_tap"
description="Bridge tap to br0"
 
start() {
 /sbin/bridge_tap
}
 
[armadillo ~]# chmod +x /etc/init.d/bridge_tap
[armadillo ~]# persist_file /etc/init.d/bridge_tap
[armadillo ~]# rc-update add bridge_tap
[armadillo ~]# rc-service bridge_tap start
[armadillo ~]# persist_file /etc/runlevels/default/bridge_tap

動作確認

ここまでの設定が意図したとおりに動作するかを確認するために、Armadilloのbr0のIPアドレスにSoftEtherVPNのクライアントからpingを送信し、導通確認を行います。
確認時の機器構成は以下の通りです。 以下のように、クライアントからbr0およびArmadillo-640へpingでの導通を確認しました。

PS C:\Users\XXXX> ping 192.168.30.2
 
192.168.30.2 に ping を送信しています 32 バイトのデータ:
192.168.30.2 からの応答: バイト数 =32 時間 =207ms TTL=64
192.168.30.2 からの応答: バイト数 =32 時間 =206ms TTL=64
192.168.30.2 からの応答: バイト数 =32 時間 =157ms TTL=64
192.168.30.2 からの応答: バイト数 =32 時間 =551ms TTL=64
 
192.168.30.2 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 157ms、最大 = 551ms、平均 = 280ms
PS C:\Users\XXXX> ping 192.168.30.11
 
192.168.30.11 に ping を送信しています 32 バイトのデータ:
192.168.30.11 からの応答: バイト数 =32 時間 =183ms TTL=64
192.168.30.11 からの応答: バイト数 =32 時間 =237ms TTL=64
192.168.30.11 からの応答: バイト数 =32 時間 =467ms TTL=64
192.168.30.11 からの応答: バイト数 =32 時間 =234ms TTL=64
 
192.168.30.11 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 183ms、最大 = 467ms、平均 = 280ms

また、下記の手順などを参考にArmadillo Base OS上でSSHサーバーを動作させておくと、
クライアントからSSHでのログインが可能となります。
Armadillo-IoT ゲートウェイ A6E 製品マニュアル 6.12. ssh 経由で Armadillo Base OS にアクセスする

PS C:\Users\XXXX> ssh atmark@192.168.30.2
atmark@192.168.30.2's password:
Welcome to Alpine!
(以下略)