はじめに
Softether VPN Server を ubuntu 18.04 にインストールするときのメモ。
環境
- ubuntu 18.04.2 Server (64bit)
- Softether VPN Server Version 4.29 Build 9680
インストールまでの流れ
VPN Server で作成した仮想HUBとOSで作成したブリッジI/Fをブリッジ(接続)できることを最終目的とする。
通常は最後の5の手順は不要である。
- パッケージをインストールする
- systemd サービスに登録する
- ネットワークのブリッジを設定する
- 仮想HUBを作成する
- ソースからビルドして再インストールする(オプション)
設定する項目
設定 | 内容 |
---|---|
インストール場所(prefix) | /usr/local/vpnserver/ |
systemdサービス名称 | vpnserver |
仮想HUB | TEST |
[Softether] TAPデバイス名 | tap_test |
[OS] ブリッジデバイス名 | br_test |
1. パッケージをインストールする
ダウンロードURLは下記からできる。
$ mkdir -p ~/src/vpnserver/
$ cd ~/src/vpnserver/
$ wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.29-9680-rtm/softether-vpnbridge-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz
$ tar zxvf softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz
$ cd vpnserver
$ yes 1 | make
$ find . -type f | chmod 600
$ find . -type d | chmod 700
$ chmod u+x .install.sh vpncmd vpnserver
$ sudo cp -rp vpnserver /usr/local/
$ sudo chown -R root:root /usr/local/vpnserver/
2. systemd サービスに登録する
ubuntuには、サービスを登録する方法が2種類用意されている。
- init.d に起動スクリプトを登録する方法
- systemdにサービスとして登録する方法
どちらの方法で登録しても systemd のサービスとして取り扱うことができるので問題ない。
init.d に起動スクリプトを登録する方法
/etc/init.d/vpnserver
として以下のファイルを設定する。
(他の記事でよくある起動スクリプトから br0 に対する処理を削除している。)
#!/bin/sh
### BEGIN INIT INFO
# Provides: vpnserver
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: SoftEther VPN RTM
# Description: Start vpnserver daemon SoftEther VPN Server
### END INIT INFO
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver
# load tun/tap module
sudo modprobe tun
. /lib/lsb/init-functions
test -x $DAEMON || exit 0
case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3
;;
stop)
log_daemon_msg "Stopping SoftEther VPN 1.0 Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2
;;
restart)
$DAEMON stop
sleep 2
$DAEMON start
sleep 5
;;
status)
if [ -e $LOCK ]
then
echo "vpnserver is running."
else
echo "vpnserver is not running."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
$ sudo systemctl daemon-reload
$ sudo systemctl enable vpnserver
$ sudo systemctl start vpnserver
$ sudo systemctl stop vpnserver
systemd にサービスを登録する方法
/etc/systemd/system/vpnserver.service
として以下のファイルを設置する。
[Unit]
Description=SoftEther VPN Server
After=network.target auditd.service
ConditionPathExists=!/usr/local/vpnserver/do_not_run
[Service]
Type=forking
EnvironmentFile=-/usr/local/vpnserver
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
KillMode=process
Restart=on-failure
# Hardening
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=-/usr/local/vpnserver
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_ADMIN CAP_SETUID
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable vpnserver
$ sudo systemctl start vpnserver
$ sudo systemctl stop vpnserver
3. ネットワークのブリッジを設定する
VPN Server で作成する仮想HUBとブリッジ(接続)するために、ブリッジI/Fを作成する。
$ sudo apt install bridge-utils
VPN Server 向けのネットワーク設定を独立させるために、ここでは/etc/netplan/99-vpnserver.yaml
に設定を書き出すことにする。ここでは、物理NICをens192
、割当IPアドレスを192.168.123.123/24
として設定する。
また、TAPデバイスの tap_test
は、VPN Server 側でTAPデバイスとしてブリッジ設定を有効にするとUPすることを想定し、事前に設定しておく。
network:
ethernets:
ens192:
dhcp4: false
dhcp6: false
tap_test:
dhcp4: false
dhcp6: false
bridges:
br_test:
interfaces: [ens192, tap_test]
addresses: [192.168.123.123/24]
dhcp4: false
version: 2
設定したら、ネットワークを反映させる。ブリッジI/FがUPしていることが確認できた。
$ sudo netplan apply
$ brctl show
bridge name bridge id STP enabled interfaces
br_test 8000.3ed6f7a16a27 no
→ 注意: この時点では tap_test はUPしていない。
$ ip a
...(snip)...
36: br_test: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4. 仮想HUBを作成する
VPN Serverは、vpncmdコマンドによるCLI設定と、windowsやmacで提供されている管理ツールでGUIでの設定が可能だ。
GUIでの設定は、Windowsで管理ツール(SoftEther VPN サーバー管理マネージャ)が用意されているので、それをインストールする。
SoftEther VPN サーバー管理マネージャのインストール手順は、以下のページが参考になった。
SoftEther VPN Server Manager for Windows
ここでは、仮想HUB「TEST」を作成し、TAPデバイスとブリッジさせることにする。
ローカルブリッジ設定から新しいローカルブリッジの定義のフォームで、仮想HUB「TEST」を選択、「新しい tap デバイスとのブリッジ接続」を選択し、「新しい tap デバイス名」に「test」を入力し、「ローカルブリッジを追加」をする。
追加されるtap デバイスは、ubuntuから tap_test
のように、tap_
+「新しい tap デバイス名」ですぐに認識される。
$ brctl show
bridge name bridge id STP enabled interfaces
br_test 8000.3ed6f7a16a27 no tap_test
これで、br_test のブリッジI/Fと仮想HUB「TEST」を接続することができた。
5. ソースからビルドして再インストールする (オプション)
オープンソース版のSoftetherでは、以下のURLに記載があるようにエンタープライズ向けの機能が制限されている。
- DoS 攻撃防御機能
- RADIUS / NT ドメインでのユーザー認証
- RSA 証明書認証
- 詳細なパケットログ機能
- 接続元 IP アクセス制御リスト機能
- syslog 転送機能
しかしながら、自己責任となるが、ソースを修正してビルドすれば、これらの機能を利用することができる。(ソースにそのような記載がある。)
すでにインストールしてあるRTM版softetherの同バージョンのソースコード(Source Code)を取得する。
Git Hub (SoftEtherVPN_Stable)
$ sudo apt install build-essential
$ sudo apt install libreadline-dev libssl-dev libncurses-dev libz-dev
$ mkdir -p ~/src/vpnserver/
$ cd ~/src/vpnserver/
$ wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/archive/v4.29-9680-rtm.tar.gz
$ tar zxvf v4.29-9680-rtm.tar.gz
$ cd SoftEtherVPN_Stable-4.29-9680-rtm
ここでsrc/Cedar/Server.c.
を修正して、制限を解除する。
--- src/Cedar/Server.c.orig 2019-02-28 20:13:45.000000000 +0900
+++ src/Cedar/Server.c 2019-03-24 05:44:02.344012456 +0900
@@ -10854,7 +10854,7 @@ bool SiIsEnterpriseFunctionsRestrictedOn
if (StrCmpi(region, "JP") == 0 || StrCmpi(region, "CN") == 0)
{
- ret = true;
+// ret = true;
}
return ret;
ビルドする。
$ ./configure
$ make
置き換えに必要なファイルが出来上がったので、置き換え前にvpnserverのバックアップをしておく。
$ sudo su -
# systemctl stop vpnserver
# cd /usr/local
# cp -rp vpnserver vpnserver.bak
# cd /usr/local/vpnserver
OSにインストールしてあるライブラリを使えるように、RTM版vpnserverのMakefile
を修正する。
--- Makefile.orig 2019-03-24 04:21:24.946774797 +0900
+++ Makefile 2019-03-24 19:01:07.428996308 +0900
@@ -14,7 +14,7 @@ else
NO_PIE_OPTION=
endif
-OPTIONS=$(NO_PIE_OPTION) -O2 -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a
+OPTIONS=$(NO_PIE_OPTION) -O2 -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -lssl -lcrypto -lreadline -lncurses -lz
default:
@./.install.sh
@@ -25,14 +25,6 @@ default:
i_read_and_agree_the_license_agreement:
@echo "Preparing SoftEther VPN Server..."
- -ranlib lib/libcharset.a
- -ranlib lib/libcrypto.a
- -ranlib lib/libedit.a
- -ranlib lib/libiconv.a
- -ranlib lib/libintelaes.a
- -ranlib lib/libncurses.a
- -ranlib lib/libssl.a
- -ranlib lib/libz.a
-ranlib code/vpnserver.a
$(CC) code/vpnserver.a $(OPTIONS) -o vpnserver
-ranlib code/vpncmd.a
修正したRTM版vpnserverを再ビルド(リンク)する。
$ cd ~/src/vpnserver/SoftEtherVPN_Stable-4.29-9680-rtm/
$ sudo cp -rp tmp/as/vpnserver.a /usr/local/vpnserver/code
$ sudo cp -rp tmp/as/vpncmd.a /usr/local/vpnserver/code
$ sudo cp -rp bin/vpncmd/hamcore.se2 /usr/local/vpnserver/
$ sudo su -
# cd /usr/local/vpnserver/
# make
# find . -type f | chmod 600
# find . -type d | chmod 700
# chmod u+x .install.sh vpncmd vpnserver
# chown -R root:root /usr/local/vpnserver/
# systemctl start vpnserver
最後に
インストール後の設定についてもメモを投稿しているので、リンクしておく。
以上