SoftEther VPN ServerをLinux上で使ってみる

長年お世話になっているPacketix VPNですが、全く同じ作りでSoftEther VPN というソフトがフリーソフトで提供されています。少し機能に差があるそうですが、難しい事は良く分かりません。とりあえず、VPNしたい、ネットワークを暗号化して接続したいという場合にはほとんど違いがないのだと思います。

しかもOSもフリーで利用できるLinuxに対応しています。

http://ja.softether.org/

ちなみに、当初はStrech 64bitに、vpnserver64bi版のインストールを試みましたが、
softether-vpnserver-v4.18-9570-rtm-2015.07.26-linux-x64-64bit.tar.gz

をダウンロードしmakeするも

と表示され、パラメータを変えつつ試したが力尽きました。

そこで、気を取り直してStrech32bitでインストールし直しました。

Makeできる環境を準備します。

できた

vpnserver

フォルダに入り、

 

# mv vpnserver/ /usr/local/

root@PacketixSmart:/usr/local/vpnserver# chmod 600 *
root@PacketixSmart:/usr/local/vpnserver# chmod 700 vpncmd
root@PacketixSmart:/usr/local/vpnserver# chmod 700 vpnserver

起動スクリプトを作成します。

/etc/init.d に vpnserverというファイルを作成

 

root@PacketixSmart:/etc/init.d# apt-get install insserv

root@PacketixSmart:/etc/init.d# insserv vpnserver

root@PacketixSmart:/etc/init.d# ./vpnserver start
The SoftEther VPN Server service has been started.

VPNサーバ管理マネージャを利用して設定します。私はこの部分はWindowsクライアントから行っています。

こちらをダウンロードしてインストール
http://jp.softether-download.com/files/softether/v4.20-9608-rtm-2016.04.17-tree/Windows/SoftEther_VPN_Server_and_VPN_Bridge/softether-vpnserver_vpnbridge-v4.20-9608-rtm-2016.04.17-windows-x86_x64-intel.exe

SoftEther VPNサーバ管理マネージャ(管理ツールのみ)
をインストールします。

vpnserver02.jpg

新しい接続先設定から新しいサーバを指定します。

vpnserver03.jpg
vpnserver01.jpg

初回起動時はパスワードを設定するように求められます。

vpnserver04.jpg

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

vpnserver05.jpg

携帯電話からL2TPでVPNを張ってDMZの中に入る事ができるようになります。

iPhoneでも、iPadでも、Androidでも接続可能です。内部で公開しているwebサーバをvpnサーバ越しに公開するという事を実現しました。

イメージ的にはこんな感じです。核になるのはSecureNAT機能になります。DHCP機能でスマートフォンにIPアドレスを割り当てる事ができ、パケットをSecureNATで受け付けた外側のppp0のIPアドレスにNATし、LAN内にパケットを回す事ができます。

もしかしたら、eth1のアドレスにSecureNATできるのではないかとも思ったのですが、ちょっと実現できずでした。

https://www.softether.jp/1-product/11-vpn/11-tutorial/3.VPN_for_Mobile/1.iPhone_and_Android

こちらを参考にしました。

細かい設定については上記内容をサイトを参考にされるのが良いかと思います。

この中でもSecure NATについてはかなり強力な機能。使える機能だと思います。これさえあれば、LAN何にパケットを招き入れるのも簡単になります。

私どもの環境ではブリッジ設定なども考えられたのですが、SecureNATでIPアドレスをマスカレードし、中に入れ込むという設定にしました。

詳細はこちらで。

https://ja.softether.org/4-docs/1-manual/3/3.7

ゲートウェイになっているので、ここでファイヤーウォールに穴をあけておかないとパケットが入ってきません。L2TPで利用するのが udp 500,4500ポートです。こちらを接続可能な状態にします。

ちなみにiptablesを触って、次回再起動時に有効にしたい場合は

としておく

スマートフォンからSoftether VPN Serverに接続ができるようになると、SecureNAT機能により、Softether VPN Serverで受け付けたNICに割り振っているIPアドレスにNATする事ができます。

今回ppp0で受け付けたので、NATさらたIPパケットのソースアドレスは、ppp0のアドレスになっていました。ここに気づくのに時間がかかりました。てっきり、eth1になるのではないかと思っていたのですが、tcpdumpすると、外側のppp0にNATされているのが分かりました。

そこで、アクセスさせたいサーバに ppp0からきたパケットはeth1に戻るようroute addしました。こうする事で、アクセスさせたいサーバに接続できるようになりました。

スマホでの接続は全く問題ないのですが、パソコンでVPN Clientから接続するとこんなメッセージが頻繁に出ました。

2017-12-04 15:13:14.819 コネクション “CID-80” は理由 “VPN セッションの通信がタイムアウトしました。クライアントから VPN Server への接続が切断された可能性があります。” (コード 13) で終了しました。

接続完了するものの、すぐにVPNセッションが切れて、このエラーメッセージが表示されます。

インタネットセッションを張っているルータ(Debian Jennie)に設定しました。LAN内からのアクセスでは全く問題でないのにWAN側からのセッションだけこのようなエラーが表示されます。

iptablesの設定を見直し、問題ない。ppp0側にきたpacketをeth0側にpreroutingしてみたりと、設定を色々試してみました。

解決!! 結局Pakcetixクライアントマネージャにて

UDP高速化機能を無効にするのチェックを入れたら、安定して接続できるようになりました。

UDP高速化機能について

https://www.softether.jp/1-product/11-vpn/41-new/3

 

VPN Server と VPN Client / Bridge との間では、最初に HTTPS ベースで VPN 接続が確立されます。VPN 接続が一端確立されると、両者は互いに UDP パケットを物理的に送り合い、UDP による疎通が可能であるかどうかを検証します。
もし UDP による疎通が可能であることが検出された場合は、それ以降は、HTTPS トンネルはキープアライブの目的でのみ使用され、VPN 通信のペイロードは UDP 経由で送受信されるようになります。

ユーザ認証の方法のうち、「証明書認証」と「外部サーバ認証」はオープンソース版には搭載がありませんでした。ちゃんと差別化されてるんだなぁ、と改めて感心しました。ほとんど機能に違いがなければ、オープンソース版を使っていく事にしようと思いましたが、電子証明書認証をメインで利用していた私にとっては、正規のサーバを購入する意味で動機づけができました。

1件のコメント

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です