クラウド上のUbuntu64bitにPacketixVPNServerをインストール

クラウド上のサーバをプライベートに

クラウド上のサーバを安全なプライベート空間に置きたい時にVPNの出番になります。これを最安で構築しようと思ったら、Cloudnに、フリーのPacketixサーバをインストールをするのがお得ではないでしょうか。

月額450円のクラウドnに、フリーのPacketix VPNサーバをインストールし、最安構成のVPN クラウドビジネスサーバを構築してしまします。

もしも、文中の記載の中で間違いなどを見つけた方はぜひお知らせいただきたくお願いいたします。

PacketixVPNの設定

apt-get install build-essential

Cloudn Ubuntu

dmesg |less
[    0.000000] Linux version 4.15.0-39-generic (buildd@lgw01-amd64-054) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #42-Ubuntu SMP Tue Oct 23 15:48:01 UTC 2018 (Ubuntu 4.15.0-39.42-generic 4.15.18)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-39-generic root=/dev/mapper/rootvg-root_1 ro
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] Disabled fast string operations
[    0.000000] x86/fpu: x87 FPU will use FXSAVE
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009dbff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009dc00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffcfff] usable
[    0.000000] BIOS-e820: [mem 0x000000001fffd000-0x000000001fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffbc000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.4 present.
[    0.000000] DMI: Red Hat KVM, BIOS 0.5.1 01/01/2007
[    0.000000] Hypervisor detected: KVM
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x1fffd max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 0000E0000000 mask 3FFFE0000000 uncachable
[    0.000000]   1 disabled
[    0.000000]   2 disabled
[    0.000000]   3 disabled
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] x86/PAT: PAT not supported by CPU.
[    0.000000] x86/PAT: Configuration [0-7]: WB  WT  UC- UC  WB  WT  UC- UC

PacketixVPNサーバをダウンロード

こちらからダウンロード

該当CPUは、

OS: Linux, CPU: Intel x64 / AMD64 (64bit)

ダウンロードしたファイルを解凍

tar -xvvzf softether-vpnserver-v4.25-9656-rtm-2018.01.15-linux-x64-64bit.tar.gz

makeすると、

collect2: error: ld returned 1 exit status
Makefile:18: recipe for target 'i_read_and_agree_the_license_agreement' failed
make[1]: *** [i_read_and_agree_the_license_agreement] Error 1
make[1]: Leaving directory '/home/hanako/vpnserver'

エラーが出て先に進めない

ソースコンパイル版で挑戦

仕方がないのでやり方を変えてソースコンパイルする

参照

# git clone https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git

ダウンロードしたソースファイルフォルダーで

SoftEtherVPN_Stable# ./configure
---------------------------------------------------------------------
SoftEther VPN for Unix

Copyright (c) SoftEther VPN Project at University of Tsukuba, Japan.
Copyright (c) Daiyuu Nobori. All Rights Reserved.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.

Read and understand README.TXT, LICENSE.TXT and WARNING.TXT before use.
---------------------------------------------------------------------

Welcome to the corner-cutting configure script !

The Makefile is generated. Run 'make' to build SoftEther VPN.

必要パッケージをインストール

apt-get update
# apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev libffi-dev libncurses5-dev

いざmake

make
省略
make install
省略
--------------------------------------------------------------------
Installation completed successfully.

Execute 'vpnserver start' to run the SoftEther VPN Server background service.
Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service.
Execute 'vpnclient start' to run the SoftEther VPN Client background service.
Execute 'vpncmd' to run SoftEther VPN Command-Line Utility to configure VPN Server, VPN Bridge or VPN Client.
--------------------------------------------------------------------

VPN Server起動確認

# vpnserver start
The SoftEther VPN Server service has been started.

ファイヤーウォール設定

Cloudn側で、443ポートを開けます

vpnサーバ設定

私はWindowsパソコンから、PacketixVPNの管理をしています。サーバ上のコンソールからテキストファイルをいじるような設定方法ではなく、管理用PCに管理ソフトをインストールしてネットワーク上にあるサーバを指定して設定する事が可能です。

ホスト名だけ設定すれば、接続でき、初回接続時にパスワードを決定します。

リモートアクセスVPNサーバを構築します

フリーなのにDDNSサーバを利用させてもらえるという太っ腹。すごいなぁ。SoftEtherって思います。

内部サーバにアクセスさせるためには、ローカルブリッジを設定します。ただし、SecureNAT機能を利用したいのなら、この設定はやっちゃダメです。後述しますが、CPU使用率が異常に高くなり

自動起動

起動スクリプトを仕込みます

root@Cloudn01:/etc/init.d# cat 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 Server
# Description: SoftEther VPN Server
### END INIT INFO

DAEMON=/usr/bin/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

アクセス権を変更

root@Cloudn01:/etc/init.d# chmod 755 vpnserver

自動起動するようRunLeverの調整

insservしようと思ったら、なんだかUbuntu18で出てこないので、update-rc.dを利用しました。

root@Cloudn01:/etc/init.d# update-rc.d vpnserver defaults
root@Cloudn01:/etc/init.d# ls -l /etc/rc*.d/*vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc0.d/K01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc1.d/K01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc2.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc3.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc4.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc5.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 19 Dec  5 09:55 /etc/rc6.d/K01vpnserver -> ../init.d/vpnserver

ローカルブリッジ

新しいtapデバイスを作成して、ローカルブリッジ接続を行うと、インストールしたサーバ内のサービスにアクセスさせる事ができるようになります。

以下の設定により tap_vpn01 が作成されます

参考 tapデバイスは、イーサネットデバイスをシミュレートする事ができます。仮想的にLANデバイスを作成するといっていいのでしょうか。

この設定を行う事でLinuxでもtapデバイスがNICとして扱われるので、VPN経由でのサーバ内部サービスと通信が可能になります。

tapデバイスはNICとしてIPアドレスを割り振る事が可能で、以下のように設定してIPアドレスを持たせる事ができます。

#vi /etc/network/interfaces
The VPN network interface
auto tap_vpn01
iface tap_vpn01 inet static
   address 172.21.1.1/24

#ifup tap_vpn01

このように設定する事で、VM1台にvpnserverをインストールし、その内部サービスをvpn経由でのみアクセス可能といった設定を行う事が可能となります。

SecureNAT

今回、仮想サーバ自体もVPNに参加させ、VPN経由でそのサーバにアクセスさせたいのですが、どうもLinuxではこのSecureNAT機能だけではvpnserverのサーバサービスにはアクセスきないのではないようです。

もし、サーバーサービスにアクセスさせたいのであれば、SecureNATした上でローカルのNICにIPアドレスを一つ割り当てそちらのIPアドレスに接続しなければなりません。

この制限はLinuxの性質によるものかと。

参照 仮想NATおよび仮想DHCP

PacketixVPN ServerのSecureNAT機能マニュアルはここ

この設定により、楽勝でVPN経由のサーバ提供が可能になります。

デフォルトゲートウェイ、DNSサーバアドレスは設定しなくても大丈夫でが、デフォルトゲートウェイを設定すると、vpnserverへの接続は物理NICから、それ以外の通信はこちらで設定したデフォルトゲートウェイからという制御が可能です。

vpnserverをvpnクライアントに公開したければ、この設定をしておくと、クライアントはvpn接続するだけでVPN側のIPアドレスが取得でき、さらにその後のvpnを通したい通信はクライアント側では意識しなくてもvpnを通ってくれることになります。

す。なお、一度設定をして、やっぱり削除といった操作を行うと、ネットワーク通信速度が遅くなることがあるので、vpnserver側を一度リスタートした方が良いです。

後はクライアントでvpn接続してしまえば、192.168.30.1のサーバと疎通可能です。

Microsoft Windows [Version 10.0.17134.471]
(c) 2018 Microsoft Corporation. All rights reserved.

ping 192.168.30.1

192.168.30.1 に ping を送信しています 32 バイトのデータ:
192.168.30.1 からの応答: バイト数 =32 時間 =19ms TTL=128
192.168.30.1 からの応答: バイト数 =32 時間 =47ms TTL=128
192.168.30.1 からの応答: バイト数 =32 時間 =17ms TTL=128
192.168.30.1 からの応答: バイト数 =32 時間 =18ms TTL=128

192.168.30.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 17ms、最大 = 47ms、平均 = 25ms

ただし、この設定ではvpnserver内部のサービスにはアクセスできません。ping疎通で通信できた!と喜んだのも束の間で、vpnserverをホストとするport番号への接続などはできませんでした。

SecureNAT(仮想NAT)で、その内部サービスにアクセスさせたい場合はもうひと手間かけます。

ip alias機能を利用して、VMホストのNICにIPアドレスをもう一つ割り振ります。

#ifconfig ens3:1 172.21.1.1

参考 ip aliasの削除 ifconfig ens3:1 down

この事により、ホスト内部のサービスにアクセス可能になります。

172.21.1.1 からの応答: バイト数 =32 時間 =17ms TTL=63
172.21.1.1 からの応答: バイト数 =32 時間 =22ms TTL=63
172.21.1.1 からの応答: バイト数 =32 時間 =19ms TTL=63
172.21.1.1 からの応答: バイト数 =32 時間 =19ms TTL=63
172.21.1.1 からの応答: バイト数 =32 時間 =19ms TTL=63

172.21.1.1 の ping 統計:
    パケット数: 送信 = 840、受信 = 840、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 17ms、最大 = 287ms、平均 = 20ms

注意

172.21.1.1 へのアクセスはNATを通して接続されます。送信元IPアドレスは、ens3(VM上のNICのIPアドレス)となります。

なので、どのホストからアクセスがあったのかは把握しづらいという事になりますね。私はVM上に構築したDBサーバをVPNを通してアクセスさせたいと思っており、何かあった時はログからどのホストからの通信だという事を特定したいので、仮想NATではなくローカルブリッジ接続を採用しようと思います。

また、仮想NATした方が若干負荷は高めになるのかなという気がします。1クライアント接続中で、仮想NATの場合はCPU使用率1.3%程度、ローカルブリッジ接続の場合は1%を切る程度でした。

SecureNATとローカルブリッジは共存できない

SecureNAT機能を利用するようでしたら、ローカルブリッジを組まないようにした方が良いです。パケットが回ってしまってうようです。

VPNFAQ005. VPN Server のプロセスの CPU 使用率が何もしていないのに異常に高くなる

この症状に悩まされました。

SSHのシェル操作もめちゃくちゃ遅いし。なんでだろうと。クラウドnのCPU Usageを見ても100を超えたグラフになっています。

問題はこれでした。SecureNAT機能と合わせてローカルブリッジも設定されていた事でした。試しにローカルブリッジを削除しました。

削除後はこんな感じです。Packetixを諦めなくてはいけないかと思いましたが、これなら利用できそうです。

Pingが落ちる

クライアントからPing試験をし、時々PingがTimeOutする事を確認しました。

172.21.1.1へのPing状況(34%の損失)

172.21.1.1 からの応答: バイト数 =32 時間 =18ms TTL=64
要求がタイムアウトしました。
要求がタイムアウトしました。
172.21.1.1 からの応答: バイト数 =32 時間 =18ms TTL=64

172.21.1.1 の ping 統計:
    パケット数: 送信 = 1224、受信 = 807、損失 = 417 (34% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 16ms、最大 = 2019ms、平均 = 23ms

UDP の優先度が低いルーターがあると、この現象が起きるそうです。これを回避するためには2つの設定があり、クライアントの接続設定でNAT-T無効とUDP高速化無効にします。使用環境によりそれぞれ症状は変わります。

UDP高速化無効

私の認識ですと、このUDP_高速化機能を無効にするのチェックは、Linuxをvpnserverにする時には必須です。vpn接続自体が不安定となり、この設定を行わないとvpn接続が不意に切断されたり、接続できなくなったりします。

NAT-T無効

vpnserverをインストールしたホストをvpn接続で公開したい場合に必要です。間にUDPを優先しないルータが挟まると、Pingがボロボロ落ちます。

NAT-T無効設定は、サーバ側のコンフィグファイルをいじる事でも設定可能です。これをおこなっておけばクライアント1台1台で同じ設定をする必要はありません。

bool DisableNatTraversal true

この設定を行う事でPingが落ちる事は無くなりました。

172.21.1.1 からの応答: バイト数 =32 時間 =17ms TTL=64
172.21.1.1 からの応答: バイト数 =32 時間 =19ms TTL=64
172.21.1.1 からの応答: バイト数 =32 時間 =15ms TTL=64
172.21.1.1 からの応答: バイト数 =32 時間 =15ms TTL=64

172.21.1.1 の ping 統計:
パケット数: 送信 = 4383、受信 = 4383、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 14ms、最大 = 277ms、平均 = 17ms

関連コンテンツ