Lapidemが勤務する組織の最外層にはファイアウォールがあり、ファイアーウォール内のLapidemの部所には、VLANが割り振られている。そのVLAN内に、更にファイアーウォールを置き、個人のプライベートネットワークを構築している。最外層のファイアーウォールを越えるVPN接続を組織が用意してくれているが、正直使い難い。

今回は、インターネット上のVPSにVPNサーバを構築し、ファイアーウォール2枚を貫通するVPN接続を設定した。組織内に固定のプラベートIPを設定する(申請する)必要がない。ただし、個人のプライベートネットワークのルータには固定IPを申請して使っているが、以下の方法では理論的にはルータに固定IPは必要ない筈である。

VPNサーバを設置する以上、インターネット上に固定IPがなければ意味をなさないが、格安のVPSをレンタルし、固定IPアドレスを取得した。

自宅のファイアーウォール内にも、同様にVPN接続することが可能であり、海外から自宅VPNに接続し、自宅ルータからインターネットにアクセスすることが可能となる(Hulu等に海外からアクセスできる。VPS上のVPNからでも良さそうであるが、現在のHuluはVPN経由のアクセスを許可していないようだ)。

用意したもの

  • SoftEther VPN(Server, Bridge, Server Manager)
  • VPS(Debian 9.8, ConoHa, 1 core, Mem 512MB, SSD 20GB, 630円/月):VPN server
  • Firewall内サーバ(Linux)(ubuntu 18.04, Let’s note, CF-R5, CPU 1.06GHz, Mem 512MB) : VPN Bridge
  • VPN Client(Mac: Mojave, iPhone: iOS12.2, iPad Pro: iOS12.2)

SoftEther VPNを使った理由

  • iOSおよびMacで組み込みのL2TP/IPsecサーバを構築できるため、VPNクライアンとを別途インストール必要がない。
  • SSLプロトコルによりVPNトンネルを確立するため、HTTPSを通す通常のファイアーウォールを通過するため、ファイアーウォールの管理者に許可を得ることなく(管理者に知られることなく)VPNを使える(管理者にとっては脅威ですが^^;)。

設置手順

VPNサーバの設置

  • こちらの手順に従って、行いました。

VPNサーバー構築(SoftEther VPN Server)

  • vpn_server.configの設定を↑では行っていますが、Lapidemはportをそのまま全て開けています。port 443を無効化しても動作しますが、Firewallがhttp, httpsしか通過させないのであれば、無効化はできません。今時、httpsでないweb serverを立てる気にはならないので、web サーバとVPN serverの両立は諦めています。
  • VPN serverのUDP 500番ポートとUDP4500番ポートは空いている必要があります。今回は、VPN serverをFirewall内に設置していないので、問題ありません。
  • VPN bridgeは、UDP 500とUDP4500を使わないようですので、Firewall内に置いても問題ありません。
root@vps:~# mkdir /usr/local/vpnserver
root@vps:~# cd /usr/local/vpnserver
root@vps:/usr/local/vpnserver# tar xvzf softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz
root@vps:/usr/local/vpnserver# make

... 中略

root@vps:/usr/local/vpnserver# ./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>

 
  • 起動スクリプト作成
root@vps:~# vi /etc/systemd/system/vpnserver.service 
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

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

[Install]
WantedBy=multi-user.target
root@vps:~# systemctl enable vpnserver.service

ログは、それなりに吐出されるので、cronで処理します。

root@vps:~# vi /etc/cron.daily/vpnserver 
#!/bin/sh
# 30日以前のログを削除
find /usr/local/vpnserver/*_log -name '*.log' -mtime +30 -delete

VPN Bridgeの設置

  • VPN serverとほぼ同じであるため、省略します。
  • VPN Bridgeは、32bit マシンのため、32bit版をインストールしています。
    • softether-vpnbridge-v4.29-9680-rtm-2019.02.28-linux-x86-32bit.tar.gz
  • ‘bridge’を’server’に読み替えて、同じ手順でインストールします。

ポートの確認

VPN Serverのport確認
root@vps:~# lsof -i -P
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
<中略>
vpnserver 11233     root   48u  IPv4 1620452      0t0  TCP *:992 (LISTEN)
vpnserver 11233     root   50u  IPv6 1620454      0t0  TCP *:992 (LISTEN)
vpnserver 11233     root   52u  IPv4 1620456      0t0  TCP *:1194 (LISTEN)
vpnserver 11233     root   54u  IPv6 1620458      0t0  TCP *:1194 (LISTEN)
vpnserver 11233     root   56u  IPv4 1620460      0t0  TCP *:5555 (LISTEN)
vpnserver 11233     root   58u  IPv6 1620462      0t0  TCP *:5555 (LISTEN)
vpnserver 11233     root   76u  IPv4 1620520      0t0  UDP vpn_server:500
vpnserver 11233     root   77u  IPv4 1620521      0t0  UDP vpn_server:4500
vpnserver 11233     root   84u  IPv4 1620524      0t0  UDP localhost:500
vpnserver 11233     root   85u  IPv4 1620525      0t0  UDP localhost:4500
VPN Bridgeのポート確認
root@bridge:~# lsof -i -P
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
<中略>
vpnbridge  6713     root   27u  IPv4 2763037      0t0  TCP *:443 (LISTEN)
vpnbridge  6713     root   30u  IPv6 2763043      0t0  TCP *:443 (LISTEN)
vpnbridge  6713     root   32u  IPv4 2763045      0t0  TCP *:992 (LISTEN)
vpnbridge  6713     root   34u  IPv6 2763047      0t0  TCP *:992 (LISTEN)
vpnbridge  6713     root   36u  IPv4 2763049      0t0  TCP *:1194 (LISTEN)
vpnbridge  6713     root   38u  IPv6 2763051      0t0  TCP *:1194 (LISTEN)
vpnbridge  6713     root   40u  IPv4 2763053      0t0  TCP *:5555 (LISTEN)
vpnbridge  6713     root   42u  IPv6 2763055      0t0  TCP *:5555 (LISTEN)

SoftEther VPN Server Managerの設置

vpncmdでも管理はできますが、Server Managerで管理するのが楽です。

  • New Setting -> Setting Name, Host Name, Password を設定
  • 新しく作成したホストに”Connect”をクリックしてアクセスします。
  • VPN Serverの設定画面が起動しますので、各種設定をここから行います。行う設定は、
    1. IPsec/L2TP Setting: 事前共有鍵(PSK)の設定等を行います。
    2. Virtual Hub Setting:
      • User登録
      • 【optional】SecureNATの設定(VPN ServerのDHCPを使いたい時のみ):接続先のネットワークのDHCPクライアントのgateway, DNSから変えたい時など。
  • Bridgeでは、Local Bridge SettingとCascade connectionsの設定を行います。
    1. Local Bridge Setting
    2. Cascade Connections


IPsec/L2TP Setting

  • Managerのメイン画面の”IPsec/L2TP”ボタンをクリックます。
  • Enable L2TP Server Function(L2TP over IPsec)↓をチェックします。
  • IPsec Pre-Shared Key↓を設定します。
  • OKをクリック。元の画面に戻ります。

Virtural Hub Setting

User登録

  • 次に”Manage Virtual Hub”↑をクリックして、Vitual Hubの設定をします。
  • Virtual hub の設定画面↓を呼び出します。
  • “Manage Users”をクリックしてユーザー登録を行います。
  • ‘New’をクリックし、User Name、Passwordの設定を行います。

SecureNATの設定(Optional)

  • “Virtual NAT and Virtual DHCP Server (SecureNAT)”↓をクリックします。
  • “SecureNAT Configuration”↓で設定した後に、”Enable SecureNAT”をクリックします。
  • Virtual Host’s Network Interface Settings
    • 接続先のBridgeと接続するIPアドレスを設定します。
    • この場合には、192.168.1.0/24のプライベートネットワークがFirewall内にあるので、そこで使われていないアドレスを割り当てています。
  • Use Virtual DHCP Server Functionsにチェックを入れます。
    • 接続先のネットワークで割り当てられていないIPアドレスを割り当てます。
  • 接続先のプライベートネットワークのDefault GatewayとDNSを設定します。


Bridgeの設定: Local Bridge Setting

  • “Local Bridge Setting”をクリックしてLocal Bridgeと接続します。
  • Virtual Hubを選び、LAN Adapterを選択し、”Create Local Bridge”をクリックします。

Bridgeの設定:Cascade Connections

‘Manage Cascade Connections’をクリックします。

  • ‘New’をクリックして、VPN serverとの接続を設定します。
  • Setting Nameを入力
  • Host NameでVPN serverとポートを指定すると、Virtual Hub NameにVPN serverで設定したVirtual Hubを参照できるようになるので、接続したいVPN serverのVirtual Hubを選択します。
  • 接続先のVPNサーバで設定したユーザとパスワードを設定して、OKをクリック。

StatusがOnline(Established)となれば、接続完了です。

接続がうまく行かない時には、logを参照しながら設定を行ってください。Lapidemは、以下のようなスクリプトでログを監視しています。

#!/bin/bash
DATESTR=`date +%Y%m%d`
LOGNAME='vpn_'$DATESTR'.log'
LOG='/usr/local/vpnserver/server_log/'$LOGNAME
sudo killall tail
sudo tail -f $LOG &

問題点

  • VPN Bridge自体には、直接VPNクライアントからアクセスすることが出来ない。従って、Firewall内のVPN bridgeの制御のためには、Firewall内にもう一台のサーバを置き、そのサーバを経由して、VPN Bridgeを制御する必要がある。
  • 実際には、もう一台のサーバにもBridgeを設置し、もうひとつのVPN接続をして他方のVPN Bridgeを制御できるようにしている。