ER-6PのIPsecスループット

我が家ではRTX1210やER-4を使ってsite-to-siteのIPsecを張ってますが、ER-4やER-6Pに一番期待するのはIPsecのスループットとなります。実運用中のER-4を取り外して実験するのは面倒なので、余剰品のER-6Pを使ってIPsecのスループットを測定してみました。L2TP/IPsecではやや期待はずれに終わったER-6Pですが、L2TPの処理を外すとどの程度スループットが出るのでしょうか。直結での計測なので実際の利用時のスピードを測るものではなく、ルーターの性能評価を行うものです。

計測環境

ER-6PとDebian9をIPsecで接続し、それぞれにぶら下げたCentOS7 Aをiperf3クライアント、CentOS7 Bをiperf3サーバーとして、スループットの測定を行います。ER-6Pのファームウェアはv1.10.9となります。

計測結果

トンネルのMTUを1438とし、CentOS Aでiperf3の実行した結果が以下となります。消費電力はTAP-TST10での目測値で無負荷時は7.4Wとなります。先ずはipsecのoffloadなしで行ってみます。
(注) 将来のファームウェアで変わるかもしれませんが、v1.10.9ではoffloadの設定でipsecの設定がない場合にはER-Xの場合disable、ER-6Pの場合enableがデフォルト値になります。機種によって扱いを変えるとはさすがfirmwareの作りこみが甘いUbiquitiというところでしょうか・・・。ちなみに、IPv4のforwaringも指定しないと、enableがデフォルト値です。

forwaring=enable
ipsec=disable
receiver sender
暗号化 Mbps CPU 消費電力 Mbps CPU 消費電力
AES128-SHA1 110 36% 7.9W 106 37% 7.9W
AES256-SHA1 95.0 38% 7.9W 93.7 36% 8.0W
AES128-SHA256 86.0 37% 7.9W 84.5 36% 8.0W
AES256-SHA256 77.3 35% 7.9W 65.8 30% 7.9W

まあハードウェア支援がなければこんなものでしょう。では本命のipsec=enableで再度計測します。

forwaring=enable
ipsec=enable
receiver sender
暗号化 Mbps CPU 消費電力 Mbps CPU 消費電力
AES128-SHA1 306 50% 8.1W 302 55% 8.1W
AES256-SHA1 298 47% 8.2W 300 52% 8.2W
AES128-SHA256 86.1 36% 7.8W 72.1 29% 7.8W
AES256-SHA256 77.3 33% 7.9W 65.7 30% 7.8W

ipsecのoffloadで、ザクがシャアザク並みに進化しましたが、Ubiquitiのフラグシップモデルにしてはかなりイマイチな結果です。ここのサイトとかだと450Mbps出ているのに、今回の計測結果との差がなんなのかも気になります。

価格が違うのでRTX1210と比較するのは酷ですが、RTX1210は2014年発売、ER-4やER-6Pは2017年末発売であり3年の優位性がある割にはがっかりな結果となりました。IPsecするだけなら300Mbpsのスループットが出るIX2105で十分ですね(基本的なルーターとしての性能はER-6Pが大幅に上回ってますが)。

なお、SHA256の結果が悪いですが、EdgeRouter – Hardware Offloadingの説明によれば、SHA256に対してはipsecのoffloadが効かないみたいです。よって、結果はipsecのoffloadがdisableの結果と同じになりました。

ER-6PのConfig

テストに使ったER-6Pのconfigは以下の通りです。Basic Setup後に、ipsecの設定を追加した差分のみ記載しています。IKEはIKEv2の接続としており、ipsec絡みのfirewallやNATの設定は面倒なので

set vpn ipsec auto-firewall-nat-exclude enable

の自動設定にしちゃっています(EdgeRouterの便利な機能です)。er6p.example.comはER-6Pのeth0、debian.example.comはDebian9のeth0アドレスを検証環境のDNSに登録しています。

set system offload hwnat enable
set system offload ipsec enable
set vpn ipsec auto-firewall-nat-exclude enable
set vpn ipsec esp-group FOO0 compression disable
set vpn ipsec esp-group FOO0 lifetime 3600
set vpn ipsec esp-group FOO0 mode tunnel
set vpn ipsec esp-group FOO0 pfs enable
set vpn ipsec esp-group FOO0 proposal 1 encryption aes128
set vpn ipsec esp-group FOO0 proposal 1 hash sha1
set vpn ipsec esp-group FOO0 proposal 2 encryption aes256
set vpn ipsec esp-group FOO0 proposal 2 hash sha1
set vpn ipsec esp-group FOO0 proposal 3 encryption aes128
set vpn ipsec esp-group FOO0 proposal 3 hash sha256
set vpn ipsec esp-group FOO0 proposal 4 encryption aes256
set vpn ipsec esp-group FOO0 proposal 4 hash sha256
set vpn ipsec ike-group FOO0 ikev2-reauth no
set vpn ipsec ike-group FOO0 key-exchange ikev2
set vpn ipsec ike-group FOO0 lifetime 28800
set vpn ipsec ike-group FOO0 proposal 1 dh-group 2
set vpn ipsec ike-group FOO0 proposal 1 encryption aes128
set vpn ipsec ike-group FOO0 proposal 1 hash sha1
set vpn ipsec site-to-site peer debian.example.com authentication id er6p.example.com
set vpn ipsec site-to-site peer debian.example.com authentication mode pre-shared-secret
set vpn ipsec site-to-site peer debian.example.com authentication pre-shared-secret presharedkey
set vpn ipsec site-to-site peer debian.example.com authentication remote-id debian.example.com
set vpn ipsec site-to-site peer debian.example.com connection-type initiate
set vpn ipsec site-to-site peer debian.example.com ike-group FOO0
set vpn ipsec site-to-site peer debian.example.com ikev2-reauth inherit
set vpn ipsec site-to-site peer debian.example.com local-address any
set vpn ipsec site-to-site peer debian.example.com tunnel 1 allow-nat-networks disable
set vpn ipsec site-to-site peer debian.example.com tunnel 1 allow-public-networks disable
set vpn ipsec site-to-site peer debian.example.com tunnel 1 esp-group FOO0
set vpn ipsec site-to-site peer debian.example.com tunnel 1 local prefix 192.168.100.0/24
set vpn ipsec site-to-site peer debian.example.com tunnel 1 remote prefix 192.168.200.0/24

なお、IPsecのトンネルのMTUは1438なので、MSS Clampingが必要となりますが、EdgeRouter側でトンネルに対してだけMSS Clampingを入れる方法がわからなかったので、EdgeRouterには入れていません。他人の設定等を見ると、eth1側にまるっと入れている例もありますが、個人的にはこれは好きじゃないです(IPsec通信以外のインターネット通信等もすべてMSS Clampingがかかってしまってスループットが悪化するので)。

VTIやGre over IPsecならばトンネルインタフェースに対してfirewall modifyでMSS Clampingが指定できるのですが、今回のテストの設定のようなpolicy based ipsec(インタフェースの作成をせず、policyにマッチしたパケットをipsecする)の場合には簡単に設定できる機能が見当たりませんでした。iptablesを直接操作すれば可能と思われますがちょっと面倒です。

代わりに、iperf3のスループット測定において

iperf3 -c 192.168.200.2 -M 1398

とMSSを1398に指定することでお茶を濁しています。

VTIの設定が出来ればこれが一番使い勝手がいいのですが、local-addressを固定IPで指定する必要があり利用に制約があります。Linuxならばスクリプト書いてlocal-addressに動的IPを割り当てVTIすることは簡単なんですけどね・・・。

Debian9の設定

IPsecにはstrongSwan 5.5.1を使いました。テストでは暗号化の方法を変えてテストしていますが、ER-6P側のconfigは固定にし、strongSwan側のespの設定は以下の4パターンで変えながらテストを行っています。

  • esp=aes128-sha1!
  • esp=aes256-sha1!
  • esp=aes128-sha256!
  • esp=aes256-sha256!
IPsec関連(strongSwan)
# cat /etc/ipsec.conf

conn erx
        left=%defaultroute
        leftid=debian.example.com
        right=er6p.example.com
        rightid=er6p.example.com
        leftsubnet=192.168.200.0/24
        rightsubnet=192.168.100.0/24
        keyexchange=ike
        authby=secret
        type=tunnel
        ike=aes128-sha1-modp1024!
        esp=aes128-sha1!
        reauth=no
        auto=start
        keyingtries=%forever

# cat /etc/ipsec.secrets

: PSK "presharedkey"

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です