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"