Cisco 841MのL2TP/IPsecスループット
Cisco C841M-4X-JSEC/K9のL2TP/IPsecのスループットを測定してみました(NATやFirewallあり)。
計測環境
C841MにDebian9をL2TP/IPsec接続し、CentOS7をiperf3のクライアント、Debian9をiperf3のサーバーにしスループットの測定を行います。C841Mのファームウェアは15.5(3)M9となります
計測結果
CentOS7 Aでのiperf3の実行結果が以下となります。-Mオプションを使ってMSSを変えてテストを行っています。
receiver | sender | |||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1310 | 102 | 99% | 7.2W | 70.8 | 99% | 7.2W |
1200 | エラー | エラー | ||||
800 | エラー | エラー | ||||
400 | エラー | エラー |
(*) iperf3を60秒間実行。無負荷時はTAP-TST10の目測値で6.5W。receiverはL2TP Client(Debian9)へのダウンロード、senderはL2TP Client(Debian9)からのアップロード。CPU負荷はWeb管理画面の表示で、タイミングによってかなり変動があるので参考値。
IPsec接続は問題ないものの、L2TPの接続が不安定で途中までしか計測できませんでした。とりあえずL2TP/IPsecではC841Mはスループット的にあまり期待できないということはわかりました。後日時間があるときにconfig等を見直して再テストをしたいと思います。
C841MのConfig
テストに使ったC841Mのconfigは以下の通りです。Cisco超初心者であることもあって、かなり怪しいのでご参考まで。ひょっとして誰かが下記Configのおかしな点を指摘してくれるのではと期待を込めて、全configを掲載します。
このconfigでWindows 10は問題なくL2TP/IPsec接続が出来て、接続も安定していましたが、Deiban9との相性が悪くてL2TP接続が不安定(1~2分で接続が切れる)です。多分、私の設定ミスだと思いますが、Cisco初心者かつL2TPを始めとしたネットワークの知識もあまりないので、原因追及が出来ません。恐らくL2TPで使っているアドレスレンジをVlan1とオーバーラップさせている当たりが原因ではないかと思ってますが・・・。
ちなみに、当初firmware 15.5(3)M4aでテストしていましたが、クライアントをWindows10としたときも、Debian9としたときも、IPsecは接続が成功するものの、その後のL2TPフェーズが全く繋がりませんでした。Wiresharkでパケットを確認すると、IPsec接続完了後、クライアントからL2TPのパケットを投げてもC841Mから何も返ってこない状態。configを何度も見直し、色々な設定例と見比べても何もおかしくない。
途方にくれていたところ、Bugs for Cisco IOS Release 15.5(3)Mというページを見つけ、「L2TP/IPSEC fails to establish a connection. L2TP/IPSEC can be established when a client connects from behind a pat device.」との記載が。私がやったテストはNAT配下でない環境なので、のバグの影響をもろに受けてしまっていたようです。15.5(3)M5でバグは直っているのでファームを最新にすることで、NAT配下でなくてもL2TP/IPsec接続が成功するようになりました。
そもそもこのテストを行う前にファームを最新にしたんですが、途中色々トラブったときにファクトリーリセットをしたため、ファームが昔のものに戻っていたことが、そもそものトラブルの原因でした。トラブルがトラブルを呼ぶみたいな。
version 15.5 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname Router ! boot-start-marker boot system flash:c800m-universalk9-mz.SPA.155-3.M9.bin boot-end-marker ! aaa new-model ! aaa authentication ppp L2TP-AUTH local ! aaa session-id common ethernet lmi ce clock timezone SGT 8 0 ! ip dhcp excluded-address 192.168.100.224 192.168.100.239 ! ip dhcp pool dhcp-lan1 network 192.168.100.0 255.255.255.0 default-router 192.168.100.1 dns-server 192.168.100.1 ! ip cef no ipv6 cef ! multilink bundle-name authenticated vpdn enable ! vpdn-group L2TP ! Default L2TP VPDN group accept-dialin protocol l2tp virtual-template 1 no l2tp tunnel authentication ! username ppp1 password 0 test ! redundancy ! crypto isakmp policy 1 encr 3des authentication pre-share group 2 lifetime 1800 ! crypto isakmp policy 2 encr aes authentication pre-share group 2 lifetime 1800 crypto isakmp key presharedkey address 0.0.0.0 no-xauth ! ! crypto ipsec transform-set L2TP-TS1 esp-aes esp-sha-hmac mode transport ! crypto dynamic-map L2TP-DYN-MAP 10 set nat demux set transform-set L2TP-TS1 ! crypto map L2TP-CRYP-MAP 6000 ipsec-isakmp dynamic L2TP-DYN-MAP ! interface GigabitEthernet0/0 no ip address ! interface GigabitEthernet0/1 no ip address ! interface GigabitEthernet0/2 no ip address ! interface GigabitEthernet0/3 no ip address ! interface GigabitEthernet0/4 ip address dhcp ip access-group wan-to-lan in ip access-group lan-to-wan out ip nat outside ip virtual-reassembly in duplex auto speed auto crypto map L2TP-CRYP-MAP ! interface GigabitEthernet0/5 no ip address shutdown duplex auto speed auto ! interface Virtual-Template1 ip unnumbered GigabitEthernet0/4 ip nat inside ip virtual-reassembly in peer default ip address pool VPN-pool ppp authentication chap ms-chap-v2 L2TP-AUTH ! interface Vlan1 ip address 192.168.100.1 255.255.255.0 ip nat inside ip virtual-reassembly in ! ip local pool VPN-pool 192.168.100.224 192.168.100.239 ip forward-protocol nd no ip http server no ip http secure-server ! ip dns server ip nat inside source list NAT interface GigabitEthernet0/4 overload ! ip access-list extended NAT permit ip 192.168.100.0 0.0.0.255 any ip access-list extended lan-to-wan permit ip any any reflect mirror timeout 300 ip access-list extended wan-to-lan evaluate mirror permit icmp any any permit udp any eq domain any permit udp any eq bootps any eq bootpc permit esp any any permit udp any any eq isakmp permit udp any any eq non500-isakmp ! control-plane ! line con 0 exec-timeout 180 0 no modem enable line vty 0 4 transport input none ! scheduler allocate 20000 1000 ntp server pool.ntp.org ! end
Debian9の設定
IPsecにはstrongSwan 5.5.1、L2TPにはxl2tpdを使いました。cisco.example.comはC841MのGi0/4のアドレスとなります(内部DNSに当該名前の登録を行ってテストしました)。
IPsec関連(strongSwan)
# cat /etc/ipsec.conf conn cisco keyexchange=ikev1 authby=secret left=%defaultroute right=cisco.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 cisco] lns = cisco.example.com require chap = yes pppoptfile = /etc/ppp/options.xl2tpd.cisco # cat /etc/ppp/chap-secrets "ppp1" "cisco" "test" * # cat /etc/ppp/options.xl2tpd.cisco :192.168.100.254 name ppp1 remotename cisco 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接続成功後、L2TP接続が出来たように見えて、Debian9からC841Mや配下のCentOSに全くpingが通りませんでした。Debian9でip aを実行すると、以下のようにpeerがC841MのWAN側アドレスになってしまっています。
ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1350 qdisc pfifo_fast state UNKNOWN group default qlen 3 link/ppp inet 192.168.100.234 peer 10.0.0.2/32 scope global ppp0
ググり倒していたら、L2TP/IPSec: Linux can not connect to Cisco ASA (but Windows can)との書き込みを見つけ、ここに書いてあった解決方法をとりあえず入れることで、なんとかDebian9からC841Mや配下のCentOSにpingが通るようになった次第です。結局安定しておらず解決してませんけど(爆)。
接続コマンド
# IPsec接続を行う、ipsec statusで接続状況確認可能 ipsec up cisco # L2TP接続を行う echo "c cisco" > /var/run/xl2tpd/l2tp-control # 192.168.100.0/24へのルート追加 ip route add 192.168.100.0/24 dev ppp0 # L2TP切断 echo "d cisco" > /var/run/xl2tpd/l2tp-control # IPsec切断 ipsec down cisco