社内UbuntuサーバにVPNサーバ「Softether」をインストールしてどこからでもファイルサーバを使えるようにした記録

社内の余っているパソコンにubuntuを入れてサーバー化しています。

オフィスにあまりいないので、世界中どこからでもVPNで繋がるように設定しました。

あまりIT関連のエントリは書いていませんでしたが、自分用のメモも兼ねて書いておきます。

自社VPNでできること
    • どこからでもオフィスのファイルサーバにアクセスできます
    • 中国に行っても自由にインターネットを使うこともできます。

サクッと読める目次

今回使うのはSoftether VPN

フリーのVPNサーバといえばOpen VPNなどが有名なのですが、今回使うのはSoftether VPN。

SoftEther VPN ("SoftEther" は 「ソフトウェアによるイーサネット」を意味します) は、世界中で最も強力で使用が簡単な、複数 VPN プロトコルに対応した VPN ソフトウェアの 1 つです。SoftEther VPN は Windows、Linux、Mac、FreeBSD および Solaris 上で動作します。

SoftEther VPN はオープンソース・ソフトウェアです。SoftEther VPN は任意の個人的または業務用途に無償で使用していただくことができます。

筑波大学の研究プロジェクトで、フリーで簡単に使えるVPNサーバーとクライアントが配布されています。業務用とでも無償利用が可能なので、会社のサーバーに入れて業務に使っても問題ありません。

サーバー上にSoftEther VPNサーバーをインストール

基本的には公式ドキュメントに書かれているとおりにインストールすれば動きました。

執筆時時点の最新版は2019年2月28日版「softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz」でしたが、これからインストールする場合は最新版をウェブサイト上で確認し、ダウンロードするようにしてください。

wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.29-9680-rtm/softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz
tar xzvf softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz
cd vpnserver
sudo apt -y install make gcc
make ← ここで「make i_read_and_agree_the_license_agreement」と書けば同意を求められる画面を飛ばすことが可能。
cd ..
sudo mv vpnserver /usr/local
cd /usr/local/vpnserver/
sudo chmod 600 *
sudo chmod 700 vpncmd
sudo chmod 700 vpnserver

これでインストールは完了。
vpncmdコマンドで動作確認を行います。


sudo ./vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.29 Build 9680 (English)
Compiled 2019/02/28 19:22:54 by yagi at pc33
Copyright (c) SoftEther VPN Project. All Rights Reserved.

By using vpncmd program, the following can be achieved.

1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 3

VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.

VPN Tools>check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'...
Pass
Checking 'Memory Operation System'...
Pass
Checking 'ANSI / Unicode string processing system'...
Pass
Checking 'File system'...
Pass
Checking 'Thread processing system'...
Pass
Checking 'Network system'...
Pass

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.

The command completed successfully.

VPN Tools>exit

最後に、起動スクリプトを作成して自動起動の設定を行います。

sudo vi /etc/init.d/vpnserver
sudo chmod 755 /etc/init.d/vpnserver
sudo update-rc.d vpnserver defaults
sudo /etc/init.d/vpnserver start

/etc/init.d/vpnserverに書き込む内容は、マニュアルから以下の通り設定しました。

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

VPNサーバーの設定

このままサーバー上でコマンドでも設定できるのですが、後はWindows機に管理用のGUIをインストールして、GUIで設定するのが簡単。

ダウンロードページ:ダウンロード - SoftEther VPN プロジェクト

このページより、以下の画像のように選択して管理ツールのみダウンロードします。

Softetherダウンロードページ

執筆時点の最新版は上の通りでした。

起動するとVPNサーバーに接続を行う画面になるので、先ほどVPNサーバーをインストールしたサーバーのIPアドレスとポートを指定します。

VPNサーバーに接続

接続設定名はわかりやすい名前をつければOK。

接続先VPN Serverのところにホスト名とポート番号を入力します。

LAN内の端末から設定を行っています。

※その後、ポート番号は5555に変更しています。

必須の設定はDDNS設定でドメインを割り当てて、ユーザーを追加するだけでとりあえず繋がるようになります。

VPN環境下でサーバーにつながらない

これでVPNでサーバーアクセス可能!

となるはずなのですが、VPNを接続した環境で
ping 192.168.0.101
としてもサーバーに繋がりません。

同じネットワークセグメント上の他の端末はすべてつながるのでおかしいなぁ、と調べてみるとありました。

Linux オペレーティングシステム内部での制限事項により、VPN 側 (仮想 HUB 側) からローカルブリッジしている LAN カードに割り当てられる IP アドレスに対して通信を行うことはできません。この制限は SoftEther VPN が原因ではなく、Linux の内部構造に原因があります。もし VPN 側 (仮想 HUB 側) から Linux でローカルブリッジに使用しているコンピュータ本体と、何らかの通信を行いたい場合 (たとえば VPN Server / VPN Bridge サービスと HTTP サーバーサービスを両方動作させており、VPN 側からもサーバーサービスにアクセスさせたい場合) は、ローカルブリッジ用の LAN カードを用意して接続し、その LAN カードと既存の LAN カードの両方を物理的に同じセグメントに接続してください (この他の場合においても 「3.6 ローカルブリッジ」 で解説したように、ローカルブリッジに使用する LAN カードはそのための単独のものを用意することが推奨されています)。

LANカードに直接VPNのネットワークをブリッジしても繋がらないということなので、サーバ上にブリッジ(br0)を作り、そのブリッジにイーサネット(enp3s0)とtapデバイス(tap_sevpn)を接続します。

まず、Softether VPNサーバー管理マネージャから、Tapデバイスを作成してVPN側のネットワークをブリッジ接続します。

VPN管理画面

サーバ上でブリッジを作成し、イーサネットとtapデバイスを接続します。

sudo apt install bridge-utils
sudo vi /etc/network/interfaces

書き込む内容は以下の通り。

# Add local bridge for VPN
auto enp3s0
iface enp3s0 inet static
address 0.0.0.0

auto br0
iface br0 inet static
address 192.168.0.101
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.101 8.8.8.8
bridge_ports enp3s0
bridge_stp off

これで、ブリッジ(br0)にIPアドレスが振られ、そこにイーサネット(enp3s0)とが繋がるようになりました。

tapデバイスはvpnserver起動時に作成されるため、それに合わせてブリッジにtapデバイスを追加するように起動スクリプトを以下のように修正します。

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
sleep 3
brctl addif br0 tap_sevpn
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
sleep 3
brctl addif br0 tap_sevpn
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

sleep 3
brctl addif br0 tap_sevpn

という2行が起動時と再起動時に実行されるように追加しました。

3秒待っているのは、サーバのスペックにもよりますがvpnserverが起動完了しないとtapデバイスが存在せずにエラーとなるため、3秒間待ってからtapデバイスをブリッジに設定しています。

これで、世界中どこでもインターネットに繋がっていれば社内ネットワークに入り、ファイルサーバにアクセスしたり、自由なウェブ閲覧ができるようになりました。

(さらっと書きましたが、うまくいくまで何日もかかって苦戦しました・・)

こんな記事もいかがでしょう