rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

NVR510 L2TP/IPSecのl2tp keepalive機能がRFC2661/3931に準じていない事による振舞い

2020-12-17 08:30:00 | NVR510
Wireless端末からのL2TP/IPSec接続で「意図しない回線切断」が発生した時に「L2TP Keepalive機能」が有効に働く。
RFC2661/RFC3931では、
RFC2661
5.5 Keepalive (Hello)
This is accomplished by injecting Hello control messages after a specified period of time has elapsed since
the last data or control message was received on a tunnel. 

RFC3931
4.4.  Keepalive (Hello)
This is accomplished by injecting Hello control messages after a period of time has elapsed since the last data message or control message was received on an L2TP session or control connection, respectively.
と定義されている。
Controlメッセージの送受が無くても「データ通信」が行われていれば、「Keepalive」が維持されると理解できる。

ヤマハNVR500のL2TP/IPSecサーバーへMacbook pro(macOS Mojave)を接続して「iperf3スループット計測」を行なった。この時問題はなかった。NVR510のL2TP/IPSecサーバーで「iperf3スループット計測」を行うと、開始後約80秒後程で切断されてしまう。
Debian10+strongSwan+xl2tpdのVPNクライアント接続では、「iperf3スループット計測」と無関係に60秒ほどで切断される。
Windows10のVPN接続では、切断される事がない。

「意図しない切断」時にNVR510のsyslogを確認すると「l2tp keepalive」のタイムアウトが発生していた。

Windows10、macOS Mojave、Debian10+strongSwan+xl2tpdとNVR510およびDebian10のL2TP/IPSecサーバー間でのL2TPKeepaliveの動作を調べてみた。


Macbook pro(macOS Mojave)は、NVR510からのL2TP Keepaliveメッセージに応答を返すが、約600Mbps以上のデータ転送が行われているとKeepalive応答が無くなる。NVR500では、152Mbps(Up)/109Mbps(Down)とスループット値が低いためKeepalive応答がある。

Debian10+strongSwan+xl2tpdでは、データ通信が開始されるとKeepalive応答が無くなる。また、60秒毎にKeepaliveメッセージを送信する。NVR510とNVR500は、Keepalive応答しない。

Windows10は、L2TP/IPSecの最大スループット値が210Mbps(Up)/401Mbps(Down)でKeepalive応答を返す。

対応策
NVR510のL2TP/IPSecサーバー設定に下記対策を行う。

Windows10クライアント対象
➡️特に無し

macOS(Mojave)クライアント対象
➡️「l2tp keepalive use off」とする。「L2TP Keepalive」機能が使えない。

Debian10+strongSwan+xl2tpdクライアント対象
➡️「l2tp keepalive use off」とする。「L2TP Keepalive」機能が使えない。
NVR510がKeepaliveメッセージに応答しない(l2tp keepalive use onでも応答しない)ためxl2tpdのKeepaliveメッセージを止める必要がある。
xl2tpdの設定では、Keepaliveメッセージを停止できないので、VPN接続後に、VPN接続先に定期的pingを行いデータ通信を確保する。xl2tpdは、データ通信があれば、keepaliveメッセージを送出しない。

---------------
 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

VAIO Pro 13 (VJP131B01N) L2TP/IPSec 最大スループット

2020-12-16 09:00:00 | PC
VAIO Pro 13(2014年7月発売)[Core i5 - 4210U@1.7Ghz/2.7Ghz]で稼働するL2TP/IPSec VPNアプリ(Windows10 Pro)の最大スループットを「Windows L2TP/IPSec VPNのスループットが低い・・・」で確認した。「Dell XPS one 27 L2TP/IPsec最大スループット」と同時に計測をしてみた。


(1)VAIO Pro 13
CPU: Intel Core i5 - 4210U@1.70GHz/2.70GHz
Memory: 8GBytes
OS: Windows10 Professional(Ver. 2004-OS build 19041.572)

・約6年前のPCでSSDを交換(VAIO Pro 13(VJP131B01N)のSSD不具合と交換

IKE/ESP暗号化方式指定
NVR510 L2TP/IPSec VPNの暗号組合せ(cipher suite)をWindows/macOS/Linux(strongSwan/xl2tpd)で接続確認」の(2)(3)(4)と同様に「IKE=aes128/sha1/DHGroup 2(modp1024)」「ESP=aes128/sha1」で接続するよう設定。

MTU設定
Windows 10のVPN接続デフォルトMTU=1400を1280へ変更。
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対応
NVR510のSecondary Addressを使うと正しいNAT-Dを返さない。
Windows 10 は、AssumeUDPEncapsulationContextOnSendRule=(DWORD)2とした。

HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥PolicyAgent¥AssumeUDPEncapsulationContextOnSendRule=(DWORD)0x2


(2)計測
Dell XPS one 27 L2TP/IPsec最大スループット」と同じスクリプト、excell処理で計測した。2020年12月2日午前10時から12月3日午前9時まで1時間毎に計測(「Dell XPS one 27 L2TP/IPsec最大スループット」とは30分ずれている)。

直結のスループットは、ほぼGBTスイッチの理論速度。偏差も少なく安定したスループット値。Windows7より安定的。Debian10+strongSwanがNVR510よりUp方向で若干高いスループット値。Debian10+strongSwanは、iperf3サーバーが同一機上にあるためスループット値が高い事が考えられる。Down方向は、ほぼ同じスループット値。Down方向よりUp方向が約60%位低いスループット値。「Windows L2TP/IPSec VPNのスループットが低い・・・」で測定した「macOS」や「Debian10+strongSwan」のL2TP/IPSec VPNに比べてスループット値が低い。

直結のスループット


NVR510 L2TP/IPSecサーバーとのスループット


Debian10+strongSwan L2TP/IPSecサーバーとのスループット




------
 
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Dell XPS one 27 L2TP/IPsec最大スループット

2020-12-14 11:00:00 | PC
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のスループットが低い・・・


 
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする