「ヤマハNVR500 L2TP/IPSecの最大VPN回線速度計測」及び「NVR500 L2TP/IPSecの最大VPN回線速度計測 #2」からNVR500のL2TP/IPSec最大スループットは、約150Mbps(UP)/100Mbps(DOWN)。「NVR510 L2TP/IPSec 最大VPN回線速度計測」からNVR510のL2TP/IPSec最大スループットは、約700Mbps(UP)/650Mbps(DOWN)だった。
Macbook pro上のParallels Desktop for MACで稼働するWindows 10 Homeの L2TP/IPSec VPNアプリとNVR500間で最大スループットを計測してみたが、約130Mbps程度で計測値のバラツキが大きかった。より転送能力の高いNVR510でも計測してみたが同様の計測値だった。
Parallels DesktopのVirtual serverの影響と推測したが、VAIO Pro 13(VJP131B01N)上のWindows 10 Proでも同程度だった。VAIO Pro 13 dual bootのdebian 10では、700Mbps以上のスループットだったので原因を探ってみた。
(1)L2TP/IPSecシステム構成
擬似インターネット回線「172.24.00/16」を設定し、L2TP/IPSecサーバーとして「NVR510」(172.24.1.2)と「Debian10+strongSwan+xl2tpd」(172.24.1.10)を配置。L2TP/IPSecクライアントとしてDual Boot VAIO Pro 13でWindows10 Pro(172.24.1.60)とDebian 10+strongSwan+xl2tpd(172.24.1.50)。Macbook Pro(macOS Mojave)(172.24.1.70)及びmacOS上のParallels Desktopに共有ネットワーク接続(172.24.1.70)とブリッジ接続(172.24.1.80)したWindows 10 homeとした。スループット計測は、iperf3を使用し、Debian10にL2tp/IPSecサーバー上にサーバー(172.24.1.10/192.168.10.1/192.168.11.239/192.168.1.57)を稼働した。
(2)構成機器
L2TP/IPSecサーバー
設定は「NVR510 L2TP/IPSec 最大VPN回線速度計測」の実環境での計測と同等
ESP: AES128/SHA(NVR5x0の暗号鍵記録が利用出来る条件を選択)
MTU/MRU=1280(default 1258でIPv4の最適値だがIPv6の最小MTUに合わせた)
L2TP Keepalive OFF(NVR510のL2TP Keepaliveは、データ通信中でもKeepalive応答しないとTimeoutで通信断するため。RFC2661/3931に準拠しない)
L2TP/IPSecサーバー(比較用)
「NVR510 L2TP/IPSec VPNの暗号組合せ(cipher suite)をWindows/macOS/Linux(strongSwan/xl2tpd)で接続確認」の「(1)L2TP/IPSecサーバー」「/etc/ipsec.conf」「conn L2TP-VPN」に「IKE=aes128-sha1-modp1024」を追加
L2TP/IPSecクライアント
「NVR510 L2TP/IPSec VPNの暗号組合せ(cipher suite)をWindows/macOS/Linux(strongSwan/xl2tpd)で接続確認」の(2)(3)(4)と同様に「IKE=aes128/sha1/DHGroup 2(modp1024)」「ESP=aes128/sha1」で接続するよう設定。
NVR510のSecondary Addressを使うと正しいNAT-Dを返さない。
Windows 10 は、AssumeUDPEncapsulationContextOnSendRule=(DWORD)2とした。
Windows 10のVPN接続デフォルトMTU=1400を1280へ変更。¥HKEY_Local_Machine¥System¥CurrentControlSet¥Services¥TCPIP¥Parameters¥Interfaces¥(GUID)¥MTU=(DWORD)0x500
(3)測定
Windows10HomeのNAPTとbridgeは、Parallels Desktopのインターフェースデバイス設定で共有(MacBook proのネットワークインターフェースをNAPT共有)接続とブリッジ接続方式を示す。ブリッジ接続の方が若干スループットが高い。ipef3計測は、1秒毎のスループット計測を60秒間行い、平均値と標準偏差を算出した。
実環境下でのスループットなので測定タイミングにより測定対象以外の通信影響を受けている。
WindowsのL2TP/IPSec通信のスループットは、maxOSやLinux+strongSwan+xl2tpdと比べて大きく低下している。
(4)パケット解析
NVR510は、LAN2インターフェースの接続するスイッチポートにミラーポートを設定し、wiresharkでキャプチャ。
Debian10+strongSwanは、tcpdumpで172.24.1.10アドレスをキャプチャ。
キャプチャ数が多くなるため、iperf3のスループット計測を1秒毎に10秒間でアップストリームとダウンストリームで計測した。
「NVR510 L2TP/IPsec の暗号鍵をWireshark用にLUAスクリプトで生成する」で暗号化鍵を抽出してwiresharkに設定しパケットを復号した。このスクリプトは、VPN接続セッションの最後の「鍵」を取り出すように設計したためか、IKE Phase2の最後の部分しか復号できなかった。Windows 10のL2TP/IPSec接続は、iperf3計測中に複数回の「Rekying」が行われている。
Phase2 「Security Association」の「Lifetime」を調べてみると「LifetimeSeconds=3600」「LifetimeKillobytes=250000」「LifetimePackets=2147483647」となっている。
VPN接続時のIPSec SA情報
250Mbytesのデータ転送毎にWindows 10 clientからRekying要求が発生する。iperf3のスループット計測では、10秒間に300Mbytes程のデータ転送が発生するので1回以上のRekyingが発生する。スループットが高い程Rekyingの回数も多くなる。
(5)SAのLifeTime値変更方法を探る
変更後再起動してVPN L2TP/IPSec接続するがSAのLifetimeKillobytesに変化は無かった。
IKEv2のsaDataSize=(dword)0x01fffc00(33553408)であるが、IKeV2で接続してもIPSecのSAでLifetimeKillobytes=250000であった。
「Microsoft Windows 10 IPsec VPN Client」の「3.5 Configuring the Client Lifetimes」によれば、「4.3 Configuring SA Lifetimes」「
4.3.2 Configuring Quick Mode SA Lifetimes」で設定。確認してみる。
ローカルポリシーとして設定された。この状態でL2TP/IPSec VPN接続を行うがLifetimeKillobytesに変化なかった。
この記事を読むとL2TP/IPSec VPNは、RAS-based IPSecでRegistoryから設定する必要があると思える。
しかし、saDataSize設定が有効に働かない。
L2TP/IPSecスループットが「Rekeying」によりどの程度低下するのか確認することが出来なかった。
スループットの偏差から推定すると+-30Mbps程度と思われる。
(6)結果
Windows10のL2TP/IPSec VPNの最大スループットは、250Mbps(UP)/400Mbps(DOWN)程度であった。
macOSの700Mbps(UP)/800Mbps(DOWN)、Debian10の850Mbps(UP)/850Mbps(DOWN)と較べて50%程度のスループット。
IPv6やIPv4 over IPv6などでフレッツ光回線の実スループットが向上するとWindows L2TP/IPSecのスループットの低さが目立ってくる。。。
------------------------
Macbook pro上のParallels Desktop for MACで稼働するWindows 10 Homeの L2TP/IPSec VPNアプリとNVR500間で最大スループットを計測してみたが、約130Mbps程度で計測値のバラツキが大きかった。より転送能力の高いNVR510でも計測してみたが同様の計測値だった。
Parallels DesktopのVirtual serverの影響と推測したが、VAIO Pro 13(VJP131B01N)上のWindows 10 Proでも同程度だった。VAIO Pro 13 dual bootのdebian 10では、700Mbps以上のスループットだったので原因を探ってみた。
(1)L2TP/IPSecシステム構成
擬似インターネット回線「172.24.00/16」を設定し、L2TP/IPSecサーバーとして「NVR510」(172.24.1.2)と「Debian10+strongSwan+xl2tpd」(172.24.1.10)を配置。L2TP/IPSecクライアントとしてDual Boot VAIO Pro 13でWindows10 Pro(172.24.1.60)とDebian 10+strongSwan+xl2tpd(172.24.1.50)。Macbook Pro(macOS Mojave)(172.24.1.70)及びmacOS上のParallels Desktopに共有ネットワーク接続(172.24.1.70)とブリッジ接続(172.24.1.80)したWindows 10 homeとした。スループット計測は、iperf3を使用し、Debian10にL2tp/IPSecサーバー上にサーバー(172.24.1.10/192.168.10.1/192.168.11.239/192.168.1.57)を稼働した。
(2)構成機器
L2TP/IPSecサーバー
NVR510 Rev. 15.01.16(Wed Mar 11 12:06:39 2020)
ESP: AES128/SHA(NVR5x0の暗号鍵記録が利用出来る条件を選択)
MTU/MRU=1280(default 1258でIPv4の最適値だがIPv6の最小MTUに合わせた)
L2TP Keepalive OFF(NVR510のL2TP Keepaliveは、データ通信中でもKeepalive応答しないとTimeoutで通信断するため。RFC2661/3931に準拠しない)
L2TP/IPSecサーバー(比較用)
XPS8300(Dell)
CPU: Intel Core i7 - 2600@3.4/3.8GHz
Memory: 16Gb
OS: Debian 10 (10.4)
strongSwan(5.7.2)+xl2tpd(1.3.12)+pppd(2.4.7)
iperf3(3.6)
「NVR510 L2TP/IPSec VPNの暗号組合せ(cipher suite)をWindows/macOS/Linux(strongSwan/xl2tpd)で接続確認」の「(1)L2TP/IPSecサーバー」「/etc/ipsec.conf」「conn L2TP-VPN」に「IKE=aes128-sha1-modp1024」を追加
L2TP/IPSecクライアント
VAIO Pro 13
CPU: Intel Core i5 - 4210U@1.70/2.39GHz
Memory: 8Gb
OS: Windows 10 Pro(Ver. 2004-OS build 19041.572)
OS: Debian 10 (10.4)
Macbook pro(Late 2013)
CPU: Intel Core i7 - 4850HQ@2.3/3.5GHz
OS: macOS Mojave(Ver. 10.14.6)
Memory: 16Gb
CPU: 2 Cores for Windows / Intel Core i7 - 4850HQ@2.3/3.5GHz
OS: Windows 10 Home(Ver.1909-OS build 18363.1139)
on Parallels Desktop for MAC (Ver.14.1.3-45485)
on macOS Mojave(Ver. 10.14.6)
Memory: 2Gb
「NVR510 L2TP/IPSec VPNの暗号組合せ(cipher suite)をWindows/macOS/Linux(strongSwan/xl2tpd)で接続確認」の(2)(3)(4)と同様に「IKE=aes128/sha1/DHGroup 2(modp1024)」「ESP=aes128/sha1」で接続するよう設定。
NVR510のSecondary Addressを使うと正しいNAT-Dを返さない。
Windows 10 は、AssumeUDPEncapsulationContextOnSendRule=(DWORD)2とした。
Windows 10のVPN接続デフォルトMTU=1400を1280へ変更。¥HKEY_Local_Machine¥System¥CurrentControlSet¥Services¥TCPIP¥Parameters¥Interfaces¥(GUID)¥MTU=(DWORD)0x500
(3)測定
Windows10HomeのNAPTとbridgeは、Parallels Desktopのインターフェースデバイス設定で共有(MacBook proのネットワークインターフェースをNAPT共有)接続とブリッジ接続方式を示す。ブリッジ接続の方が若干スループットが高い。ipef3計測は、1秒毎のスループット計測を60秒間行い、平均値と標準偏差を算出した。
実環境下でのスループットなので測定タイミングにより測定対象以外の通信影響を受けている。
WindowsのL2TP/IPSec通信のスループットは、maxOSやLinux+strongSwan+xl2tpdと比べて大きく低下している。
(4)パケット解析
NVR510は、LAN2インターフェースの接続するスイッチポートにミラーポートを設定し、wiresharkでキャプチャ。
Debian10+strongSwanは、tcpdumpで172.24.1.10アドレスをキャプチャ。
キャプチャ数が多くなるため、iperf3のスループット計測を1秒毎に10秒間でアップストリームとダウンストリームで計測した。
「NVR510 L2TP/IPsec の暗号鍵をWireshark用にLUAスクリプトで生成する」で暗号化鍵を抽出してwiresharkに設定しパケットを復号した。このスクリプトは、VPN接続セッションの最後の「鍵」を取り出すように設計したためか、IKE Phase2の最後の部分しか復号できなかった。Windows 10のL2TP/IPSec接続は、iperf3計測中に複数回の「Rekying」が行われている。
Phase2 「Security Association」の「Lifetime」を調べてみると「LifetimeSeconds=3600」「LifetimeKillobytes=250000」「LifetimePackets=2147483647」となっている。
VPN接続時のIPSec SA情報
250Mbytesのデータ転送毎にWindows 10 clientからRekying要求が発生する。iperf3のスループット計測では、10秒間に300Mbytes程のデータ転送が発生するので1回以上のRekyingが発生する。スループットが高い程Rekyingの回数も多くなる。
(5)SAのLifeTime値変更方法を探る
HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥RemoteAccess¥Parameters¥L2TP
saDataSize=(DWORD) 0x0003d090(250000) -> 0x017d7840(250000000)
変更後再起動してVPN L2TP/IPSec接続するがSAのLifetimeKillobytesに変化は無かった。
IKEv2のsaDataSize=(dword)0x01fffc00(33553408)であるが、IKeV2で接続してもIPSecのSAでLifetimeKillobytes=250000であった。
「Microsoft Windows 10 IPsec VPN Client」の「3.5 Configuring the Client Lifetimes」によれば、「4.3 Configuring SA Lifetimes」「
4.3.2 Configuring Quick Mode SA Lifetimes」で設定。確認してみる。
NetIPsecQuickModeCryptoProposal
PS C:¥Windows¥System32> $QMPropo=New-NetIPsecQuickModeCryptoProposal -Encapsulation ESP -ESPHash SHA1 -Encryption AES128 -MaxKiloBytes 10000000
NetIPSecQuickModeCryptoSet
PS C:¥Windows¥System32> $QMSet=New-NetIPSecQuickModeCryptoSet -DisplayName "esp:sha1-aes128-10Gb" -Proposal $QMPropo
NetIPSecRule
PS C:¥Windows¥System32> New-NetIPSecRule -DisplayName "LifeKilobyte-Rule" -RemoteAddress any -InboundSecurity Require -OutboundSecurity Request -QuickModeCryptoSet $QMSet.Name
ローカルポリシーとして設定された。この状態でL2TP/IPSec VPN接続を行うがLifetimeKillobytesに変化なかった。
この記事を読むとL2TP/IPSec VPNは、RAS-based IPSecでRegistoryから設定する必要があると思える。
しかし、saDataSize設定が有効に働かない。
L2TP/IPSecスループットが「Rekeying」によりどの程度低下するのか確認することが出来なかった。
スループットの偏差から推定すると+-30Mbps程度と思われる。
(6)結果
Windows10のL2TP/IPSec VPNの最大スループットは、250Mbps(UP)/400Mbps(DOWN)程度であった。
macOSの700Mbps(UP)/800Mbps(DOWN)、Debian10の850Mbps(UP)/850Mbps(DOWN)と較べて50%程度のスループット。
IPv6やIPv4 over IPv6などでフレッツ光回線の実スループットが向上するとWindows L2TP/IPSecのスループットの低さが目立ってくる。。。
------------------------