スキップしてメイン コンテンツに移動

VyOS 1.1.1とSoftEther VPN Serverで自宅VPN最速設定

VyOS 1.1.1とSoftEther VPN Serverで自宅VPN最速設定

あけましておめでとうございます。本年もよろしくお願いします。
のっけから濃い話題で2015を始めたいと思います。

個人用途でWindowsファイル共有(CIFS)をサクサク使いたい

以前VyOSでPPTPによるリモートアクセスVPNを構築したが、実際のところ操作が重く、もっさりで大変だった。
そこで他のプロトコルではどうかとアレコレ試してみたが却ってスループットは低下してしまった。堅牢性が上がっているので当然かもしれない。
しかし個人で考えれば、ハードなセキュリティよりもスループット、レスポンスに重点を置きたいと考えるのは当然だろう。
最終的に一番高速だったのはSoftEther VPN Serverだった。ただし、プロトコルはSoftEther、セッション数は32(最大)、UDP高速化機能という条件でのみ実現された。
今回はその方法を紹介したいと思う。

VPNのスループットを上げるには

VPNのスループットを特殊なネットワーク、機器とかに頼らず速くしたい。SoftEtherのプロトコルはマルチコネクションで接続することが可能で、最大32コネクション接続が可能。
一般的な光回線では1コネクション当たりのスループットが良くて200Mbps程度だと思う。しかし、マルチとなると一気に帯域が太くなる。32コネクションを1つのVPNトンネルとして形成するので転送自体はかなり上がる。

VPNでWindowsファイル共有(CIFS)を快適に使うには

別の視点から見てみる。私のVPNでの使用主目的がファイル共有である。これがVPNととても相性が悪く、驚くほどの遅さになってしまうこともある。原因はSMBプロトコルにあって、過剰な通信を繰り返す事からそうなるようだ。(例えば、1つのExcelファイルを開くのに4000回通信を行っているらしい)
WANを経由したら当然大きな遅延が発生する。帯域がどんなに太くても、Ackが返ってくるまではどうやっても待機にならざるを得ない。1つの通信を行う毎に遅延が大きく伸し掛かってくる。これがCIFSの速度が遅い理由だ。
この問題もSoftEtherで解決できる。UDP高速化機能を使用することで低遅延を実現できる。UDPでトンネリングを行うため、トンネル側の通信に3ハンドシェイクをしなくて済むからだ。これにより低遅延なVPNが実現可能となった。
SoftEtherの資料によればTCP接続に比べ、UDPでは倍のスループットが出るらしい。

じゃあSoftEther VPNでどう実現するの?

実は、UDP(WAN)高速化機能を実現するためには条件がある。
  • NAT外にSoftEtherを配置すること(ルーター内ではダメ)
    (使用するUDPポートがダイナミックに変わるため、ポートフォワードは無理)

そこで白羽の矢が立ったのがVyOSである。
VyOSにSoftEtherをインストールしてしまえば簡単にUDP高速化機能が使用できる。
その設定方法を次にまとめる。

実装の前に

まずはじめに私はLinuxをほとんど触っておらず、過去Unixをかじった程度の知識しかありません。なので間違っている可能性も高いです。
参考:hige blogさんの記事を参考にしました。感謝。

Hyper-Vの設定

Hyper-VサーバーにNICを3枚構成する。(PPPoE用、LAN用、SoftEtherBridge用)
SoftEther側はローカルブリッジで実現するため、1つ用意する。
ローカルブリッジ用のNICは、HYPER-Vの設定でMACアドレスのスプーフィングを有効にするをチェックしておく。

VyOSにSoftEtherをインストールする

1.VyOSの開発環境を設定する

set system package repository squeeze components 'main contrib non-free'
set system package repository squeeze distribution 'squeeze'
set system package repository squeeze url 'http://ftp.jp.debian.org/debian/' 
sudo aptitude update
sudo aptitude install build-essential
>Accept this solution? [Y/n/q/?] n
>Accept this solution? [Y/n/q/?] y
>Do you want to continue? [Y/n/?] y

2.SoftEtherのダウンロードURLを確認する

ダウンロードセンターからlinuxの64bit版を選択し、リンクのURLを取得しておく。

3.VyOSにインストールする

wget http://jp.softether-download.com/files/softether/v4.12-9514-beta-2014.11.17-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.12-9514-beta-2014.11.17-linux-x64-64bit.tar.gz ※バージョンによってURLが変わります。
tar xzvf softether-vpnserver-v4.12-9514-beta-2014.11.17-linux-x64-64bit.tar.gz
cd vpnserver/
make
全て1を選択
cd ..
sudo mv vpnserver /usr/local/
sudo chown -R root:staff /usr/local/vpnserver/
sudo chmod 600 /usr/local/vpnserver/*
sudo chmod 700 /usr/local/vpnserver/vpncmd
sudo chmod 700 /usr/local/vpnserver/vpnserver

4.スタートアップスクリプトを配置

hige blogさんのところにスクリプトがあるので省略。
sudo update-rc.d /etc/init.d/vpnserver default

5.アクセス制限の設定

/usr/local/vpnserver/adminip.txtを作成し、管理コンソールがアクセス可能なIPリストを記述する。
例)
192.168.200.10
127.0.0.1

6.サービス開始

sudo /etc/init.d/vpnserver start

 7.Windows側でVPNサーバー管理ツールを起動

以下、管理ツールで設定可能

検証結果

PPTPが60Mbps程度のスループットだったのに対して、SoftEtherでは80Mbps程度に伸びた。また、マルチコネクションのお陰でエクスプローラーのファイル表示がサクサクになった。
ただし、Windows 8以降ではSMBMultiChannelが動き出してしまってVPN内をマルチチャネルで転送してしまい、結果的にスループットが落ちるという情けない状況もあったので注意が必要。
知人の環境でも試したのだが、プロバイダの能力とOSの差によりマチマチだった。参考程度に留めておいて欲しい。

コメント

このブログの人気の投稿

カスタムメイド3D2用プラグインを作りました

CM3D2用のプラグイン DeOutline / FaceToCam を制作 やっとCM3D2を遊べる感じになったので触ってみてます。
とあるところからHMDをお借りして感動していたところなのですが、現状でいくつか不満点が出たのでプラグインを作ってみました。
輪郭線除去プラグイン(VR対応) CM3D2.DeOutline.Plugin.dll 入れると輪郭線が消えます。それだけです。
CM3D2.OutlineSwitch.Plugin.dllの劣化版です。
違いは2点。
VR対応切り替えスイッチなしdownload いつでもこっち向いてプラグイン(VR対応) CM3D2.FaceToCamSwitcher.Plugin.dll キーを押すだけでメイドさんがいつでもこっちを向いてくれるプラグインです。
VRでは色々な視点で動かせるので必要なときこっち向いてくれるといいなあってことで作りました。
download
C#なので簡単にできていいですね。

プロバイダをオープンサーキットからIIJへ変更

プロバイダをオープンサーキットからIIJへ変更 VPN環境でIPv6の面白さを知ってしまったので、思い切ってプロバイダを変更してみた。 どうせならIPv4も快適にしたかったのでDS-LiteのあるIIJmioに加入することにした。 VyOSの設定などは別記事に。 速度比較 IIJのサービスにはインターネットへ接続する方法が3つ存在する。IPv4(PPPoE、DS-Lite)とIPv6(IPoE)となる。
今回は前プロバイダであるオープンサーキットとの比較を行うことで速度差がどれだけあるか調査してみた。
プロバイダ比較のため今回はIPv6の方は計測しない。 計測日は日曜日20:00前後。
計測方法 3種類の接続を行ったVyOS(VM)を用意し、接続した状態のままゲートウェイアドレスを変更した形で配置。 デフォルトゲートウェイを変更するだけでそれぞれの接続方式にアクセスする方法を採った。 オープンサーキット(PPPoE)radishで67Mbps/2Mbpsとなった。speedtestの方ではpingを計測し38ms。キャプチャミスにより下りが表示されていないが100Mbps前後だった。サーバー用途でガンガン帯域使っても怒られないプロバイダとしては十分いい数値だと思う。
IIJ(PPPoE)次にIIJ(PPPoE)。この時点で十分改善されている。オープンサーキットとは逆に上り帯域制限がかなりキツイ(15GB/日)のでこのくらい出てもらわないと困るのは確か。

IIJ(DS-Lite)最後にDS-Lite。ping値は変化ないが転送量が格段に増えた。ここまで差が出ると体感上でもハッキリ判るレベル。
その他詳細 DS-Liteは以下の制限が存在する。 ×専用機器が必要
×サーバーが立てられない
×オンラインゲームのポート開放が出来ない ただ、回避策がないわけでもない。
専用機器と言っても大したことをするわけでもないので、VyOSで簡単に実現できる。
サーバーやオンラインゲームに必要なポート開放はPPPoEとの併用でカバーできる。
しかしゲートウェイが2つ存在することになるのでどう運用するかという点でハードルが高くなる。
ちなみにNAT1段なのでSkpyeなどはポート開放しなくても動いた。(UDPホールパンチングは有効)
まとめ DS-Liteはやはり速かった。IPv6接…