- やりたいこと
- VyOS の展開と設定
- Ubuntu の展開と VirtualBOX の設定
- VM-1, VM-2 の共通設定
- VM-1 の個別設定
- VM-2 の個別設定
- VM-1 への Softether VPN Server のインストール
- VM-2 への Softether VPN Bridge のインストール
- Softether VPN Server Manager for Windows のダウンロード&インストール
- VPN Server の設定
- VPN Bridge の設定
- VM-1 と VM-2 のそれぞれで、br0 と tap_0 をリンク
- 不要な設定を削除する
- IT/インフラエンジニアの地位とスキル向上のために
やりたいこと
Ubuntu 22.04LTS Server を 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 を Softether で接続するので互いの IP を隠蔽する目的で NAT をかませている。VM-2 から見ると VM-1 の IP は 198.51.100.1 となっており、VyOS + NAT でインターネットをシミュレーションしている。)
この右側の https 接続により左側の Softether 管理下の各種機能が動作し、10.1.1.0/24 と 10.2.2.0/24 が L3 接続できるようになる。
VyOS の展開と設定
以下手順を参照に構築する。
アダプター 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'
Ubuntu の展開と VirtualBOX の設定
VirtualBOX 上に Ubuntu 22.04 LTS Server をインストールする。
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, VM-2 の共通設定
sudo su - で root ユーザーになり、ホスト名の設定と enp0s9 の設定をし、ssh 接続する。
ホスト名の設定
root@localhost:~# hostnamectl set-hostname VM-1 # もしくは VM-2
enp0s9 の dhcp 起動
root@localhost:~# netplan set ethernets.enp0s9.dhcp4=true root@localhost:~# netplan apply
これで ssh 接続できるようになる。なお、VirtualBOX 側で設定したポートフォワーディングの通り、Teraterm 等から 127.0.0.11 の 10022/tcp で接続する。(VM-2 の場合は 127.0.0.12 の 10022/tcp)
パッケージインストール
今回利用するパッケージをインストールする。
root@localhost:~# apt -y install vim iputils-ping gcc make
VM-1 の個別設定
netplan (ネットワーク) の設定
先ほど enp0s9 だけは起動したが、他のネットワーク設定を行う。
まず、00-installer-config.yaml が読み込まれないように .disabled を付ける。
root@VM-1:~# mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.disabled
99-netcfg.yaml を新規作成する。
root@VM-1:~# vi /etc/netplan/99-netcfg.yaml
network:
bridges:
br0:
interfaces:
- enp0s3
addresses: [10.1.1.1/24]
routes:
- to: 10.2.2.0/24
via: 10.1.1.250
nameservers:
addresses: [1.1.1.1,8.8.8.8]
search: []
parameters:
forward-delay: 0
stp: no
optional: true
ethernets:
enp0s3:
dhcp4: false
version: 2
設定を反映する。
root@VM-1:~# netplan apply
ここで問題が発生する。ping 10.1.1.254 への疎通ができない。これについては以下に記載の通り、
root@VM-1:~# vi /usr/lib/systemd/network/99-default.link
MACAddressPolicy=persistent を none に変更。
[Link]
NamePolicy=keep kernel database onboard slot path
AlternativeNamesPolicy=database onboard slot path
MACAddressPolicy=none
br0 を作り直す。
root@localhost:~# networkctl delete br0 root@localhost:~# netplan apply
これで ping 10.1.1.254 で疎通が取れるようになる。
VM-2 の個別設定
MACAddressPolicy の変更
先ほどの通り vi /usr/lib/systemd/network/99-default.link にて MACAddressPolicy=none を設定する。
netplan (ネットワーク) の設定
まず、00-installer-config.yaml が読み込まれないように .disabled を付ける。
root@VM-2:~# mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.disabled
99-netcfg.yaml を新規作成する。
root@VM-2:~# vi /etc/netplan/99-netcfg.yaml
network:
bridges:
br0:
interfaces:
- enp0s3
addresses: [10.2.2.2/24]
routes:
- to: 10.1.1.0/24
via: 10.2.2.250
- to: 198.51.100.0/24
via: 10.2.2.254
nameservers:
addresses: [1.1.1.1,8.8.8.8]
search: []
parameters:
forward-delay: 0
stp: no
optional: true
ethernets:
enp0s3:
dhcp4: false
version: 2
設定を反映する。
root@VM-1:~# netplan apply
ping 10.2.2.254 が疎通することを確認する。
VM-1 への Softether VPN Server のインストール
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:~# cd /usr/local/vpnserver root@VM-1:/usr/local/vpnserver# chmod 600 * root@VM-1:/usr/local/vpnserver# chmod 700 vpncmd vpnserver
動作確認する。
root@VM-1:vpnserver# ./vpncmd Select 1, 2 or 3: 3 VPN Tools> check VPN Tools> exit
check の後に以下が表示されれば OK。
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:~# cd /usr/local/vpnbridge root@VM-2:/usr/local/vpnbridge# chmod 600 * root@VM-2:/usr/local/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 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 へ変換しているので、この場合は以下のように設定する。
接続ボタンを押すと管理者の初期パスワード設定を求められるため、設定する。その後は以下のスライドに従って設定する。
VPN Bridge の設定
サーバー管理マネージャーで同様に VPN Bridge に接続する。
同様に管理者パスワードの初期設定を求められるので設定する。以降は以下のスライドに従って設定する。
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 を打って疎通確認をする。
不要な設定を削除する
デフォルトで解放している「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 本となっている。
以上。
コメント