Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
31
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@rimksky

softetherをubuntu18.04にインストールする

はじめに

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の手順は不要である。

  1. パッケージをインストールする
  2. systemd サービスに登録する
  3. ネットワークのブリッジを設定する
  4. 仮想HUBを作成する
  5. ソースからビルドして再インストールする(オプション)

設定する項目

設定 内容
インストール場所(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 に対する処理を削除している。)

/etc/init.d/vpnserver
#!/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として以下のファイルを設置する。

/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することを想定し、事前に設定しておく。

/etc/netplan/99-vpnserver.yaml (物理NICとブリッジする場合の例)
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」を入力し、「ローカルブリッジを追加」をする。

fig1.png

追加されるtap デバイスは、ubuntuから tap_test のように、tap_+「新しい 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に記載があるようにエンタープライズ向けの機能が制限されている。

Softether 現在の制限事項

  • 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
softetherのソースコードのダウンロード
$ 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.を修正して、制限を解除する。

diff -up src/Cedar/Server.c.orig 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;

ビルドする。

softetherの再ビルド
$ ./configure
$ make

置き換えに必要なファイルが出来上がったので、置き換え前にvpnserverのバックアップをしておく。

softetherのバックアップ
$ sudo su -
# systemctl stop vpnserver
# cd /usr/local
# cp -rp vpnserver vpnserver.bak
# cd /usr/local/vpnserver

OSにインストールしてあるライブラリを使えるように、RTM版vpnserverのMakefileを修正する。

diff -up Makefile.orig 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

最後に

インストール後の設定についてもメモを投稿しているので、リンクしておく。

softetherのちょっとしたセキュリティ向上設定

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
31
Help us understand the problem. What is going on with this article?