ページ ツリー
メタデータの末尾にスキップ
メタデータの先頭に移動

 

LinuxでSoftEtherVPNサーバを作る為のメモです。いくつか設定が必要だったので、備忘録として書いておきます。

検証はESXi5.5上のDebian8.1.0_x64で行っています。Linuxカテゴリにありながら、ESXiの設定も微妙に必要になります。

LinuxKVMの場合は…いつか検証しますが多分bridgeの設定は不要と思われます。

ちなみに、この設定で2年は特に問題なく動いているので、おそらく問題ないと思います。

VPN構成

今回作成するVPNは、以下のようなネットワーク構成になります。

VPN-Network

Internetからの接続をDMZにあるVPNサーバで受付け、認証したユーザをLANへL2VPN接続します。

SoftEtherは高機能なので、VPNハブ上で更にネットワークを作成し、NATやStaticRouteでLANへ接続…と言ったことも出来ますが、

やはり個人で使う上ではL2-VPNが使い勝手が良いので、今回はL3-VPNは取り扱いません。

また、DMZが無ければサーバをLAN上に設置してもOKです。(個人のポリシーに合わせてください)

設定手順

ESXiのvSwitchでLAN側のvSwitchの無差別モードを有効にする

SoftEtherでVPNでL2通信を行う場合、promiscuous modeでL2-VPNが動くため、ESXiの設定でLAN側のvSwitchの「無差別モード」を許可する必要があります。

DMZ側は特に有効にする必要はありません。

VMにNICを割り当て、VMを作成する

そのまえに、注意点です。

LinuxでL2-VPNサーバを作成した場合の制限

Linux版SoftEtherではL2-VPNを作成する際に、bridgeを作成してそこにVPN用tapアダプタをアタッチする方法と、

NICをダイレクトL2VPNのインターフェースとして使用する方法があります。

後者のNICをダイレクトに使用する設定にした場合、LinuxKernelの仕様により、そのIPに対してVPN上から通信することが出来ません。

L2-VPN1

雑な絵ですが、この図のように、DMZ(192.168.2.10)で接続を受付け、LAN側へダイレクトにアタッチした場合、

VPN上から192.168.1.0/24へのアクセスは出来ますが、192.168.1.10に対してのみPingやSSHをすることが出来ません。

(192.168.2.10に対しても同様、LAN上にあるホスト→192.168.1.10への接続は可能)

tap0+ブリッジ構成

もしVPN上からVPNサーバ自体にアクセスしたい場合は、ブリッジを作成し、そこにVPN用のtapアダプタをアタッチします。

 

L2-VPN3

ブリッジインターフェースの表現が微妙なのは気にしない。

 

しかし、この方法だと自分の環境だとたまにtap0がbr0から外れ、

VPN接続は成功するもののLAN(192.168.1.0/24)への通信が出来なくなることがありました。

そのため、定期的にbr0を監視してブリッジから外れた場合brctrl -addif br0 tap0をするスクリプトを動かしていました。

※確認したところ、少なくともVer 4.18, Build 9570, rtm  x64では直っていました

また、tap0はVPNサーバが起動したタイミングで作成されるため、

ネットワークの起動タイミングによってはbr0に追加できなかったりなど、微妙に使い勝手がよくありませんでした。

 

Debian系であれば/etc/network/interfacesのpre-upの設定にvpnserver startを書き込み、

インターフェースの起動より前にVPNを立ち上げることにより解決しましたが、何かしらのダーティーハックが必要になることがあります。

物理サーバでNICを1つしか持っていない場合はどのみちブリッジを使う事になりますが…。

LAN 2NIC構成

よって、VMのようなNICをいくつでも自由に割り当てられる環境であれば、

VPN上からVPNサーバに対してアクセスする要件がある場合、個人的にはVMにLAN側のNICを2つ割り当てることをおすすめします。

そもそもLANからVPNサーバにアクセスする必要がなければ、下記図でいうeth1は不要です。

L2-VPN2

 

もしDMZを作らずにやる場合はeth0のみで良いですが、

VPN上からVPNサーバ(192.168.1.10)にアクセスしたいという場合はこんな感じになります。

L2-VPN4

 

どの方法がよいかは環境によるので、適宜選択してください。

 

Debianの設定をする

基本的な設定は省きます。

ただし、makeとgccが必要になるので、その二点だけインストールします。

apt-get install gcc make

 

SoftEtherのインストールをする

以下のページから、SoftEtherVPN→SoftEtherVPN Server→Linux→Intel x64を選択し、tarをダウンロードします。

http://www.softether-download.com/ja.aspx

 

 

ダウンロードしたら、ファイルをサーバへ転送し、tarを解凍します。

解凍するとvpnserverというディレクトリが出来るので、ディレクトリを移動し、makeを実行します。

makeを実行するとライセンス同意についてあれこれきかれるので、同意の上1を入力します。

root@dev-vpn01:~# ls
 softether-vpnserver-v4.18-9570-rtm-2015.07.26-linux-x64-64bit.tar.gz
root@dev-vpn01:~# tar xf softether-vpnserver-v4.18-9570-rtm-2015.07.26-linux-x64-64bit.tar.gz
root@dev-vpn01:~# ls
softether-vpnserver-v4.18-9570-rtm-2015.07.26-linux-x64-64bit.tar.gz   vpnserver

root@dev-vpn01:~# cd vpnserver/
root@dev-vpn01:~/vpnserver# make
--------------------------------------------------------------------
SoftEther VPN Server (Ver 4.18, Build 9570, Intel x64 / AMD64) for Linux Install Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.
--------------------------------------------------------------------
Do you want to read the License Agreement for this software ?
 1. Yes
 2. No
Please choose one of above number:
1 (エンター押下)
~~~

Did you read and understand the License Agreement ?
(If you couldn't read above text, Please read 'ReadMeFirst_License.txt'
 file with any text editor.)
 1. Yes
 2. No
Please choose one of above number:
1 (エンター押下)
Did you agree the License Agreement ?
1. Agree
2. Do Not Agree
Please choose one of above number:
1 (エンター押下)

~~~

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.
The command completed successfully.
--------------------------------------------------------------------
The preparation of SoftEther VPN Server is completed !

~~~

make[1]: Leaving directory '/root/vpnserver'

最後に「The preparation of SoftEther VPN Server is completed !」と出力されればOKです。

同ディレクトリにvpnserverというバイナリが出来上がっているので、VPNを立ち上げてみます。

root@dev-vpn01:~/vpnserver# ls -al
total 10440
drwxrwxrwx 5 root root    4096 Sep 10 03:28 .
drwxrwxrwt 9 root root    4096 Sep 10 03:28 ..
-rwxrwxrwx 1 root root    1881 Jul 26 15:27 Authors.txt
drwx------ 2 root root    4096 Sep 10 03:28 chain_certs
drwxrwxrwx 2 root root    4096 Sep 10 03:28 code
-rwxrwxrwx 1 root root 1293783 Jul 26 15:27 hamcore.se2
-rwxrwxrwx 1 root root    1533 Jul 26 15:27 .install.sh
-rw------- 1 root root     867 Sep 10 03:28 lang.config
drwxrwxrwx 2 root root    4096 Sep 10 03:28 lib
-rwxrwxrwx 1 root root    2138 Jul 26 15:27 Makefile
-rwxrwxrwx 1 root root   30801 Jul 26 15:27 ReadMeFirst_Important_Notices_cn.txt
-rwxrwxrwx 1 root root   36297 Jul 26 15:27 ReadMeFirst_Important_Notices_en.txt
-rwxrwxrwx 1 root root   50695 Jul 26 15:27 ReadMeFirst_Important_Notices_ja.txt
-rwxrwxrwx 1 root root   58932 Jul 26 15:27 ReadMeFirst_License.txt
-rwxr-xr-x 1 root root 4586032 Sep 10 03:28 vpncmd
-rwxr-xr-x 1 root root 4586200 Sep 10 03:28 vpnserver

root@dev-vpn01:~/vpnserver# ./vpnserver start
The SoftEther VPN Server service has been started.

これで、一旦VPNの立ち上げは完了です。

 

WindowsからVPN管理ツールで設定をする

急にWindowsが出てきましたが、VPNの設定にはこれが一番楽です。

Linuxのみで完結させたい場合は、vpncmdというプログラムがvpnserverと同じディレクトリに作成されるので、

このプログラムを通してVPNのネットワーク設定を行うことも出来ますが、非常に苦痛です。

http://www.softether-download.com/ja.aspx

このページから、SoftEtherVPN→SoftEtherVPN ServerManager for WindowsをDLします。

 

 

ダウンロードしたプログラムを実行すると、どれを入れるか訊いてくるので、一番下を選びます。

この画面の通り、WindowsにVPNサーバを入れたい場合もこのプログラムを実行すれば

Windows版SoftEtherVPNサーバがインストールされます。

インストールが完了すると、「SE-VPN サーバー管理 (ツール)」というのが出来上がるので、これを実行します。

 

実行したら、新しい接続をつくり、ホスト名に作成したVPNサーバのIPアドレスを入れます。

真っさらな状態にVPNを入れた状態であれば、ポート443で接続できます。

それ以外にも、992、1194、5555ポートでも接続できます。

接続後、初回時のみ管理用のパスワードを入力する必要があります。

次回からVPNの設定をするときにはこのときに入力したパスワードが必要になります。

接続完了後、管理コンソールが開いたら「ローカルブリッジの設定」を行います。

 

その後、どのブリッジに対してどのNICをブリッジするか選択します。

▼を押すと選択可能なリストが出てきます。

ここで、冒頭に述べたVPN上からVPNサーバに対してのアクセスの問題が出てきます。

サーバに対してアクセスする必要がなければ特に気にする必要はありませんが、環境に応じて選択してください。

また、eth1を選択しても動作エラーとなる場合は、NICが上がっていないので

ifconfig eth1 up

としてNICを作動させてください。IPを割り当てる必要はありません。

 

新しいtapデバイスとのブリッジ接続を作成する場合のみ、このあとブリッジを作成する必要があります。

 

接続ユーザ作成

ブリッジの割り当てが完了したら、仮想ハブをダブルクリックして管理画面に入ります。

ユーザー名と、パスワードの指定をしたらOKを押します。

OKを押したら、Windowsクライアントなどから接続できるようになります。

VPN接続については省略します

 

ちなみに、オープンソース版のSEだと鍵認証、ドメイン認証は使用できません。

なんでも製品として発売しているSEに含まれるモジュールの権利が販売元にあり実装できていないとか。

いずれ下りてくるという話ですが、時期がはっきりしないので待つしかありません。

 

Linux自動起動の設定

ここまで来たら、おそらく問題ないところまで動いていると思うので、再起動時に自動でVPNが立ち上がるように設定します。

 

SoftEtherVPNの自動起動設定

Initスクリプトなどを書いても良いですが、一番楽なのはcorntabに

@reboot /root/vpnserver/vpnserver start

と書いてしまうことです。

 

NICにIPを割り当てないで起動する方法

Debianの場合、

/etc/network/interfaces

に以下のように書きます。

auto eth1
iface eth1 inet manual

tap+ブリッジでVPN作った場合の自動起動

自分の場合は以下のように書いていました。

pre-upの項でvpnserverを起動するので、この際にはcrontabの設定は不要です。

 

/etc/network/interfaces

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.10
        netmask 255.255.255.0
        gateway 192.168.1.1
        bridge_ports eth0 tap_0
        pre-up /root/vpnserver/vpnserver start

systremdの場合、若干起動が遅くなります…。

 

おまけ:tapと直にNICを割り当てた場合の差について

 

VPNサーバのあるVMホストと接続用Windowsクライアントが10Gで繋がっている場合、大体これくらいはでました。

ただ、差は殆ど無いものの、ほんの少しtapで作った方が早いという傾向になりました。

 

 

以下の構成時のスループット

L2-VPN2

 

 

以下の構成時のスループット

L2-VPN3

 

差としては1%位でしょうか…。

 

 

 

Windowsクライアントでサーバ作成時にはNICをダイレクトに割り当ててもVPN上からVPNサーバに対して接続可能です。

コメントを書く…