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

コメントを残す

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