ちょっと話題の記事

インフラエンジニア向け、Cisco CSR1000V on AWS を使ってみる

2014.08.17

こんにちは、梶です。
本日はインフラエンジニア向け、第2弾として、Cisco CSR1000V on AWS を使ってみたいと思います。

Cisco Cloud Service Router(CSR)とは

Cisco Cloud Service Router (CSR) 1000Vとは、ソフトウェアルータです。他にも有名なものでいうとVyattaや、SEIL/x86などがあります。

詳細はここ *ESXiのみと書いてありますが、現在は複数のハイパーバイザーに対応しているようです。
VMware ESXi (5.0, 5.1)、Citrix XenServer (6.0.2, 6.1)、RedHat KVM (RHEL 6.3, RHEV 3.1)
Amazon Web Services (AWS)

CSR1000Vのライセンスは以下の組み合わせになってます。
期間→1年、3年、5年
機能→Standard/Advanced/Premium
スループット→10 Mbps、25 Mbps、50 Mbps

上記に応じて、性能上限値も異なりますので、ご注意ください。 詳細が記載されております。
NetScaler でも記載しましたが、「従量課金方式」で構築した場合と「BYOL (Bring Your Own License)方式」の場合でサポート条件が異なると思われますので、代理店様へ確認ください。

AWSの機能では?

Amazon VPN、Amazon VPC Peeringなどでも可能ですが、機能制限があります。
ソフトウェアルータで、Amazon VPN、Amazon VPC Peeringの機能制限を打破するため利用されているようです。*事前に検証してから利用しましょう。

以下も参考になります。
OpenswanでVPN接続してIPSec通信をやってみた。
Amazon VPC Peeringの技術的考察と留意点

検証について

お金をかけず、検証するため、以下の内容で実施しました。
・Cisco CSR 1000Vのライセンスは、60日間の試用版ライセンスでテストします。
・通信試験用のEC2サーバは12ヶ月の無料枠で作成できます。
・ただし、有料枠のEC2サーバ上にCisco CSR 1000Vを作成する必要があるますので、EC2の利用料が必要です。

複数ハマった場所がありましたので、以後試す方の参考になればと思います。
今回は、VPC間の接続を行ってみたいと思います。

構成図

kaji-csr1kv 構成図 2014-08-15

VPCの作成

上記の図のように、1VPCに2つのネットワークを作成し、ネットワークアドレスの違う同じ構成のものをもう一つ用意。

kaji-csr1kv_2014-08-12_18_00_50

kaji-csr1kv_2014-08-12_18_44_09

CSR1000VのLaunching

それぞれのVPCにCisco CSR 1000V BYOLをLaunchします。
Cisco CSR 1000V BYOLを60日間の試用版で動作します。

kaji-csr1kv_2014-08-12_19_33_30

kaji-csr1kv_2014-08-12_19_33_46

kaji-csr1kv_2014-08-12_19_34_52

kaji-csr1kv_2014-08-12_19_35_16

kaji-csr1kv_2014-08-12_19_35_35

kaji-csr1kv_2014-08-12_19_35_43

kaji-csr1kv_2014-08-12_19_44_51

kaji-csr1kv_2014-08-12_19_53_29

kaji-csr1kv_2014-08-12_19_58_48

kaji-csr1kv_2014-08-12_19_53_47

kaji-csr1kv_2014-08-12_20_00_02

作成後、重要なことは2点あります。(Ciscoなどのマニュアルで記載が無く、うっかりしててハマります。)
(1)インターネット側のインターフェイスに設定するSecurity Group(Inbound)の設定に、VPN接続で利用するポートを開けておきます。
sshの他に、udp:500,udp:4500です。最初は通信確認用にICMPも開けても良いと思います。

kaji-csr1kv_2014-08-12_19_07_31

(2)その際、サーバ側ネットワーク用のインターフェイスを追加します。
マシンが作成できたら、Netwrok Interface で、サーバ側ネットワーク用のインターフェイスの「Source/Dest. Check」を無効にします。

kaji-csr1kv_2014-08-14_11_09_03

kaji-csr1kv_2014-08-14_11_09_12

CSR1000Vの設定

ルータへの接続は、EC2サーバと同様です。

% ssh -i <key.pem> ec2-user@<IP.address>

ライセンスレベルの変更

> config t
(config)# lisense boot level ?
  advanced  Advanced License Level
  premium   Premium License Level
  standard  Standard License Level

(config)# lisense boot level premium
         Feature Name:prem_eval

PLEASE  READ THE  FOLLOWING TERMS  CAREFULLY. INSTALLING THE LICENSE OR
LICENSE  KEY  PROVIDED FOR  ANY CISCO  PRODUCT  FEATURE  OR  USING SUCH

#### 省略 ####

so  that  if you enable a software  feature on  1000  devices, you must
purchase 1000 licenses for use past  the 60 day evaluation period.)

Activation  of the  software command line interface will be evidence of
your acceptance of this agreement.


ACCEPT? (yes/[no]): yes
% use 'write' command to make license boot config take effect on next boot

(config)#
(config)#exit
#write
Building configuration...

#reload
Proceed with reload? [confirm]
Connection to x.x.x.123 closed by remote host.
Connection to x.x.x.123 closed.

再起動しますが、AWS Management Consoleでステータスエラーになることがありました。AWS Management Console から該当のインスタンスをStop/Startすると復旧しました。

SSHで再ログイン後、ここで念のため、スナップショットを忘れずに・・・
設定に失敗し、ログインできなくなった場合の復旧手段となります。
事前にVolumeでnameを付けておくとわかりやすいです。

kaji-csr1kv_2014-08-14_19_32_38

コンフィグを一般的なCiscoルータと同様に適応します。
AWSで利用する場合、インターネット側のIPアドレスはDHCP取得となるのが特徴です。

# conf t
(config)# hostname csr1kv-1

IPアドレスの設定状況確認

csr1kv-1#sh ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       10.1.2.70       YES DHCP   up                    up      
GigabitEthernet2       unassigned      YES unset  administratively down down    
VirtualPortGroup0      10.1.2.70       YES unset  down                  down    
csr1kv-1#

サーバ側インターフェイスのIPアドレスの設定

csr1kv-1(config)#int Gi 2
csr1kv-1(config-if)#ip address 10.1.1.10 255.255.255.0
csr1kv-1(config-if)#no shutdown
csr1kv-1(config-if)#end

csr1kv-1#show ip int brief 
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       10.1.2.70       YES DHCP   up                    up      
GigabitEthernet2       10.1.1.10       YES NVRAM  up                    up      
VirtualPortGroup0      10.1.2.70       YES unset  down                  down  

IKEの設定

csr1kv-1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
csr1kv-1(config)#crypto isakmp policy 1
csr1kv-1(config-isakmp)#encryption aes
csr1kv-1(config-isakmp)#hash md5
csr1kv-1(config-isakmp)#authentication pre-share 
csr1kv-1(config-isakmp)#group 2
csr1kv-1(config-isakmp)#lifetime 86400
csr1kv-1(config-isakmp)#exit
csr1kv-1(config)#crypto isakmp key aws address #Peer Router IP address#
csr1kv-1(config)# end
csr1kv-1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
csr1kv-1(config)#ip access-list extended vpn-traffic
csr1kv-1(config-ext-nacl)#permit ip 10.1.1.0 0.0.0.255 10.2.3.0 0.0.0.255
csr1kv-1(config-ext-nacl)#exit
csr1kv-1(config)#crypto ipsec transform-set TS esp-aes esp-md5-hmac
csr1kv-1(config-crypto-trans)# exit
csr1kv-1(config)#

IPsecの設定

csr1kv-1(config)#crypto map cmap 10 ipsec-isakmp
csr1kv-1(config-crypto-map)#set peer #Peer Router IP address#
csr1kv-1(config-crypto-map)#set transform-set TS
csr1kv-1(config-crypto-map)#match address vpn-traffic
csr1kv-1(config-crypto-map)#exit
csr1kv-1(config)#
csr1kv-1(config)#interface Gi 1
csr1kv-1(config-if)#crypto map cmap
csr1kv-1(config-if)#exit
csr1kv-1#write mem

両方のルータで設定できたらルータで通信確認
送信元をインターフェイスにするのがコツです。

csr1kv-1#ping 10.2.3.10 source gi 2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.2.3.10, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.10 
!!!!!

サーバ通信確認準備

各ルータ配下のサーバへStatic Routeを設定して通信確認を行います。

Server2での例

[ec2-user@ip-10-2-3-8 ~]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.2.3.1        0.0.0.0         UG        0 0          0 eth0
10.2.3.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH        0 0          0 eth0
[ec2-user@ip-10-2-3-8 ~]$ sudo route add -net 10.1.1.0/24 gw 10.2.3.10
[ec2-user@ip-10-2-3-8 ~]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.2.3.1        0.0.0.0         UG        0 0          0 eth0
10.1.1.0        10.2.3.10       255.255.255.0   UG        0 0          0 eth0
10.2.3.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH        0 0          0 eth0
[ec2-user@ip-10-1-1-61 ~]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG        0 0          0 eth0
10.1.1.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.2.3.0        10.1.1.10       255.255.255.0   UG        0 0          0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH        0 0          0 eth0

通信確認結果

正常にCSR1000Vの設定が行えていれば通信ができます。

Server1から、Server2へのPing通信

[ec2-user@ip-10-1-1-61 ~]$ ping 10.2.3.8
PING 10.2.3.8 (10.2.3.8) 56(84) bytes of data.
64 bytes from 10.2.3.8: icmp_seq=1 ttl=62 time=4.16 ms
64 bytes from 10.2.3.8: icmp_seq=2 ttl=62 time=4.02 ms
64 bytes from 10.2.3.8: icmp_seq=3 ttl=62 time=4.15 ms
64 bytes from 10.2.3.8: icmp_seq=4 ttl=62 time=3.93 ms
64 bytes from 10.2.3.8: icmp_seq=5 ttl=62 time=4.04 ms
^C
--- 10.2.3.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4623ms
rtt min/avg/max/mdev = 3.932/4.063/4.160/0.094 ms

Server2から、Server1へのPing通信

[ec2-user@ip-10-2-3-8 ~]$ ping 10.1.1.61
PING 10.1.1.61 (10.1.1.61) 56(84) bytes of data.
64 bytes from 10.1.1.61: icmp_seq=1 ttl=62 time=4.04 ms
64 bytes from 10.1.1.61: icmp_seq=2 ttl=62 time=3.75 ms
64 bytes from 10.1.1.61: icmp_seq=3 ttl=62 time=3.96 ms
64 bytes from 10.1.1.61: icmp_seq=4 ttl=62 time=4.04 ms
64 bytes from 10.1.1.61: icmp_seq=5 ttl=62 time=3.90 ms
^C
--- 10.1.1.61 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4969ms
rtt min/avg/max/mdev = 3.759/3.942/4.045/0.126 ms

CSR1000V ルータのVPNステータス確認

Ciscoのshowコマンドで確認します。
show crypt session
show crypt isakmp sa
show crypt ipsec sa

CSR1000v-1

csr1kv-1#show crypto session
Crypto session current status

Interface: GigabitEthernet1
Session status: UP-ACTIVE
Peer: X.X.199.237 port 4500
  Session ID: 0
  IKEv1 SA: local 10.1.2.70/4500 remote X.X.199.237/4500 Active
  IPSEC FLOW: permit ip 10.1.1.0/255.255.255.0 10.2.3.0/255.255.255.0
        Active SAs: 2, origin: crypto map

csr1kv-1#
csr1kv-1#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
X.X.199.237  10.1.2.70       QM_IDLE           1005 ACTIVE

IPv6 Crypto ISAKMP SA

csr1kv-1#
csr1kv-1#show crypto ipsec sa

interface: GigabitEthernet1
    Crypto map tag: cmap, local addr 10.1.2.70

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (10.1.1.0/255.255.255.0/0/0)
   remote ident (addr/mask/prot/port): (10.2.3.0/255.255.255.0/0/0)
   current_peer X.X.199.237 port 4500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 70, #pkts encrypt: 70, #pkts digest: 70
    #pkts decaps: 62, #pkts decrypt: 62, #pkts verify: 62
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 10.1.2.70, remote crypto endpt.: X.X.199.237
     plaintext mtu 1422, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet1
     current outbound spi: 0xC9CC9801(3385628673)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0xDDED0C2F(3723299887)
        transform: esp-aes esp-md5-hmac ,
        in use settings ={Tunnel UDP-Encaps, }
        conn id: 2007, flow_id: CSR:7, sibling_flags FFFFFFFF80004048, crypto map: cmap
        sa timing: remaining key lifetime (k/sec): (4607998/3514)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0xC9CC9801(3385628673)
        transform: esp-aes esp-md5-hmac ,
        in use settings ={Tunnel UDP-Encaps, }
        conn id: 2008, flow_id: CSR:8, sibling_flags FFFFFFFF80004048, crypto map: cmap
        sa timing: remaining key lifetime (k/sec): (4607998/3514)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:
csr1kv-1#

CSR1000V-2

csr1kv-2#show crypto session
Crypto session current status

Interface: GigabitEthernet1
Session status: UP-ACTIVE
Peer: X.X.8.84 port 4500
  Session ID: 0
  IKEv1 SA: local 10.2.4.72/4500 remote X.X.8.84/4500 Active
  IPSEC FLOW: permit ip 10.2.3.0/255.255.255.0 10.1.1.0/255.255.255.0
        Active SAs: 2, origin: crypto map

csr1kv-2#
csr1kv-2#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
10.2.4.72       X.X.8.84      QM_IDLE           1005 ACTIVE

IPv6 Crypto ISAKMP SA

csr1kv-2#
csr1kv-2#show crypto ipsec sa

interface: GigabitEthernet1
    Crypto map tag: cmap, local addr 10.2.4.72

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (10.2.3.0/255.255.255.0/0/0)
   remote ident (addr/mask/prot/port): (10.1.1.0/255.255.255.0/0/0)
   current_peer X.X.8.84 port 4500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 62, #pkts encrypt: 62, #pkts digest: 62
    #pkts decaps: 65, #pkts decrypt: 65, #pkts verify: 65
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 10.2.4.72, remote crypto endpt.: X.X.8.84
     plaintext mtu 1422, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet1
     current outbound spi: 0xDDED0C2F(3723299887)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0xC9CC9801(3385628673)
        transform: esp-aes esp-md5-hmac ,
        in use settings ={Tunnel UDP-Encaps, }
        conn id: 2007, flow_id: CSR:7, sibling_flags FFFFFFFF80000048, crypto map: cmap
        sa timing: remaining key lifetime (k/sec): (4607998/3514)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0xDDED0C2F(3723299887)
        transform: esp-aes esp-md5-hmac ,
        in use settings ={Tunnel UDP-Encaps, }
        conn id: 2008, flow_id: CSR:8, sibling_flags FFFFFFFF80000048, crypto map: cmap
        sa timing: remaining key lifetime (k/sec): (4607998/3514)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:
csr1kv-2#