この記事はネットワークの理解のためにSoftetherを用いて拠点間接続を行います。
別の方法として、ルーティング部にスイッチングハブを用いてL3で拠点間接続を行う方法もあります。
はじめに
この記事では、CentOSをインストールした2つ以上のNICを持つマシンにSoftetherをインストールして、レイヤー2での拠点間接続を構築します。
これにより拠点間でサブネットを分割する必要がなくなります。詳細はSoftEtherのドキュメントをご覧ください。
2. レイヤ 2 Ethernet ベースの VPN - SoftEther VPN プロジェクト
構成図
今回の構成では2つの拠点間接続を行います。
大阪拠点と沖縄拠点が存在し、沖縄拠点の通信をすべて大阪拠点経由に行うことが今回の目標です。
なお、沖縄拠点のnodeは任意の数のNICをserverに接続することで増設できます。
増設を簡略化するには、沖縄拠点のserverのnodeの間にスイッチングハブをはさみ、これでルーティングしてもらう方法が良いでしょう。
沖縄拠点のserverにある緑色の枠は物理NICを表しています。
また、紫色の枠はコンピューターです。
構成マシン
以下の構成で行います
server:CentOS 7
Softether server 4.34 Build 9745 インストール済み
Client:CentOS 7
Softether serverをインストール予定
Raspberry pi 4 Model B
ラズパイでない通常のPCでも手順は変わらないはずです。
事前準備
大阪拠点の初期セットアップ
Softether serverが稼働しており、インターネットに接続できるSoftether serverを構築します。
以下の記事を参考にしてください。
softether VPNをCentos7で構築する。
沖縄拠点のの初期セットアップ
OSをインストールした直後の状態からラズパイ固有の設定、SSHとパッケージの更新など初期設定については以下の記事で解説しています。
拠点間接続の準備
さきほど構築した大阪拠点は変更しません。
通常のセットアップと異なり、ブリッジ側(ここでは沖縄拠点)に追加の設定を行う必要があります。
ソフトウェアのインストール
ルーティングとSoftetherの動作に必要なソフトをインストールします
$ yum -y install gcc make which net-tools wget tar bind-utils dhcp libevent-devel ncurses-devel
NICの設定
接続されているNICの状態を確認する。
- eth0 - ラズパイ本体のLANポート
- enp1s0u1 - 拡張したLANポート
- enp1s0u2 - 拡張したLANポート
NICのデバイス名は機器や接続のタイミングで異なることがあるので、適宜読み替えてください。
$ nmcli d
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
wlan0 wifi disconnected --
p2p-dev-wlan0 wifi-p2p disconnected --
enp1s0u1 ethernet unavailable --
enp1s0u2 ethernet unavailable --
lo loopback unmanaged --
$ nmcli c
NAME UUID TYPE DEVICE
Wired connection 1 378bd0b3-[省略] ethernet eth0
Wired connection 2 3478457a-[省略] ethernet --
Wired connection 3 a19806a4-[省略] ethernet --
LAN側のenp1s0u1の設定を行います。
インターフェイスのconfigファイルを作成します。
$ vi /etc/sysconfig/network-scripts/ifcfg-enp1s0u1
すでにファイルがある場合もありますが、以下の内容で上書きします。
UUIDはwebの生成ツールを使用した結果を入力します。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp1s0u1
UUID=2a2bc558-[省略]
DEVICE=enp1s0u1
ONBOOT=yes
IPADDR=192.168.1.254
NETMASK=255.255.255.0
PREFIX=24
ネットワークの再起動、インターフェイスの状態を確認します。
$ systemctl restart network
設定確認
$ nmcli d
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
wlan0 wifi disconnected --
p2p-dev-wlan0 wifi-p2p disconnected --
enp1s0u1 ethernet connected enp1s0u1
enp1s0u2 ethernet unavailable --
lo loopback unmanaged --
$ nmcli c
NAME UUID TYPE DEVICE
Wired connection 1 378bd0b3-[省略] ethernet eth0
enp1s0u1 2a2bc558-[省略] ethernet enp1s0u1
Wired connection 3 a19806a4-[省略] ethernet --
これでenp1s0u1の準備が完了しました。
enp1s0u2に関してはこれらの手順を行わなくて良いです。
DHCP有効化
DHCPサーバー設定ファイルの作成を行います。
vi /etc/dhcp/dhcpd.conf
以下を記述
#デフォルト貸出期間
default-lease-time 600;
#最大貸出期間
max-lease-time 7200;
#正当なDHCPサーバーであることの宣言
authoritative;
#ネットワークアドレスとサブネットマスク指定
subnet 192.168.1.0 netmask 255.255.255.0 {
#貸し出すIPアドレスの範囲指定
range dynamic-bootp 192.168.1.10 192.168.1.253;
#ブロードキャストアドレス指定
option broadcast-address 192.168.1.0;
#ゲートウェイアドレス指定
option routers 192.168.1.254;
}
DNSについて
今回DNSはSoftetherの機能に頼るためOS側で用意しません。
一度dnsmasqを利用した方法もありますが、今回は割愛します。
https://server.etutsplus.com/dnsmasq-setup-internal-dns/
softetherのセットアップ
Softetherの設定を行います。
ダウンロードと解凍と移動
wgetのurl、tarとrmのファイル名はCPUなどの環境に応じて適宜読み替えてください。
ここで規約の同意と動作確認まで行います。
wget https://www.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
tar zxvf softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
cd vpnserver
make i_read_and_agree_the_license_agreement
cd ../
mv ./vpnserver /usr/local
ls -lra
rm -rf softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
##自動起動設定
systemdに登録して自動起動するようにします。
cd /etc/systemd/system && \
vim softethervpn.service
# 以下を記述
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target
##systemdの反映と確認
先ほど作成したsystemdのファイルを登録して有効化し実行します。
systemctl daemon-reload && \
systemctl enable softethervpn && \
systemctl start softethervpn && \
systemctl status softethervpn
以下のような表示が出ればソフトのインストールは成功です。
● softethervpn.service - SoftEther VPN Server
Loaded: loaded (/etc/systemd/system/softethervpn.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-01-11 21:14:54 JST; 3s ago
Process: 20904 ExecStart=/usr/local/vpnserver/vpnserver start (code=exited, status=0/SUCCESS)
詳細設定
サーバー側の詳細設定、ユーザー登録処理などは以下の記事を参照してください。
Softether VPN serverをGUIで初期設定する - Qiita
dhcp無効化
これまではDHCPをOSの機能で行っていましたが、これはサーバー管理時のみ有効化します。
本稼働時はSoftetherの機能で行います。
dhcp_stop
reboot
これ以降沖縄拠点のSoftether serverにはSSHできなくなります。(すべて通信が大阪に飛ぶ)そのため操作するにはコンソールに直接アクセスしてください。
再度SSHを有効化する場合はdhcp_startを実行します。その場合は大阪へアクセスできなくなる代わりにルーターのメンテナンスが可能になります。
小規模なメンテナンスの場合はコンソールに直接アクセスすることでVPN接続を中断せずともメンテナンスが可能です。
L2とL3の拠点間接続方法の違い
もともと私は知見のためにL3接続による構築を行うつもりでした。
ですが、公式ドキュメントの10.6.3 IP ルーティングを使用する場合のデメリットに記載されていた以下の事項が気になりました。
・若干パフォーマンスが低下する
・IP 以外の通信を行うことはできません
この2点は私にとって致命的でした。
私はUDPを用いた通信をリモートサーバーに対して行うため、L3での構築は断念し、L2での構築を行うことにしました。
今後問い合わせが多ければL2とL3での負荷比較とスピードテストを行うつもりです。
参考文献
dhcp有効化まで
https://grapho.jp/raspberrypi4/router/
Softetherでの拠点間接続
https://ja.softether.org/4-docs/1-manual/A/10.5
https://ja.softether.org/4-docs/1-manual/A/10.6