動かざることバグの如し

近づきたいよ 君の理想に

LinuxでL2TP/IPsecなVPNサーバーを構築する

自宅で動いているTinker Board(ARM)を使ってVPNサーバーを構築してみた。

PPTPVPNサーバーを構築するのは割と楽なんだが、セキュリティ上の理由から、Macではその認証経由では接続できない。ということで、L2TP/IPsecしかなく、YAMAHAのお高いルーターを買うべきか悩んでいたところだったのだが、SoftEtherというアプリケーションだと無料で構築できるらしい。

インストール

以下からダウンロード

http://www.softether-download.com/ja.aspx?product=softether

するとリンク一覧が出るので、一番最新のやつのリンクをコピってwget&make

# tar xzvf softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-arm_eabi-32bit.tar.gz
# cd vpnserver
# make

途中ライセンス確認されるので1を入力してエンター

The preparation of SoftEther VPN Server is completed ! と表示されればビルド成功

/usr/localへ移動

cd ../
mv vpnserver /usr/local

実行権限付与

cd /usr/loca/vpnserver
chmod +x vpncmd
chmod +x vpnserver

起動

サービスと登録周りは自分でやらなくてはいけない

今回はsystemdを使ってみる。/etc/systemd/system/vpnserver.serviceに以下

[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
RestartSec=3s

[Install]
WantedBy=multi-user.target

でリロード

systemctl daemon-reload

起動

systemctl start vpnserver

うまく起動していればsystemctl status vpnserver のときにstatusが activeになってるはず

マシン起動時に、自動起動させたい場合は

systemctl enable vpnserver

しておく

せっかくなので旧式のinit.dバージョンも載せておく 動作確認済み

/etc/init.d/vpnserverに以下

DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/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

で実行権限付与

# chmod +x /etc/init.d/vpnserver

自動起動するようにする

# update-rc.d vpnserver defaults

起動

# /etc/init.d/vpnserver start

初期設定

以下で起動する

# /usr/local/vpnserver/vpncmd
# /usr/local/vpnserver/vpncmd                                                    
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.27 Build 9667   (English)
Compiled 2018/05/26 09:09:16 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)
# 設定をしたいので1を選択
Select 1, 2 or 3: 1

Specify the host name or IP address of the computer that the destination VPN Server or VPN Bridge is operating on. 
By specifying according to the format 'host name:port number', you can also specify the port number. 
(When the port number is unspecified, 443 is used.)
If nothing is input and the Enter key is pressed, the connection will be made to the port number 8888 of localhost (this computer).
# localhostと入力
Hostname of IP Address of Destination: localhost

If connecting to the server by Virtual Hub Admin Mode, please input the Virtual Hub name. 
If connecting by server admin mode, please press Enter without inputting anything.
# 空白のままエンター
Specify Virtual Hub Name: 
Connection has been established with VPN Server "localhost" (port 443).

You have administrator privileges for the entire VPN Server.

VPN Server>

ユーザーの作成

まずはユーザーの作成から、とその前に設定対象のハブを選択。すでにDEFAULTというハブが作られているのでそれを使う

VPN Server>Hub DEFAULT 
Hub command - Select Virtual Hub to Manage
The Virtual Hub "DEFAULT" has been selected.
The command completed successfully.

VPN Server/DEFAULT>
VPN Server/DEFAULT>UserCreate
UserCreate command - Create User 
User Name: ユーザ名

# 空欄のままエンター
Assigned Group Name:
# 空欄のままエンター
User Full Name:
# 空欄のままエンター
User Description:

The command completed successfully.

パスワードを設定

VPN Server/DEFAULT>UserPasswordSet
UserPasswordSet command - Set Password Authentication for User Auth Type and Set Password
User Name: さっきのユーザ名

Please enter the password. To cancel press the Ctrl+D key.

Password: *******************
Confirm input: *******************


The command completed successfully.

IPsec / L2TP での通信を有効化

IPsecEnableで設定に入れる。

VPN Server/DEFAULT>IPsecEnable
IPsecEnable command - Enable or Disable IPsec VPN Server Function
Enable L2TP over IPsec Server Function (yes / no): yes

Enable Raw L2TP Server Function (yes / no): no

Enable EtherIP / L2TPv3 over IPsec Server Function (yes / no): no

Pre Shared Key for IPsec (Recommended: 9 letters at maximum): ********

Default Virtual HUB in a case of omitting the HUB on the Username: DEFAULT

The command completed successfully.

VPNで接続するにあたってSecureNatEnable、NatEnable、DHCPEnableも有効しておく。

VPN Server/DEFAULT>SecureNatEnable
SecureNatEnable command - Enable the Virtual NAT and DHCP Server Function (SecureNat Function)
The command completed successfully.
VPN Server/DEFAULT>NatEnable      
NatEnable command - Enable Virtual NAT Function of SecureNAT Function
The command completed successfully.

VPN Server/DEFAULT>DHCPEnable
DhcpEnable command - Enable Virtual DHCP Server Function of SecureNAT Function
The command completed successfully.

いざ接続

MacからVPN接続したいときは以下の公式サイトが役立つ

Mac OS X からの接続方法 - SoftEther VPN プロジェクト

やったね、これでブラクラ貼っても逮捕されないね!(?

ポート開放

ルーターでポートの設定を行ってる場合は以下の2つを開放する必要がある。 UDPなので注意