OSS

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

やりたいこと

RHEL 系 Linux (Rocky Linux) を VirtualBOX 上に 2 台用意し、Softether VPN で拠点間 L3 接続する。

Linux で Softether を使う場合、ローカルブリッジ設定で指定したインタフェースの IP には対向拠点からはアクセスできなくなってしまう。そうなると Softether を動かしているサーバはその IP でサービスを待ち受けても使えなくなってしまう。

そこで今回は bridge インタフェースと tap インタフェースを作り、tap インタフェースをローカルブリッジに指定することで、この問題を回避した。ブリッジインタフェース br0 を作り、IP を持たせ、ルーティング設定もしている。

構成図は以下の通り。

図の右側にある通り、10.2.2.2 から 198.51.100.1 への https 接続を VyOS で NAT し、10.1.1.1 へ到達性を持たせている。(今回の目的は 10.1.1.0/24 と 10.2.2.0/24 を接続するので互いの IP を隠蔽する目的で NAT をかませている。VyOS + NAT でインターネットをシミュレーションしている。)

この右側の https 接続により左側の Softether 管理下の各種機能が動作し、10.1.1.0/24 と 10.2.2.0/24 が L3 接続できるようになる。

ネットワーク設定のポイント

上記を構成する上で一番厄介なのがネットワークの設定である。何が厄介かというと、最近の RedHat 系 OS (CentOS/Rocky Linux/Almalinux) は NetworkManager によるインタフェース管理が前提だが、Softether が作る tap インタフェースは softether が管理を譲らないため、NetworkManager (nmcli コマンド等) での [tap_0 <-> br0] 接続設定ができない。

そのため別途コマンド (ip link set, 詳細は後述する) を実行しなければならないが、Softether のサービス再起動や br0 インタフェースの down->up でこの接続が切れてしまうため、そのたびにそのコマンド実行が必要になる。

VyOS の展開と設定

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

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

アダプター 1 は「内部ネットワーク」の [LAN1] に設定する。

同様にアダプター 2 は「内部ネットワーク」の [LAN2] に設定する。

アダプター 3 は「NAT」とし、ポートフォーワードの設定をする。

config は以下を投入する。

vyos@vyos# set interfaces ethernet eth0 address '10.1.1.254/24'
vyos@vyos# set interfaces ethernet eth1 address '10.2.2.254/24'

vyos@vyos# set nat destination rule 1 destination address '198.51.100.1'
vyos@vyos# set nat destination rule 1 translation address '10.1.1.1'
vyos@vyos# set nat destination rule 1 inbound-interface 'eth1'
vyos@vyos# set nat source rule 1 source address '10.2.2.2'
vyos@vyos# set nat source rule 1 translation address '10.1.1.254'
vyos@vyos# set nat source rule 1 outbound-interface 'eth0'

Rocky Linux の展開と VirtualBOX の設定

VirtualBOX 上に Rocky Linux 9 をインストールする。

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

VirtualBOX の「ネットワーク」において先ほどの VyOS と合うように VM-1 のアダプター 1 は「内部ネットワーク」の [LAN1] に、VM-2 のアダプター 1 は「内部ネットワーク」の [LAN2] に設定する。

アダプター 2 の設定は不要である。

アダプター 3 は NAT + ポートフォワードの設定をする。VM については ssh だけでなく https のポートフォワードの設定も行う。なお、以下は VM-1 の例だが、VM-2 の場合はホスト IP を 127.0.0.12 にする。

VM-1 には 127.0.0.11 の 10022/tcp で ssh 接続できる。VM-2 や VyOS もホスト IP だけ変え、他は同様の手順でログインできる。

なお、VyOS は TeraTerm 等においては「キーボードインタラクティブ認証を使う」で認証しないとうまくログインできない。

VM-1, VM-2 のブリッジインタフェースの設定

まず、ブリッジインタフェース br0 を作成する。

# nmcli con add type bridge con-name br0 ifname br0

STP が嫌いな人は止める。

# nmcli con mod br0 bridge.stp no

次に enp0s3 の IP は削除したいのだが、NetworkManager の管理下においては固定 IP を空欄にすることはできないので、NetworkManager の管理から外す。

# nmcli con del enp0s3

del という表現だが、nmcli device でデバイス自体は表示されるし、nmcli device set enp0s3 managed yes で元に戻すことができる。なお、今回の構成では enp0s3 はマシン外部との接続の媒介となる。図にある通り、VyOS との接続に必要となる。

次に、br0 と enp0s3 をリンクする。これは両方とも NetworkManager 管理下であるため nmcli コマンドで実行できる

# nmcli con add type bridge-slave ifname enp0s3 master br0

Linux 内部の仮想ブリッジの接続状況を確認するには bridge link show コマンド、もしくは ip link show master br0 コマンドを使う。

ブリッジインタフェースへの NW 設定

次に br0 に IP 等の NW 設定を行う。本来 enp0s3 で割り当てる設定を br0 に持たせる。

VM-1 は以下の通り。

[root@VM-1 ~]# nmcli con mod br0 ipv4.method manual ipv4.address 10.1.1.1/24
[root@VM-1 ~]# nmcli con mod br0 +ipv4.routes "10.2.2.0/24 10.1.1.250"
[root@VM-1 ~]# nmcli con up br0

VM-2 は以下の通り。

[root@VM-2 ~]# nmcli con mod br0 ipv4.method manual ipv4.address 10.2.2.2/24
[root@VM-2 ~]# nmcli con mod br0 +ipv4.routes "10.1.1.0/24 10.2.2.250"
[root@VM-2 ~]# nmcli con mod br0 +ipv4.routes "198.51.100.0/24 10.2.2.254"
[root@VM-2 ~]# nmcli con up br0

OS はルーティングテーブルにより出力インタフェースを決めるので、10.X.X.0/24 宛の通信については br0 が発信元となり、NextHop 10.Y.Y.250 へ ARP 解決し、パケットを投げることになる。なお、10.Y.Y.250 は Softether VPN の接続が出来てからでないと接続できない、レイヤ 3 スイッチに設定されている。ルーティングテーブルは ip route コマンドで表示できる。

VM-1 への Softether VPN Server のインストール

必要パッケージをインストールする。

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

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

VM-2 への Softether VPN Bridge のインストール

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-2 ~]# restorecon -v /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

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.21:10443 の通信をゲスト OS の IP の 443/tcp へ変換しているので、この場合は以下のように設定する。

接続ボタンを押すと管理者の初期パスワード設定を求められるため、設定する。その後は以下のスライドに従って設定する。

softether-L3-setup-01
softether-L3-setup-02
softether-L3-setup-03
softether-L3-setup-04
softether-L3-setup-05
softether-L3-setup-06
softether-L3-setup-07
softether-L3-setup-08
softether-L3-setup-09
softether-L3-setup-10
softether-L3-setup-11
softether-L3-setup-12
softether-L3-setup-13
softether-L3-setup-14
softether-L3-setup-15
softether-L3-setup-16
softether-L3-setup-17
softether-L3-setup-18
softether-L3-setup-19
softether-L3-setup-20
softether-L3-setup-21
softether-L3-setup-22
softether-L3-setup-23
previous arrow
next arrow
softether-L3-setup-01
softether-L3-setup-02
softether-L3-setup-03
softether-L3-setup-04
softether-L3-setup-05
softether-L3-setup-06
softether-L3-setup-07
softether-L3-setup-08
softether-L3-setup-09
softether-L3-setup-10
softether-L3-setup-11
softether-L3-setup-12
softether-L3-setup-13
softether-L3-setup-14
softether-L3-setup-15
softether-L3-setup-16
softether-L3-setup-17
softether-L3-setup-18
softether-L3-setup-19
softether-L3-setup-20
softether-L3-setup-21
softether-L3-setup-22
softether-L3-setup-23
previous arrow
next arrow

VPN Bridge の設定

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

同様に管理者パスワードの初期設定を求められるので設定する。以降は以下のスライドに従って設定する。

softether-bridge-setup-01
softether-bridge-setup-02
softether-bridge-setup-03
softether-bridge-setup-04
softether-bridge-setup-05
softether-bridge-setup-06
softether-bridge-setup-07
softether-bridge-setup-08
previous arrow
next arrow
softether-bridge-setup-01
softether-bridge-setup-02
softether-bridge-setup-03
softether-bridge-setup-04
softether-bridge-setup-05
softether-bridge-setup-06
softether-bridge-setup-07
softether-bridge-setup-08
previous arrow
next arrow

VM-1 と VM-2 のそれぞれで、br0 と tap_0 をリンク

VM-1 と VM-2 の両方で、以下コマンドにて br0 と tap_0 を L2 接続させる。

# ip link set dev tap_0 master br0

これで完成である。VM-1 で ping 10.1.1.1 、VM-2 で ping 10.2.2.2 を打って疎通確認をする。

サービス起動時に br0 と tap_0 をリンクさせる

サービス起動時に自動で br0 と tap_0 をリンクさせるために、VM1 の /etc/systemd/system/softether-server.service と VM-2 の/etc/systemd/system/softether-bridge.service の ExecStart の行の下に以下を追記する。

ExecStartPost=/usr/bin/sleep 5s
ExecStartPost=/usr/sbin/ip link set dev tap_0 master br0

不要な設定を削除する

デフォルトで解放している「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 本となっている。

おまけ: bridge インタフェースと tap インタフェース

最初の図で見てみると分かり易いと思うが、bridge インタフェースはマシン内部の L2 スイッチングを担っており、マシンから見て外部の NW 機器である [VyOS] と [仮想HUB] への接続がそれぞれ enp0s3 と tap インタフェースが担ってる。

なのでこの図から直感的に「ここでの enp0s3 インタフェースと tap インタフェースの機能は同じ」であり、tap インタフェースは外部機器との 1 対 1 の L2 接続に使えるものである。例えば L2 VPN 接続時で対向拠点との仮想的な L2 接続を表現するときに使われる。

[VyOS] は完全に外部の機器なので分かり易いが、今回の [仮想HUB] はマシン内部で生成されているのでちょっと分かりづらい。実は br0 を作った後にローカルブリッジの設定画面で見てみると br0 も選択できる。だが、br0 は IP を持たせているのでローカルブリッジをしてしまうと冒頭の通り到達性が無くなる。

ということでやはり tap が無いとダメであり、今回 tap を使う意味というのは正にその点である。

つまり、[仮想HUB] はマシン内部なので br0 へ直結することもできるが、IP 到達性を確保するために tap を介す、ということである。

(と私は理解した)

コメント

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