SoftEtherでのVPN接続を実現する忘備録
前提
今回はSoftEtherを使って、一般的なリモートアクセスVPNを実現する。
VPN Serverに仮想HUBを作成、ローカルブリッジ接続でVPN内のLANとリモートアクセス可能な環境を構築した。
・リモートLANは1つでIPルーティングは使用しない
・VPN Server とクライアントはNATがある
Raspi側(Server)
・グローバルIPアドレス・ドメインを使用しないために、ダイナミックDNS機能を使用。
・ネットワーク管理はNetworkManagerを使用。
環境
Server:RappberryPi4(Debian 10)/ Client:Windows 11
インストール
[VPN Server のインストール]
注意
・Debian用のVPNServer起動デーモンを作成・登録
[/etc/systemd/system/vpnserver.service]
[Unit]
Description=SoftEther VPN Server
After=network-online.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
[Install]
WantedBy=multi-user.target
[VPN管理アプリケーションのインストール]
条件(Server):
SoftwareVPN(Freeware) , Software VPN Server , Linux, ARM EABI(32bit)
条件(Client):
SoftwareVPN(Freeware) , Software VPN Client, Windows
(※Windows 標準のVPN接続機能を使う場合は必要無し)
設定
L2TPの有効化
今回は[L2TP over IPsec、EtherIP over IPsec] を使用するためにルータのフォワーディング・マッピングを以下で設定する
[UDPポート] 500, 4500
仮想HUB
ローカルブリッジ
・今回はローカルブリッジ用の物理LANカードは使用せず(LANカード1枚のみ)仮想的なTapデバイスを作成しローカルブリッジに使用した。
ローカルブリッジを作成する前に以下でNetworkManagerでtabデバイスの登録を行う。
nmcli c add type bridge ifname br0
nmcli con modify bridge-br0 bridge.stp.no
nmcli con modify bridge-br0 ipv4.method manual ipv4.addresses xxxx ipv4.gateway xxxx ipv4 dns xxxx
nmcli con add type bridge-slave ifname eth0 master bridge-br0
nmcli c del eth0
reboot
brctl show
⇒ ブリッジ接続状態を確認しbr0がeth0に設定されていればOK。
以下で上記で作成したserverのtabデバイスと仮想HUBをブリッジ接続する。
(※新しいtabデバイスとのブリッジ接続を選択)
設定終了後、server内で[nmcli device] 確認で上記tap_xxxが追加されていればOK。
また、VPN Server 起動時にtapデバイスを自動で追加するために 最初に作成したvpnserver.serviceに以下のシェルを追加する。
設定終了後、server内で[brctl show] 確認でブリッジに上記tap_xxxが追加されていればOK。
引用
#!/bin/bash
sleep 5
tap_dev=`/sbin/ip tuntap | awk -F: '{print $1}'`
if [ -n "$tap_dev" ]; then
/sbin/brctl addif br0 $tap_dev
fi
※注意
・ExecStart 項目の[vpnserver start]を変更し以下を含めたバッチを作成し指定した
・作成したshも実行権(chmod +x)を追加することを忘れずに・・
結果
遠隔(または別インターネットより)VPNクライアントまたはWindows標準のVPN接続ツールで上記で取得したダイナミックDNSのドメインにアクセスし接続できればOK。
考察
今回は最もシンプルなネットワーク環境で実験しました。
それでもローカルブリッジ設定には特に注意が必要、ちょっとしたミスでLANが無限ループを起こすなどネットワーク全体が全く機能しないという恐怖の状態にもなってしまった。
このように実環境のネットワーク環境によって様々な注意点や設定事項が発生するので実環境で利用するためには単にマニュアルに沿って設定するだけでなく、SoftEtherがL2TPなどVPN接続がどのように実現されているかなど回り道でも根本的な理解から始めた方が良さそう。
SoftEtherプロジェクトのドキュメントが非常に簡潔で分かりやすいものなのでまず一通り目を通すことで理解が深まるかなと。
高価なVPN用のルータや固定IPアドレスなど利用しないでここまで簡単にセキュアなVPN環境がソフトウェアで実現できるという素晴らしいプロジェクトだと思いました。
参考文献
- [SoftEther VPN プロジェクト] https://ja.softether.org/
- [VPNサーバー構築(SoftEther VPN Server)] https://centossrv.com/softethervpnserver.shtml
- [Create bridge and add TUN/TAP device using NetworkManager nmcli under CentOS 8] https://ahelpme.com/linux/centos-8/create-bridge-and-add-tun-tap-device-using-networkmanager-nmcli-under-centos-8/