LinuxでSoftEtherVPNサーバを作る為のメモです。いくつか設定が必要だったので、備忘録として書いておきます。
検証はESXi5.5のDebian上で行っています。Linuxカテゴリにありながら、ESXiの設定も微妙に必要になります。
LinuxKVMの場合は…いつか検証しますが多分bridgeの設定は不要と思われます。
ちなみに、この設定で2年は特に問題なく動いているので、おそらく問題ないと思います。
VPN構成
今回作成するVPNは、以下のようなネットワーク構成になります。
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上から通信することが出来ません。
雑な絵ですが、この図のように、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アダプタをアタッチします。
ブリッジインターフェースの表現が微妙なのは気にしない。
しかし、この方法だと自分の環境だとたまに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は不要です。
もしDMZを作らずにやる場合はeth0のみで良いですが、
VPN上からVPNサーバ(192.168.1.10)にアクセスしたいという場合はこんな感じになります。
どの方法がよいかは環境によるので、適宜選択してください。
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で作った方が早いという傾向になりました。
以下の構成時のスループット
以下の構成時のスループット
差としては1%位でしょうか…。
Related articles