VPC VPN接続のベンチマークをしてみた

VPCに接続可能で安価なデバイスが手元に集まってきたので、ベンチマークを取ってみた。

使用した回線

Bフレッツ ハイパーファミリー + i-revo(500円で固定IPが使えるので、検証用にオススメ)
インターネット回線速度測定サイトでは、だいたい90Mbps弱くらい出ます。

使用したルータ

以下の機器を使用しました。

  • Netscreen 5GT (ottoさんで購入)
  • Juniper SSG5(128MBモデル) (借用)
  • YAMAHA RTX1100 (ottoさんで購入)
  • Cisco 1812J (ottoさんで購入)
  • FortiGate 50B (qpstudy08でottoさんにいただきました)
  • Vyatta Core 6.3 (PCがルータになるOS/PCのスペックは CPU:AMD Opteron 185 2.6GHz)

※Vyattaのconfig作成には、id:kikumotoさんのVyatta(=>6.3) Configuration Generator for Amazon VPCを利用させて頂きました!詳しくはこちら

測定方法

iperfを利用しました。
受信側コマンド : iperf -s
送信側コマンド : iperf -c ターゲットIP
こんな感じの出力が得られます(各3回実行し、平均の値を採用)。

(public IP経由での実行結果)
$ iperf -c xxx.xxx.xxx.xxx
------------------------------------------------------------
Client connecting to xxx.xxx.xxx.xxx, TCP port 5001
TCP window size:  256 KByte (WARNING: requested  256 KByte)
------------------------------------------------------------
[  3] local yyy.yyy.yyy.yyy port 51966 connected with xxx.xxx.xxx.xxx port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   101 MBytes  84.4 Mbits/sec

測定結果

※元データ

考察

ほとんどのルータで、デフォルト設定ではVPCからLAN向けのスループットが低いです。これはVPCが生成するデフォルトのconfigがMTU=1500を前提にしているからで、そのままではフレッツ回線のMTU(東日本では1454)だとreassembleされるためでしょうか。ちゃんと計算するとするならば、Amazon VPCではAES+SHA1でESPでカプセリングしているため、

Path MTU = 1454 とすると、
カプセル化対象パケット長 = 1454 - 12(SHA1) - 16(AES) - 8(ESP) - 20 (IPv4) = 1398
AESでは16bytesごとのchunkで暗号化(あまった分はpaddingされる)らしく、
Tunnel MTU = int(1398/16)x16 - 2(Paddingされたバイト数+次のヘッダ番号1バイト) = 1390 
Tunnel MSS = 1390 - 40 (IPv4 + TCP hedaer) = 1350

といった感じで求められるようです(間違ってたらご指摘ください)。実際に適用してみた所、1350を境にだいたいのルータでかなり向上しました。
(Vyattaはこの辺を見てiptablesで設定したのですが、適切な設定ができていない可能性もあります)

参考: http://www.nec.co.jp/ixseries/ix2k3k/faq/ipsec-ike.html#Q1-8

TCP Window Sizeでのスループット変化

TCP Window Sizeを色々変えてベンチマークしてみました(YAMAHA RTX1100を使用)。

まとめ

回線が100Mbps程度であれば、それほど高価なルータでなくてもちゃんと性能が望めそうですね。
MSSの調整でCIFS共有へのファイルコピー等でもかなり回線速度を使いきれるようになりました。
(Windows7<-->Windows2008なのでSMB2で通信していると思われます)