pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

IPSEC-VPN経由のスループット検証メモ(UDP)

環境

※Windowサイズを確認する為、ホストA,BでTCPセグメンテーションオフロードは無効化する。

# ethtool -K enp0s25 tso off gso off


※L2スイッチのIEEE802.3Xのフローコントロールは無効にして確認。有効/無効の違いでUDPの場合、有効の方が3倍程スループットが高くなる差異が出た為。

IPSEC-VPNのTunnelのMTUは1280バイト

 RT107eのデフォルト値
 http://www.rtpro.yamaha.co.jp/china/support/download/manual/Rev.9.00.20/Cmdref_j.pdf

RT107eのIPSEC-VPNの最大スループットは最大80Mbit/s(双方向)

 RT107e 仕様

環境動作確認

ホストA→ホストBへのPINGのRTT(ICMPデータサイズ1472バイト)

# ping -s 1472 192.168.100.251 -c 1 > /dev/null 2>&1 ; ping -s 1472 192.168.100.251 -c 50 | tail -2
50 packets transmitted, 50 received, 0% packet loss, time 49071ms
rtt min/avg/max/mdev = 3.309/3.533/8.347/0.705 ms

ホストA→ホストBへscpで100MBのファイル送信

# cat /tmp/100mb.file > /dev/null; scp /tmp/100mb.file ubuntu@192.168.100.251:/tmp/.
100mb.file                 100%  100MB   7.4MB/s   00:13    

スループット確認

ホストA→ホストBへのiperf結果

実行コマンド

以下の???の箇所を変えて複数パタン確認

# iperf3 -c 192.168.100.251 -l ??? -u -b ???M -t 30

結果

No 帯域(-b) サイズ(-l) 送信パケット状況
(Lost/Total)
送信パケロス率 送信スループット 受信パケット状況
(Lost/Total)
受信パケロス率 受信スループット
1 10Mb/s 1252 0/29952 0% 10 Mbits/sec 0/29952 0% 10 Mbits/sec
2 10Mb/s 1253 0/29928 0% 10 Mbits/sec 0/29928 0% 10 Mbits/sec
3 10Mb/s 1472 0/25475 0% 10 Mbits/sec 0/25475 0% 10 Mbits/sec
4 70Mb/s 1252 0/209659 0% 70 Mbits/sec 0/209658 0% 70 Mbits/sec
5 70Mb/s 1253 0/209491 0% 70 Mbits/sec 176850/209483 84% 10.8 Mbits/sec
6 70Mb/s 1472 0/178324 0% 70 Mbits/sec 146374/178303 82% 12.4 Mbits/sec
7 80Mb/s 1252 0/239610 0% 80 Mbits/sec 0/239610 0% 80 Mbits/sec
8 100Mb/s 1252 0/299512 0% 100 Mbits/sec 40609/299512 14% 86.4 Mbits/sec
9 100Mb/s 1472 0/254748 0% 100 Mbits/sec 223833/254439 88% 12.0 Mbits/sec
10 1000Mb/s 1472 0/2241581 0% 880 Mbits/sec 845292/856348 99% 4.31 Mbits/sec

※1252バイト=1280バイト(MTUサイズ)-20バイト(IPヘッダ)-8バイト(UDPヘッダ)

結果考察

パケロス・低スループットとなったケースの原因は2つあり。

VPNルータのIPSEC-VPNの最大スループット超過(80Mb/s)した為

No8,9,10
※No9,10は後述の②の原因もあり。

VPNルーターがフラグメントされたパケットの処理で高負荷となった為

No5,6,9,10

ファストパス

VPNルーターの仕様で、ファーストパスとノーマルパスがあり。
・ファーストパスはパケット転送を高速に処理する仕組み。
・ノーマルパスはファストパスを使わずにパケットを転送する仕組み。(ファストパスに比べ最適化されてない)
・フラグメントされたパケットは、ノーマルパスで処理される。

確認した内容

No5,6,9,10iperf3実施中はルータAにSSH接続できなかった。
IPSEC-VPNのTunnelのMTUは1280バイトの為、それ以上のサイズのパケットを送信するとPMTUDが動作し、Ubuntuは経路毎にMTUサイズをキャッシュする。

初回のiperf3実行時はエラーになる。理由はPMTUDでICMPでMTUサイズの通知を受ける為。この時、MTUがキャッシュされる為、2回目以降は、キャッシュが残ってる間は成功する。

# ip route get 192.168.100.251
192.168.100.251 via 192.168.0.1 dev enp0s25 src 192.168.0.250 uid 0 
    cache expires 200sec mtu 1280 
ホストAからパケットを送出した時点でフラグメントされていた。


※PMTUDのあるべき動きと異なる。本来はPMTUDにより、アプリは縮小したMTUサイズのパケットで通信する為、フラグメントされたパケットは発生しない。しかし、iperf3コマンドはサイズ指定によりMTUサイズを超過したパケットを生成し、送信元ホストでフラグメントしている。

補足

メモ

RT107eとSSHで接続するのに、.ssh/configファイルに以下追記が必要。

KexAlgorithms +diffie-hellman-group1-sha1
HostkeyAlgorithms +ssh-rsa

ログ

No1) UDP (-l 1252 -b 10M)
# iperf3 -c 192.168.100.251 -l 1252 -u -b 10M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1252 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec  35.8 MBytes  10.0 Mbits/sec  0.000 ms  0/29952 (0%)  sender
[  5]   0.00-30.00  sec  35.8 MBytes  10.0 Mbits/sec  0.017 ms  0/29952 (0%)  receiver

iperf Done.
No2) UDP (-l 1253 -b 10M)
# iperf3 -c 192.168.100.251 -l 1253 -u -b 10M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1253 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec  35.8 MBytes  10.0 Mbits/sec  0.000 ms  0/29928 (0%)  sender
[  5]   0.00-30.00  sec  35.8 MBytes  10.0 Mbits/sec  0.080 ms  0/29926 (0%)  receiver

iperf Done.
No3) UDP (-l 1472 -b 10M)
# iperf3 -c 192.168.100.251 -l 1472 -u -b 10M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1472 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec  35.8 MBytes  10.0 Mbits/sec  0.000 ms  0/25475 (0%)  sender
[  5]   0.00-30.00  sec  35.8 MBytes  10.0 Mbits/sec  0.062 ms  0/25474 (0%)  receiver

iperf Done.
No4) UDP (-l 1252 -b 70M)
# iperf3 -c 192.168.100.251 -l 1252 -u -b 70M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1252 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   250 MBytes  70.0 Mbits/sec  0.000 ms  0/209659 (0%)  sender
[  5]   0.00-30.00  sec   250 MBytes  70.0 Mbits/sec  0.176 ms  0/209658 (0%)  receiver

iperf Done.
No5) UDP (-l 1253 -b 70M)
# iperf3 -c 192.168.100.251 -l 1253 -u -b 70M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1253 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   250 MBytes  70.0 Mbits/sec  0.000 ms  0/209491 (0%)  sender
[  5]   0.00-30.21  sec  39.0 MBytes  10.8 Mbits/sec  1.167 ms  176850/209483 (84%)  receiver

iperf Done.
No6) UDP (-l 1472 -b 70M)
# iperf3 -c 192.168.100.251 -l 1472 -u -b 70M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1472 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   250 MBytes  70.0 Mbits/sec  0.000 ms  0/178324 (0%)  sender
[  5]   0.00-30.21  sec  44.8 MBytes  12.4 Mbits/sec  1.114 ms  146374/178303 (82%)  receiver

iperf Done.
No7) UDP (-l 1252 -b 80M)
# iperf3 -c 192.168.100.251 -l 1252 -u -b 80M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1252 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   286 MBytes  80.0 Mbits/sec  0.000 ms  0/239610 (0%)  sender
[  5]   0.00-30.00  sec   286 MBytes  80.0 Mbits/sec  0.170 ms  0/239610 (0%)  receiver

iperf Done.
No8) UDP (-l 1252 -b 100M)
# iperf3 -c 192.168.100.251 -l 1252 -u -b 100M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1252 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   358 MBytes   100 Mbits/sec  0.000 ms  0/299512 (0%)  sender
[  5]   0.00-30.01  sec   309 MBytes  86.4 Mbits/sec  0.164 ms  40609/299512 (14%)  receiver

iperf Done.
No9) UDP (-l 1472 -b 100M)
# iperf3 -c 192.168.100.251 -l 1472 -u -b 100M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1472 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   358 MBytes   100 Mbits/sec  0.000 ms  0/254748 (0%)  sender
[  5]   0.00-30.02  sec  43.0 MBytes  12.0 Mbits/sec  1.235 ms  223833/254439 (88%)  receiver

iperf Done.
No10) UDP (-l 1472 -b 1000M)
# iperf3 -c 192.168.100.251 -l 1472 -u -b 1000M -t 30 | grep -B4 "iperf Done."
warning: UDP block size 1472 exceeds TCP MSS 1228, may result in fragmentation / drops
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec  3.07 GBytes   880 Mbits/sec  0.000 ms  0/2241581 (0%)  sender
[  5]   0.00-30.21  sec  15.5 MBytes  4.31 Mbits/sec  1.259 ms  845292/856348 (99%)  receiver

iperf Done.

ルーターAコンフィグ

login password *
administrator password *
login user HOGE *
console character ascii
login timer 300
ip route 192.168.100.0/24 gateway tunnel 1
ip lan1 address 192.168.0.1/24
ip lan2 address 192.168.200.1/24
provider lan1 name LAN:
tunnel select 1
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike keepalive log 1 off
  ipsec ike keepalive use 1 on heartbeat
  ipsec ike local address 1 192.168.200.1
  ipsec ike pre-shared-key 1 *
  ipsec ike remote address 1 192.168.200.2
 ip tunnel tcp mss limit auto
 tunnel enable 1
ipsec auto refresh on
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.0.11-192.168.0.150/24
sshd service on
sshd host key generate *

ルーターBコンフィグ

login password encrypted *
administrator password encrypted *
login user HOGE *
console character ascii
login timer 300
ip route 192.168.0.0/24 gateway tunnel 1
ip lan1 address 192.168.100.1/24
ip lan2 address 192.168.200.2/24
tunnel select 1
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike keepalive log 1 off
  ipsec ike keepalive use 1 on
  ipsec ike local address 1 192.168.200.2
  ipsec ike pre-shared-key 1 *
  ipsec ike remote address 1 192.168.200.1
 tunnel enable 1
ipsec auto refresh on
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
sshd service on
sshd host key generate *