ER-XのL2TP/IPsecスループット
ER-XのL2TP/IPsecのスループットを測定してみました。直結での計測なので実際の利用時のスピードを測るものではなく、ルーターの性能評価を行うものです。
計測環境
ER-XにDebian9をL2TP/IPsec接続し、CentOS7をiperf3のクライアント、Debian9をiperf3のサーバーにしスループットの測定を行います。ER-Xのファームウェアはv1.10.9となります。
計測結果
トンネルのMTUを1350としました。先ずはER-XのCPUの性能を測るべく、ハードウェア支援(offload)を全部オフで計測します。
hwnat=disable ipsec=disable |
receiver | sender | ||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1310(指定なし) | 28.5 | 38% | 3.3W | 28.9 | 38% | 3.3W |
1200 | 24.3 | 30% | 3.3W | 31.1 | 37% | 3.3W |
800 | 18.3 | 26% | 3.3W | 20.7 | 42% | 3.2W |
400 | 12.1 | 40% | 3.3W | 14.1 | 40% | 3.3W |
(*) iperf3を60秒間実行。無負荷時はTAP-TST10の目測値で2.7W。receiverはL2TP Client(Debian9)へのダウンロード、senderはL2TP Client(Debian9)からのアップロード。CPU負荷はWeb管理画面の表示で、タイミングによってかなり変動があるので参考値。
かなり悪い結果です。次にhwnat=enableにしてみます。
hwnat=enable ipsec=disable |
receiver | sender | ||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1310(指定なし) | 31.4 | 37% | 3.3W | 24.7 | 30% | 3.1W |
1200 | 28.2 | 39% | 3.3W | 24.3 | 39% | 3.2W |
800 | 18.3 | 30% | 3.2W | 18.4 | 30% | 3.1W |
400 | 12.0 | 41% | 3.2W | 12.1 | 41% | 3.2W |
あまり変化がなかったです。hwnatでoffloadされるものはNATやPPPoE等なので、IPsecやL2TPは高速化されません。ER-XはIPsecのハードウェア支援があるので、hwnatをdisableにする代わりに、ipsecをenableにして計測します。
hwnat=disable ipsec=enable |
receiver | sender | ||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1310(指定なし) | 62.7 | 35% | 3.2W | 74.4 | 37% | 3.2W |
1200 | 67.7 | 52% | 3.4W | 62.8 | 40% | 3.4W |
800 | 45.9 | 50% | 3.4W | 45.2 | 37% | 3.3W |
400 | 21.2 | 42% | 3.2W | 22.1 | 40% | 3.3W |
結構改善し、ちょっとしたリモートアクセス程度には使えそうですが、かなりイマイチな結果です。NATやPPPoEが爆速だったのと比較するとがっかりですね。RTX810やIX2105にも大きく負けており、リモートアクセス用のルーターであれば、中古で同じ程度の金額で入手可能なRTX810やIX2105に分があります。最後にhwnatもenableにして計測します。
hwnat=enable ipsec=enable |
receiver | sender | ||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1310(指定なし) | 65.0 | 41% | 3.4W | 74.3 | 38% | 3.3W |
1200 | 75.1 | 50% | 3.5W | 67.8 | 37% | 3.3W |
800 | 52.5 | 51% | 3.5W | 44.9 | 38% | 3.4W |
400 | 24.4 | 53% | 3.4W | 20.5 | 40% | 3.3W |
ほとんど変化ありませんね。ER-XのCPUが貧弱でoffloadされないL2TPの処理等でパフォーマンスが上がっていないものと思われます。
ER-XのConfig
テストに使ったER-Xのconfigは以下の通りです。Basic Setup後に、L2TPとfirewallの設定を追加した差分のみ記載しています。NAT配下でないので、UDP 4500を開ける設定は不要ですが、汎用性を考え一応入れております。
set firewall name WAN_LOCAL rule 21 action accept set firewall name WAN_LOCAL rule 21 description 'Allow ESP' set firewall name WAN_LOCAL rule 21 log disable set firewall name WAN_LOCAL rule 21 protocol esp set firewall name WAN_LOCAL rule 22 action accept set firewall name WAN_LOCAL rule 22 description 'Allow IKE,NAT-T,L2TP' set firewall name WAN_LOCAL rule 22 destination port 500,4500,1701 set firewall name WAN_LOCAL rule 22 log disable set firewall name WAN_LOCAL rule 22 protocol udp set vpn ipsec auto-firewall-nat-exclude disable set vpn ipsec ipsec-interfaces interface eth0 set vpn l2tp remote-access authentication local-users username ppp1 password test set vpn l2tp remote-access authentication mode local set vpn l2tp remote-access client-ip-pool start 192.168.100.200 set vpn l2tp remote-access client-ip-pool stop 192.168.100.210 set vpn l2tp remote-access dhcp-interface eth0 set vpn l2tp remote-access idle 1800 set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret presharedkey set vpn l2tp remote-access ipsec-settings ike-lifetime 3600 set vpn l2tp remote-access ipsec-settings lifetime 3600 set vpn l2tp remote-access local-ip 192.168.100.1 set vpn l2tp remote-access mtu 1350
なお、上記でWAN→LOCALに対してL2TP(UDP 1701)を許可する設定を入れていますが、RTXシリーズやIXシリーズと違って、ER-Xでは必要となります。eth0から入ってくるL2TPはespに包まれて届きますので、espを許可するだけで足りる気もしますが、Linuxの内部処理で、espヘッダーが取り除かれた後のL2TPに対して再度firewall(iptables)のチェックがかかります。なので、WAN→LOCALに対してUDP 1701を許可しないと、L2TP接続が成功しません。
Debian9の設定
IPsecにはstrongSwan 5.5.1、L2TPにはxl2tpdを使いました。erx.example.comはER-Xのeth0アドレスとなります(内部DNSに当該名前の登録を行ってテストしました)。
IPsec関連(strongSwan)
# cat /etc/ipsec.conf conn erx keyexchange=ikev1 authby=secret left=%defaultroute right=erx.example.com rightid=%any ike=aes128-sha1-modp1024! esp=aes128-sha1! auto=add leftprotoport=17/1701 rightprotoport=17/1701 type=transport # cat /etc/ipsec.secrets : PSK "presharedkey"
L2TP関連(xl2tpd)
# cat /etc/xl2tpd/xl2tpd.conf [global] auth file = /etc/ppp/chap-secrets [lac erx] lns = erx.example.com require chap = yes pppoptfile = /etc/ppp/options.xl2tpd.erx # cat /etc/ppp/chap-secrets "ppp1" "erx" "test" * # cat /etc/ppp/options.xl2tpd.erx name ppp1 remotename erx ipcp-accept-local ipcp-accept-remote lcp-echo-interval 30 lcp-echo-failure 4 require-chap noccp nobsdcomp noauth mtu 1350 mru 1350 nodefaultroute usepeerdns connect-delay 5000 persist debug
接続コマンド
# IPsec接続を行う、ipsec statusで接続状況確認可能 ipsec up erx # L2TP接続を行う echo "c erx" > /var/run/xl2tpd/l2tp-control # 192.168.100.0/24へのルート追加 ip route add 192.168.100.0/24 dev ppp0 # L2TP切断 echo "d erx" > /var/run/xl2tpd/l2tp-control # IPsec切断 ipsec down erx