OSS

【図解/RockyLinux9】Softetherで拠点間L2接続 on VirtualBOX

やりたいこと

RHEL 系 (CentOS/Rocky Linux/Almalinux) 2 台で拠点間 L2 VPNを構築したい。VPN 接続は他のブラウザ通信と見かけ上変わらないような https 通信で行いたい。

今回は Rocky Linux9 に Softether VPN をインストールし拠点間で L2 VPN を構築した。両端にさらに VM 2 台を用意し疎通確認をした。

余談 : Softehter と OpenVPN の大きな違い

OpenVPN でも似たことができるのだが、試して分かったのだが、OpenVPN の場合は見かけ上は https になっていない。どいういうことかというと、OpenVPN の場合はパケットキャプチャをしてみると TLS としてパースされないのだ。どうやら OpenVPN の独自プロトコルの中で TLS ハンドシェイクをしているようだ。

これはつまり、アプリケーションまで識別できるファイアウォール/UTM (PaloAlto , FortiGate 等のいわゆる NGFW) を通過できない可能性があるということだ。

一方、Softether で試してみたところ、ばっちり TLS1.3 でのハンドシェイクが見えた。

これが Softether の剛腕なファイアウォール突破力の一因を担っているように思える。

Rocky Linux の展開

4 台とも以下手順の通りに構築する。

Rocky Linux 9 minimal (最小限) インストール手順 on VirtualBOX
Rocky Linux 9 を VirtualBOX へインストールする手順を紹...

VyOS の展開と設定

以下手順を参照に構築する。

【VyOS】の基本設定,初期設定, Oracle VM での検証環境設定
VyOS (読み方:ヴィワイオーエス)とは VMware や KVM 等の仮想...

具体的な設定として以下を投入する。インタフェースへの IP 設定のみである。

$ configure
# set interfaces ethernet eth0 address '198.51.100.254/24'
# set interfaces ethernet eth1 address '203.0.113.254/24'
# commit
# save

VirtualBOX 側の設定

基本的に最初の図の通りに設定すること。

仮想マシンのインタフェースの「割り当て」はデフォルトでは「NAT」になっているが、ここでは「内部ネットワーク」を指定する。

なお、重要なポイントとして、VM-1 と VM-3 の間は [LAN1] だが、VM-2 と VM-4 は [LAN2] と別のラベルにすること。どちらも同セグメント (10.1.1.0/24) だが、ここを同じラベルにしてしまうと、L2 VPN を接続した途端に L2 ループが発生するので、気を付けること。

以下は VM-1 の VirtualBOX のネットワーク設定である。

VM-1 の LAN1 (enp0s3) と VM-2 の LAN2 (enp0s8) に限っては、上図の通り、「プロミスキャスモード(P)」を「すべて許可」に設定すること。これにより、自分の IP 以外宛の通信もそのインタフェースで受け取るようになる。(これを設定しないと L2 VPN が確立できても VM-3 と VM-4 の IP が通らないため、必須の設定である)

VyOS も同様にアダプター 1 (eth0) の内部ネットワークを [WAN1], アダプター 2 (eth1) の内部ネットワークを [WAN2] に設定する。

また、各 VM でインターネット接続が無いと不便なので、図には書いていないが、全 VM 共通でアダプター 3 も追加しておく。(VM-3 と VM-4 はアダプター 2 でも OK)

また、ポートフォワーディングの設定もしておく。ssh は説明不要だが、https は、Softehter VPN は VPN サービスだけでなく管理コンソールも https が担っているので、後ほど必要となる管理コンソール接続のために今あわせて設定をしておく。

この設定により、ホスト PC から 127.0.0.11 の 10022/tcp へ ssh 接続することで、ゲスト OS の 22/tcp へ ssh 接続できるようになる。

VM-1 の設定は上図のとおりだが、VM-2 ではポートフォワーディングのホスト IP を [127.0.0.12] など変えるとよい。同様に VM-3 , VM-4 も ssh だけ設定する。

Softether VPN Server (VM-1) の設定

VM-1 にて Softether VPN Server の設定を行う。

Softether VPN Server は基幹となるサービスである。今回はこの VPN Server にて 443/tcp を Listen し、拠点の Softether VPN Bridge からのカスケード接続を待ち受ける。

以下の手順を root ユーザーで設定していく。

インタフェースの調整

VM-1 の NW を設定する。まず各サーバの追加インタフェースのデバイス名と NAME が違うのが気持ち悪いので、nmcli c s で現在の NAME を確認し、以下コマンドで enp0s8 と enp0s9 を修正する。

[root@VM-1 ~]# nmcli c s
[root@VM-1 ~]# nmcli con mod "Wired connection 1" connection.id enp0s8
[root@VM-1 ~]# nmcli con mod "Wired connection 2" connection.id enp0s9
[root@VM-1 ~]# nmcli c s

LAN1 の enp0s3 は Softether のローカルブリッジの設定を入れるため IP は付与しないことが推奨されている。Network Manager の管理にあると IP 付与が必要となるため、管理から外す。一方 WAN1 の enp0s8 は固定 IP を設定し、インタフェースを起動する。

[root@VM-1 ~]# nmcli con del enp0s3
[root@VM-1 ~]# nmcli con mod enp0s8 ipv4.method manual ipv4.address 198.51.100.1/24
[root@VM-1 ~]# nmcli con up enp0s8

また、デフォルト GW は enp0s9 が NAT インタフェースで内部的に取得するので、VM-1 ⇔ VM-2 間が通信できるように個別ルートを追加する。

[root@VM-1 ~]# nmcli con mod enp0s8 +ipv4.routes "203.0.113.0/24 198.51.100.254"
[root@VM-1 ~]# nmcli con up enp0s8

インターネットと vyos eth1 への疎通確認をする。

[root@VM-1 ~]# ping 1.1.1.1
[root@VM-1 ~]# ping 203.0.113.254

SELinux の Permissive 化

[root@VM-1 ~]# setenforce 0

/etc/selinux/config も SELINUX=enforcing から SELINUX=permissive に変更する。

必要パッケージインストール、および softether 自体のコンパイル、インストール

[root@VM-1 ~]# dnf -y install gcc binutils tar chkconfig

以下から Softether の安定板 RTM のバージョンを確認する。今回は v4.38 でしたのでこれを使う。

GitHub - SoftEtherVPN/SoftEtherVPN_Stable: Cross-platform multi-protocol VPN software. This repository is officially managed by Daiyuu Nobori, the founder of the project. Pull requests should be sent to the master repository at https://github.com/SoftEtherVPN/SoftEtherVPN.
Cross-platform multi-protocol VPN software. This repository is officially managed by Daiyuu Nobori, the founder of the project. Pull requests should be sent to ...

v4.38 をダウンロードし、解凍する。

[root@VM-1 ~]# curl -OL https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz

[root@VM-1 ~]# tar xzvf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz

vpnserver を make して move して chmod する。

[root@VM-1 ~]# cd vpnserver
[root@VM-1 vpnserver]# make
[root@VM-1 vpnserver]# cd ..
[root@VM-1 ~]# mv vpnserver /usr/local
[root@VM-1 ~]# restorecon -RFv /usr/local/vpnserver
[root@VM-1 ~]# cd /usr/local/vpnserver
[root@VM-1 vpnserver]# chmod 600 *
[root@VM-1 vpnserver]# chmod 700 vpncmd vpnserver

動作確認する。

[root@VM-1 vpnserver]# ./vpncmd
 Select 1, 2 or 3: 3
VPN Tools> check
VPN Tools> exit

check の後に以下が表示されれば OK。

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.
The command completed successfully.

OS 起動時にサービスが自動起動するように、systemd に登録してサービス化する。

[root@VM-1 ~]# vi /etc/systemd/system/softether-server.service
[Unit]
Description=Softether VPN Server Service
After=network.target

[Service]
Type=forking
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Restart=on-abort
WorkingDirectory=/usr/local/vpnserver/

[Install]
WantedBy=multi-user.target

サービスを起動および自動起動有効化する。

[root@VM-1 ~]# systemctl daemon-reload
[root@VM-1 ~]# systemctl enable --now softether-server

サービスの起動状態を確認する。

[root@VM-1 ~]# systemctl status softether-server

firewalld で https を開放する。

[root@VM-1 ~]# firewall-cmd --permanent --add-service=https
[root@VM-1 ~]# firewall-cmd --reload
[root@VM-1 ~]# firewall-cmd --list-all

Softether VPN Bridge (VM-2) の設定

VM-2 にて Softether VPN Bridge の設定を行う。この設定により、Softehter VPN Bridge (拠点) 側の仮想 HUB [BRIDGE] を、VPN Server 側の仮想 HUB [VPN] にカスケード接続する (つまり LAN1 と LAN2 が L2 接続される)。

以下の手順を root ユーザーで設定していく。手順は Server と似ているがところどころ違うので注意。

インタフェースの調整

VM-2 の NW を設定する。まず各サーバの追加インタフェースのデバイス名と NAME が違うのが気持ち悪いので、nmcli c s で現在の NAME を確認し、以下コマンドで enp0s8 と enp0s9 を修正する。

[root@VM-2 ~]# nmcli c s
[root@VM-2 ~]# nmcli con mod "Wired connection 1" connection.id enp0s8
[root@VM-2 ~]# nmcli con mod "Wired connection 2" connection.id enp0s9
[root@VM-2 ~]# nmcli c s

VM-1 と同様、WAN2 の enp0s3 は固定 IP を設定し、LAN2 の enp0s8 は Network Manager の管理から外す。

[root@VM-2 ~]# nmcli con mod enp0s3 ipv4.method manual ipv4.address 203.0.113.2/24
[root@VM-2 ~]# nmcli con up enp0s3
[root@VM-2 ~]# nmcli con del enp0s8

また、こちらも同様、VM-2 ⇔ VM-3 間が通信できるように個別ルートを追加する。

[root@VM-2 ~]# nmcli con mod enp0s3 +ipv4.routes "198.51.100.0/24 203.0.113.254"
[root@VM-2 ~]# nmcli con up enp0s3

インターネットと VM-2 への疎通確認をする。

[root@VM-2 ~]# ping 1.1.1.1
[root@VM-2 ~]# ping 198.51.100.1

SELinux の Permissive 化

[root@VM-2 ~]# setenforce 0

/etc/selinux/config も SELINUX=enforcing から SELINUX=permissive に変更する。

必要パッケージインストール、および softether 自体のコンパイル、インストール

[root@VM-2 ~]# dnf -y install gcc binutils tar chkconfig

Softether VPN Server と同じバージョンの Softether VPN Bridge をダウンロードし、解凍する。

[root@VM-2 ~]# curl -OL https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnbridge-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz

[root@VM-2 ~]# tar xzvf softether-vpnbridge-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz

vpnbridge を make して move して chmod する。

[root@VM-2 ~]# cd vpnbridge
[root@VM-2 vpnbridge]# make
[root@VM-2 vpnbridge]# cd ..
[root@VM-2 ~]# mv vpnbridge /usr/local
[root@VM-1 ~]# restorecon -RFv /usr/local/vpnbridge
[root@VM-2 ~]# cd /usr/local/vpnbridge
[root@VM-2 vpnbridge]# chmod 600 *
[root@VM-2 vpnbridge]# chmod 700 vpncmd vpnbridge

動作確認する。

[root@VM-2 ~]# ./vpncmd
 Select 1, 2 or 3: 3
VPN Tools> check
VPN Tools> exit

OS 起動時にサービスが自動起動するように、systemd に登録してサービス化する。

[root@VM-2 ~]# vi /etc/systemd/system/softether-bridge.service
[Unit]
Description=Softether VPN Bridge Service
After=network.target

[Service]
Type=forking
User=root
ExecStart=/usr/local/vpnbridge/vpnbridge start
ExecStop=/usr/local/vpnbridge/vpnbridge stop
Restart=on-abort
WorkingDirectory=/usr/local/vpnbridge/

[Install]
WantedBy=multi-user.target

サービスを起動および自動起動有効化する。

[root@VM-2 ~]# systemctl daemon-reload
[root@VM-2 ~]# systemctl enable --now softether-bridge

サービスの起動状態を確認する。

[root@VM-2 ~]# systemctl status softether-bridge

firewalld で https を開放する。なお、この設定は VPN 接続としては不要だが、次章の管理コンソール接続のために利用する。

[root@VM-2 ~]# firewall-cmd --permanent --add-service=https
[root@VM-2 ~]# firewall-cmd --reload
[root@VM-2 ~]# firewall-cmd --list-all

Softether VPN Server Manager for Windows のダウンロード&インストール

VPN Server と Bridge の細かい設定は Manager ソフトにて GUI で設定できる。

VirtualBOX を動かしているホスト OS にて、以下サイトからインストーラをダウンロードする。

SoftEther ダウンロード センター

以下のスライドの手順でインストールする。

softehter-manager-install-01
softehter-manager-install-02
softehter-manager-install-03
softehter-manager-install-04
softehter-manager-install-05
softehter-manager-install-06
softehter-manager-install-07
previous arrow
next arrow
softehter-manager-install-01
softehter-manager-install-02
softehter-manager-install-03
softehter-manager-install-04
softehter-manager-install-05
softehter-manager-install-06
softehter-manager-install-07
previous arrow
next arrow

プログラムを起動し、Softether VPN Server と VPN Bridge の設定を GUI にて行っていく。

VPN Server の設定

まずは VPN Server への接続設定をする。通常はホスト名はVM-1 の IP, ポート番号は 443 を設定するのだが、今回の例では前述の通り、VM-1 の NAT インタフェースのポートフォワード設定で 127.0.0.11:10443 の通信をゲスト OS の IP の 443/tcp へ変換しているので、この場合は以下のように設定する。

接続ボタンを押すと管理者の初期パスワード設定を求められるため、設定する。

すると以下の画面が表示されるため、「リモートアクセス VPN サーバー(R)」にチェックを入れ、「次へ(N)」をクリックする。

仮想 HUB 名はデフォルトの「VPN」のままとする。

次にダイナミック DNS 機能について聞かれるが、今回は使わないため「閉じる(X)」をクリックする。

同様に IPsec / L2TP /EtherIP / L2TPv3 サーバー機能も使わないため、「キャンセル」をクリックする。

VPN Azure も使わないので無効にして OK をクリックする。

以下の画面が表示されるので、ユーザーを作成する。

ユーザー名とパスワードを入力する。この ID/PW は VPN Bridge 側で利用する。この例ではユーザー名を vpn-bridge1 とした。

ユーザーの作成状況などを確認した後、先ほどの Window に戻り、一番下の「3. ローカルブリッジの設定」にLAN 側の enp0s3 を設定し、「閉じる(C)」をクリックする。VM なのでプロミスキャスモードに関する注意がでるが、先ほど VirtualBOX で設定した通りなので問題ない。「OK」をクリックする。

これで Server の設定は終わりである。

VPN Bridge の設定

サーバー管理マネージャーで同様に VPN Bridge に接続する。

同様に管理者パスワードの初期設定を求められるので設定すると、以下の画面が表示されるので、そのまま「次へ」をクリックする。

簡易セットアップの実行として「2. 接続先の VPN Server への接続設定」を行う。接続設定名は任意の名前でよい。ホスト名とポート番号は VM-3 の気持ちになって設定すること。仮想 HUB 名(V)、ユーザー名とパスワードは VPN Server 側で設定した通りである。

状態が「オンライン (接続済み)」となるはずである。

先ほどの Window に戻って「3. ローカルブリッジの設定」を行う。今度は LAN 側は enp0s8 である。

同様にプロミスキャスモードの注意が出るがこちらも OK。

これで完成である。VM-3 で ping 10.1.1.4 、VM-4 で ping 10.1.1.3 を打って疎通確認をする。

不要な設定を削除する

デフォルトで解放している「992/tcp, 1194/tcp, 5555/tcp」は不要なので削除する。これは VPN Server 側も VPN Bridge 側もである。(firewalld で 443/tcp のみになっているので不要とも思えるかもしれないが、多層防御の考え方としては重要である。)

また、デフォルトでは UDP による高速接続も設定されているが、今回は 443/tcp のみで通信しているため、これは設定を止めておく。

「仮想 HUB の管理(A)」⇒「カスケード接続の管理(C)」にて「BRIDGE 上のカスケード接続」Window を表示し、対象の接続設定名をクリックした状態で「編集(E)」をクリックし、「高度な通信設定(N)」をクリックすると以下が表示されるので、「UDP 高速化機能を無効にする」にチェックを入れる。

設定を反映するため、「オフライン(F)」⇒「オンライン(N)」をクリックする。

ちなみに上図にある通り、ここで TCP コネクションの数も設定できる。デフォルトでは 8 本となっている。

以上。

コメント

タイトルとURLをコピーしました