XPS one 27(2012年5月)[Core i5-3450S@2.8/3.5GHz]で稼働する L2TP/IPsec VPNアプリ(Windows7)の最大スループットを確認してみた。
(1)XPS one 27
CPU: Intel Core i5 - 3450S@2.8/3.5GHz
Memory: 8GBytes
OS: Windows7 professional(Ver. 6.1.7601), Windows Security Essentials
・約8年前のPC。現役。Win10にアップデートするか機器更新か。。。
IKE/ESPの暗号化方式の指定方法が不明なため指定無し。下記条件で接続を確認
IKE: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/ECP_384(strongSwan)
IKE: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048(NVR510)
ESP: AES_CBC_128/HMAC_SHA1_96
MTU設定
netsh interface ipv4 show interface
netsh interface ipv4 set interface # MTU=1280
HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥Tcpip¥Parameters¥Interfaces¥{GUID}¥MTU=(DWORD)0x500(1280)
NAT対応
HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥PolicyAgent¥AssumeUDPEncapsulationContextOnSendRule=(DWORD)0x2
(2)計測
Debian10上のiperf3サーバーと直結、NVR510およびDebian10+strongSwanによるL2TP/IPSecサーバー経由のスループットを1秒毎に1分間計測し、平均値と標準偏差を計測した。
「直結」でGBTスイッチ速度(
NVR510ルーティング・スループット)を期待したが。。。50Mbps程低値。
Windows10のL2TP/IPSecスループットに較べてCPU性能が低いのに若干高値。
運用環境なので他トラフィックの影響を確認するため、日中、夜間PC未使用時の1時間毎に計測確認してみた。手作業は大変なので、計測用バッチをスケデュール・タスクで開始時間から停止時間まで1時間毎にバッチを起動して行なった。
計測用バッチは、「1. WiFiをdisable」「2.EthernetインターフェースをDHCPからスタティックで172.24.1.160/16に設定」「3.直結スループット計測」「4. NVR510へのL2TP/IPSec接続」「5. スループット計測」「5. NVR510へのL2TP/IPSec切断」「6. Debian10へのL2TP/IPSec接続」「7. スループット計測」「8. Debian10へのL2TP/IPSec切断」「9. EthernetインターフェースのDHCP設定とWiFiのenable」の手順を下記のようにプログラムした。
rem --------
set PCNAME=xps27
set PCIPADR=172.24.1.160/16
set IPERFSRV1=172.24.1.10
set IPERFSRV2=192.168.11.239
set IPERFSRV3=192.168.10.1
set NVR510L2TP=L2TP-IPSec-Local
set USR1=someone1
set PAS1=password1
set DEBIANL2TP=Test-L2TP-IPSec
set USR2=someone2
set PAS2=password2
rem --------
set TD=%date:/=%
set TT=%time: =0%
set TT=%TT::=%
set TT=%TT:‾0,6%
set TDATE=%TD%%TT%
set IPERF=C:¥Users¥someone¥Desktop¥iperf3¥iperf3.exe
set IPERFLOG=C:¥Users¥someone¥Desktop¥%TDATE%-%PCNAME%-l2tp-ipsec-throughput.txt
netsh interface set interface name="ワイヤレス ネットワーク接続" admin=disabled
netsh interface ipv4 set address "ローカル エリア接続" static %PCIPADR%
timeout /t 4
echo. >> %IPERFLOG%
echo ---- direct normal ---- %date% %time% >> %IPERFLOG%
call %IPERF% -c %IPERFSRV1% -V -t 60 -O 5 --logfile %IPERFLOG%
echo. >> %IPERFLOG%
echo ---- direct reverse ---- %date% %time% >> %IPERFLOG%
call %IPERF% -c %IPERFSRV1% -V -R -t 60 -O 5 --logfile %IPERFLOG%
rem ---- NVR510 L2TP/IPSec
call rasdial %NVR510L2TP% %USR1% %PAS1%
echo. >> %IPERFLOG%
echo ---- NVR510 L2TP/IPSec normal ---- %date% %time% >> %IPERFLOG%
call %IPERF% -c %IPERFSRV2% -V -t 60 -O 5 --logfile %IPERFLOG%
echo. >> %IPERFLOG%
echo ---- NVR510 L2TP/IPSec reverse ---- %date% %time% >> %IPERFLOG%
call %IPERF% -c %IPERFSRV2% -V -R -t 60 -O 5 --logfile %IPERFLOG%
rem ----
call rasdial /disconnect
rem ---- Debian10 L2TP/IPSec
call rasdial %DEBIANL2TP% %USR2% %PAS2%
timeout /t 3
echo. >> %IPERFLOG%
echo ---- DEBIAN10 L2TP/IPSec normal ---- %date% %time% >> %IPERFLOG%
call %IPERF% -c %IPERFSRV3% -V -t 60 -O 5 --logfile %IPERFLOG%
echo. >> %IPERFLOG%
echo ---- DEBIAN10 L2TP/IPSec reverse ---- %date% %time% >> %IPERFLOG%
call %IPERF% -c %IPERFSRV3% -V -R -t 60 -O 5 --logfile %IPERFLOG%
rem ----
call rasdial /disconnect
rem 終了処理
netsh interface ipv4 set address "ローカル エリア接続" dhcp
netsh interface set interface name="ワイヤレス ネットワーク接続" admin=enabled
計測したテキストデータは、エクセルに「テキスト、スペースセパレータ」で「ワークシート」に取込。1分間1秒毎のスループット計測値の平均値と標準偏差を計算。各1時間毎の計算結果からスループットの「メディアン値」を計算する。テキストファイルの読込から集計計算まで「マクロ(VBA)プログラム」を使い集計した。マクロは、「マクロ記録」でファイルの取込を記録し、記録されたプロシージャをファイル名引数の関数に変更し、複数ファイルの取り込みを行うようループ処理を加えた。取込後、表の体裁とグラフ化を手作業で実施。
Sub Macro5()
Dim fdir As String
Dim fidx As String
Dim fnam As String
Dim cc As Range
fdir = "C:¥Users¥someone¥Desktop¥"
fidx = "20201202153000"
fnam = "xps27-l2tp-ipsec-throughput"
'選択されたセルにfidx値が設定してある。ROW方向にセル値を順次取得する。
Set cc = Selection
si = cc.Row
ei = cc.End(xlDown).Row
For i = si To ei
fidx = Cells(i, cc.Column)
Call GetDataFile(fdir, fidx, fnam)
Worksheets(Left(fidx & "-" & fnam, 31)).Range("J1:R2").Copy
Cells(si + (i - si) * 2, cc.Column + 3).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Range(Chr(67 + cc.Column) & si + (i - si) * 2 & ":" & Chr(72 + cc.Column) & si + (i - si) * 2).Interior.ColorIndex = 24
Next
End Sub
Sub GetDataFile(ByVal FileDir As String, ByVal FileIndex As String, ByVal FileNamePart As String)
'
Workbooks.OpenText Filename:= _
FileDir & FileIndex & "-" & FileNamePart & ".txt" _
, Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1)), _
TrailingMinusNumbers:=True
Sheets(Left(FileIndex & "-" & FileNamePart, 31)).Select
Sheets(Left(FileIndex & "-" & FileNamePart, 31)).Move After:=Workbooks( _
"xps-one-27-test.xlsm").Sheets(1)
Range("J16").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-3]:R[59]C[-3])"
Selection.NumberFormatLocal = "0_);[赤](0)"
Range("K16").Select
ActiveCell.FormulaR1C1 = "=STDEV.P(RC[-4]:R[59]C[-4])"
Selection.NumberFormatLocal = "0.0_);[赤](0.0)"
Range("J100").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-3]:R[59]C[-3])"
Selection.NumberFormatLocal = "0_);[赤](0)"
Range("K100").Select
ActiveCell.FormulaR1C1 = "=STDEV.P(RC[-4]:R[59]C[-4])"
Selection.NumberFormatLocal = "0.0_);[赤](0.0)"
Range("J183").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-3]:R[59]C[-3])"
Selection.NumberFormatLocal = "0_);[赤](0)"
Range("K183").Select
ActiveCell.FormulaR1C1 = "=STDEV.P(RC[-4]:R[59]C[-4])"
Selection.NumberFormatLocal = "0.0_);[赤](0.0)"
Range("J267").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-3]:R[59]C[-3])"
Selection.NumberFormatLocal = "0_);[赤](0)"
Range("K267").Select
ActiveCell.FormulaR1C1 = "=STDEV.P(RC[-4]:R[59]C[-4])"
Selection.NumberFormatLocal = "0.0_);[赤](0.0)"
Range("J350").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-3]:R[59]C[-3])"
Selection.NumberFormatLocal = "0_);[赤](0)"
Range("K350").Select
ActiveCell.FormulaR1C1 = "=STDEV.P(RC[-4]:R[59]C[-4])"
Selection.NumberFormatLocal = "0.0_);[赤](0.0)"
Range("J434").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-3]:R[59]C[-3])"
Selection.NumberFormatLocal = "0_);[赤](0)"
Range("K434").Select
ActiveCell.FormulaR1C1 = "=STDEV.P(RC[-4]:R[59]C[-4])"
Selection.NumberFormatLocal = "0.0_);[赤](0.0)"
Range("F2").Select
Selection.NumberFormatLocal = "[$-x-systime]h:mm:ss AM/PM"
Range("J1").Select
ActiveCell.FormulaR1C1 = "=R[15]C"
Range("K1").Select
ActiveCell.FormulaR1C1 = "=R[15]C"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=R[98]C"
Range("K2").Select
ActiveCell.FormulaR1C1 = "=R[98]C"
Range("L1").Select
ActiveCell.FormulaR1C1 = "=R[182]C[-2]"
Range("M1").Select
ActiveCell.FormulaR1C1 = "=R[182]C[-2]"
Range("L2").Select
ActiveCell.FormulaR1C1 = "=R[265]C[-2]"
Range("M2").Select
ActiveCell.FormulaR1C1 = "=R[265]C[-2]"
Range("N1").Select
ActiveCell.FormulaR1C1 = "=R[349]C[-4]"
Range("O1").Select
ActiveCell.FormulaR1C1 = "=R[349]C[-4]"
Range("N2").Select
ActiveCell.FormulaR1C1 = "=R[432]C[-4]"
Range("O2").Select
ActiveCell.FormulaR1C1 = "=R[432]C[-4]"
Range("Q1").Select
ActiveCell.FormulaR1C1 = "=R[1]C[-12]"
Range("R1").Select
ActiveCell.FormulaR1C1 = "=R[1]C[-12]"
Range("A1").Select
Worksheets(1).Activate
End Sub
日中、夜間の計測値に大きな差は無かった。直結でGBTスイッチ理論速度に近づかないのは、Windows7のEthernet転送処理によると思われる(ループバックでは、十二分な速度)。Debian10+strongSwanで、極端な速度低下が計測される事があった。NVR510では、比較的安定したスループット値なので、他の通信データによる影響以外のDebian10システム処理に依存した低下と思われるが、原因は不明。NVR510もDebian10+strongSwanもUp方向(端末->サーバー)がDown方向(サーバー->端末)より低いスループット値だった。Debian10+strongSwanは、L2TP/IPSecサーバとiperf3サーバーが同一機上なのでルーティング処理分NVR510より有利だが、Up方向では、NVR510の方がやや高いスループット値を示した。Windows7は、サポートを終了したOSなので結果だけを示す。
1分間のスループットを開始値、それぞれの標準偏差値σを最高値(開始値+σ)・最低値(開始値-σ)、1時間毎のスループット値medianを終値とした株価グラフで表現してみた。
直結スループット
NVR510 L2TP/IPSecスループット値
Debian10+strongSwan L2TP/IPSecスループット値
(3)その他
Windows OS のL2TP/IPSec VPNは、macOSやDebian10(Linux)に較べて、スループットが低い。
「
Windows L2TP/IPSec VPNのスループットが低い・・・」