我が家ではWindows Server 2008 R2を用いたファイルサーバーを構築していて、その上でSoftEtherを用いたVPNを動かしています。
SoftEther先生は素晴らしいVPNなので、いつも感謝感謝です。
問題
しかし悲しいかな、外出先でVPNを通じてファイル鯖へ利用するとあまり速度が出ません。
LTEでバリバリつながっており、HTTP通信ではそれなりの速度が出るにもかかわらず(特にSoftbank回線)ではあまり良い速度が出ない日々が続いていました。
勘違い
長らく「SoftEtherの通信に対して何かしら帯域制限を掛けているのだろう」と勝手に思っていたのですが、どうやらそれは勘違いだったようです。
原因は回線の遅延にあったっぽい。
ということで、レイテンシを下げるための試行錯誤をしてみたって話。
UDP高速化機能(UDP アクセラレーション機能)が有効になっていると思っていたら、なっていなかった件について
UDP高速化機能について
SoftEther 4.0から、TCPでハンドシェイクして、実通信はUDPで行う素晴らしい機能が搭載されています。
PacketiX VPN 3.0 までは、VPN 通信はすべて HTTPS (HTTP over SSL) トンネルにカプセル化されていました。VPN 内で TCP 通信を行おうとすると、いわゆる TCP over TCP の再送タイマの問題が発生し、遅延やパケットロスが少なからず発生しているネットワークでは通信速度が低下しました。PacketiX VPN 2.0 / 3.0 ではこの問題を複数 TCP コネクションの多重化により解決していました。しかし、必ずしも物理的なインターネット回線が有するキャパシティの限界まで回線帯域を占有する程度の速度を実現することはできない環境もありました。
そこで、PacketiX VPN 4.0 では新たに WAN 高速化機能 (UDP アクセラレーション機能) を搭載しました。VPN Server と VPN Client / Bridge との間では、最初に HTTPS ベースで VPN 接続が確立されます。VPN 接続が一端確立されると、両者は互いに UDP パケットを物理的に送り合い、UDP による疎通が可能であるかどうかを検証します。
もし UDP による疎通が可能であることが検出された場合は、それ以降は、HTTPS トンネルはキープアライブの目的でのみ使用され、VPN 通信のペイロードは UDP 経由で送受信されるようになります。
良い話です。私は長らくこの機能は「勝手に有効になっている」と思っていました。
だがしかし…それは違ったようです。
勝手にNAT超えできる設定を構築してくれるわけではない
インターネットを放浪していると、VyOSとSoftEtherでネットワークを構築されている方がいらっしゃいました。
Sideceres Blog: VyOS 1.1.1とSoftEther VPN Serverで自宅VPN最速設定
曰く、このようなことが書かれております。
実は、UDP(WAN)高速化機能を実現するためには条件がある。
NAT外にSoftEtherを配置すること(ルーター内ではダメ)
(使用するUDPポートがダイナミックに変わるため、ポートフォワードは無理)
なんということでしょう。UDP高速化機能には、NAT超えをするためにUDPのポートを勝手に開けてくれるような機能は付随していないようです…おうふ。
それも「使用するUDPポートがダイナミックに変わるため、ポートフォワードは無理」などと書かれているわけで…悲しみ。
UDP高速化機能が利用するポートを設定する方法
絶望に打ちひしがれていましたが、一筋の光が。
SoftEther VPN User Forum :: View topic - UDP高速化機能の仕様についての質問
> 1.使用するポートの範囲を指定したいのですが、可能でしょうか?
> 2.ドキュメントには「ポートはダイナミックに選択される」とありますが、明確な選択基準等ありますか?UDP 高速化や NAT トラバーサル機能で使用されるポートは OS の選択に委ねられています。
OS の設定でエフェメラルポートの範囲を指定することで、その範囲からポートが選択されます。
エフェメラルポートとやらの設定を変更すれば良いらしい。
こんな記事も見つけた。
Sideceres Blog: ルーター内のSoftEtherでWAN(UDP)高速化機能を使用する
エフェラメルポートの設定 + ルーターのポートフォワーディング設定
エフェラメルポートの設定
こちらの文献を参考にすると幸せになれる。
Ephemeralポートとして利用されるポートの範囲を変更する - 子持ちししゃもといっしょ
とりあえず、こんなかんじでコマンドを実行してみた。
C:\Users\Administrator>netsh int ipv4 set dynamicport udp start=50000 num=2000 OK C:\Users\Administrator>netsh int ipv4 show dynamicport udp プロトコル udp の動的ポートの範囲 --------------------------------- 開始ポート : 50000 ポート数 : 2000
結果
利用回線
Before
After