简介
本文档介绍如何在Amazon Web Services云上使用Catalyst 8000v路由器设置高可用性环境。
先决条件
要求
思科建议您事先了解以下主题:
- AWS控制台及其组件的一般知识
- 了解Cisco IOS® XE软件
- HA功能基础知识。
使用的组件
此配置示例需要以下组件:
- 具有管理员角色的Amazon AWS帐户
- 运行Cisco IOS® XE 17.15.3a和1 Ubuntu 22.04 LTS虚拟机的两台C8000v设备 同一区域中的AMI
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
拓扑
根据网络要求有多种高可用性部署方案。在本示例中,HA冗余使用以下设置进行配置:
- 1x — 区域
- 1个 — VPC
- 3倍 — 可用区
- 6x — 网络接口/子网(3x面向公共/3x面向专用)
- 2x — 路由表(公共路由表和私有路由表)
- 2x - C8000v路由器(Cisco IOS® XEDenali 17.15.3a)
- 1x — 虚拟机(Linux/Windows)
一个HA对中有2台C8000v路由器,位于两个不同的可用区域中。将每个可用性区域视为独立的数据中心,以提供额外的硬件恢复能力。
第三个区域是模拟专用数据中心中的设备的VM。目前,通过公共接口启用互联网访问,以便您可以访问和配置VM。通常,所有正常流量必须通过专用路由表。
要模拟流量,请从虚拟机的专用接口发起ping,通过R1遍历专用路由表以到达8.8.8.8。发生故障转移时,请验证专用路由表是否已自动更新,以通过R2路由器的专用接口路由流量。
网络图

表摘要
总结拓扑时,请看下表,其中包含实验中每个组件的最重要值。本表中提供的信息仅用于本实验。
提示:使用此表有助于在整个指南中清晰地概述关键变量。建议收集此格式的信息以简化流程。
设备 |
可用区 |
接口 |
IP 地址 |
RTB |
埃尼 |
R1 |
us-east-1a |
GigabitEthernet1 |
10.100.10.254 |
rtb-0d0e48f25c9b00635(公共) |
eni-0645a881c13823696 |
GigabitEthernet2 |
10.100.110.254 |
rtb-093df10a4de426eb8(专用) |
eni-070e14fbfde0d8e3b |
R2 |
us-east-1b |
GigabitEthernet1 |
10.100.20.254 |
rtb-0d0e48f25c9b00635(公共) |
eni-0a7817922ffbb317b |
GigabitEthernet2 |
10.100.120.254 |
rtb-093df10a4de426eb8(专用) |
eni-0239fda341b4d7e41 |
Linux虚拟机 |
us-east-1c |
ENS5 |
10.100.30.254 |
rtb-0d0e48f25c9b00635(公共) |
eni-0b28560781b3435b1 |
ENS6 |
10.100.130.254 |
rtb-093df10a4de426eb8(专用) |
eni-05d025e88b6355808 |
限制
- 在创建的任何子网上,请勿使用该子网的第一个可用地址。这些IP地址由AWS服务在内部使用。
- 请勿在VRF中配置C8000v设备的公共接口。 如果设置了此项,则HA无法正常工作。
配置
一般配置流程侧重于在适当的区域创建所请求的虚拟机,然后向下移动到最具体的配置,例如每个虚拟机的路由和接口。但是,建议先了解拓扑,然后按所需的任意顺序进行配置。
步骤1.选择区域
在本部署指南中,美国西部(北弗吉尼亚) — 美国东部–1区域被选为VPC区域。

步骤2.创建VPC
在AWS控制台上,导航到VPC > VPC Dashboard > Create VPC。

创建VPC时,请选择仅VPC选项。您可以根据需要分配要使用的/16网络。
在本部署指南中,选择10.100.0.0/16网络:

单击创建VPC后,现在创建了带HA标记的VPC-0d30b9fa9511f3639:

步骤3.创建VPC的安全组
在AWS中,安全组与ACL类似,允许或拒绝流量流向VPC中配置的VM。在AWS控制台上,导航到VPC > VPC Dashboard > Security > Security Groups部分,然后点击Create security group。

在Inbound Rules下,定义要允许的流量。在本示例中,All Traffic通过使用0.0.0.0/0网络进行选择。

步骤4.使用策略创建IAM角色并关联到VPC
IAM授予您的AMI访问Amazon API所需的权限。C8000v用作代理,以调用AWS API命令来修改AWS中的路由表。默认情况下,EC2实例不允许访问API。因此,必须创建新的IAM角色,该角色将在AMI创建期间应用。
浏览到IAM控制面板,然后导航到访问管理>角色>创建角色。此过程包括3个步骤:

首先,选择Trusted entity type部分上的AWS Service选项,然后选择EC2作为为此策略分配的服务。

完成后,单击Next:

最后,设置Role Name并单击Create Role按钮。

步骤5.创建信任策略并将其附加到IAM角色
创建角色后,必须制定信任策略,以便在需要时获取修改AWS路由表的技能。转到IAM控制面板上的Policies部分。单击Create Policy按钮。此过程包括两个步骤:

首先,确保Policy Editor使用JSON并应用如下所示的命令。配置后,单击Next:

以下是图像中使用的文本代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AssociateRouteTable",
"ec2:CreateRoute",
"ec2:CreateRouteTable",
"ec2:DeleteRoute",
"ec2:DeleteRouteTable",
"ec2:DescribeRouteTables",
"ec2:DescribeVpcs",
"ec2:ReplaceRoute",
"ec2:DisassociateRouteTable",
"ec2:ReplaceRouteTableAssociation"
],
"Resource": "*"
}
]
}
稍后,设置Policy Name并单击Create Policy。

创建策略后,过滤并选择策略,然后单击操作下拉菜单上的附加选项。

新窗口已打开。在IAM Entities部分,过滤并选择创建的IAM角色,然后点击Attach policy。

步骤6.配置并启动C8000v实例
每个C8000v路由器将有2个接口(1个公共接口,1个专用接口),并将在其自己的可用区上创建。
在EC2 Dashboard上,单击Launch Instances:

使用名称Cisco Catalyst 8000v for SD-WAN & Routing过滤AMI数据库。在AWS Marketplace AMIs列表上,单击Select。

选择AMI的相应大小。在本例中,c5n.large大小被选中。这取决于您的网络所需的容量。选择后,单击Subscribe now。

步骤6.1.配置远程访问密钥对
订用AMI后,将显示一个包含多个选项的新窗口。在Key pair(login)部分中,如果不存在密钥对,请单击Create new key pair。您可以为每个创建的设备重复使用单个密钥。

系统将显示新的弹出窗口。在本示例中,将创建具有ED25519加密的.pem密钥文件。设置完所有内容后,单击Create key pair。

步骤6.2.创建并配置AMI的子网
在Network Settings部分中,单击Edit。部分中的一些新选项现在可用:
1.为此工作选择所需的VPC。在本示例中,选择名为HA的VPC。
2.在“防火墙(安全组)”部分,选择“选择现有安全组”。
3.选择选项2后,Common security groups选项将可用。过滤并选择所需的安全组。在本示例中,选择All traffic HA安全组。
4.(可选)如果没有为这些设备创建子网,请单击Create new subnet。

Web浏览器上一个新的选项卡打开,引导您进入创建子网部分:
1.从下拉列表中选择此配置的相应VPC。
2.设置新子网的名称。
3.定义此子网的可用性区。(有关设置的详细信息,请参阅本文档的拓扑部分)
4.设置属于VPC CIDR块的子网块。
5.此外,单击Add new subnet部分可创建将要使用的所有子网,并对每个子网重复从2到4的步骤。
6.完成后,单击创建子网。导航到上一页以继续设置。

在Network Settings部分的Subnet子部分中,单击Refresh图标在下拉列表中获取创建的子网。
步骤6.3.配置AMI接口
在Network Settings部分中,展开Advanced Network configuration子部分。将显示以下选项:

在此菜单上,设置Description、Primary IP、Delete on termination参数。
对于Primary IP参数,请使用除子网第一个可用地址以外的任何IP地址。这由AWS内部使用。
本示例中的终止时删除参数设置为否。但是,这可以设置为yes,具体取决于您的环境。
由于此拓扑,专用子网需要第二个接口。单击Add network interface,将显示此提示。但是,接口提供选择子网这一次的选项:

按照在网络接口1上设定的方式设置所有参数后,继续执行后续步骤。
步骤6.4.将IAM实例配置文件设置为AMI
在Advanced details部分下,在IAM实例配置文件参数上选择创建的IAM角色:

第6.5步(可选)在AMI上设置凭证
在Advanced details部分下,导航到User data - optional部分,并应用此设置以在创建实例时设置用户名和密码:
ios-config-1="username <username> priv 15 pass <password>"
注意:通过SSH连接到C8000v的AWS提供的用户名可能错误地列为root。如有必要,请将其更改为ec2-user。
步骤6.6.完成实例配置
完成所有配置后,单击Launch Instance:

步骤6.7.禁用ENI上的源/目标检查
创建实例后,在AWS上禁用src/dst检查功能以获得相同子网中接口之间的连接。在EC2 Dashboard > Network & Security > Network interfaces 部分中,选择ENIs,然后单击Actions >更改源/目标。检查。

此时将显示一个新窗口。在新菜单上,禁用启用复选框,然后单击保存。

步骤6.8.创建弹性IP并将其关联到实例的公共ENI
在EC2 Dashboard > Network & Security > Elastic IPs 部分中,单击Allocate Elastic IP address。

该页面引导您进入另一个部分。在本例中,选择Amazon pool of IPv4 addresses选项以及可用区域us-east-1。完成后,单击Allocate。

创建IP地址后,将IP地址分配给实例的公用接口。在EC2 Dashboard > Network & Security > Elastic IPs 部分上,单击Actions > Associate Elastic IP address。

在此新部分中,选择Network interface选项并查找相应接口的公共ENI。关联相应的公有IP地址,然后单击Associate。
注意:要获取正确的ENI ID,请导航至EC2 Dashboard > Instances部分。然后选择实例并选中Networking部分。查找公共接口的IP地址,获取同一行上的ENI值。

步骤7.重复步骤6,创建高可用性第二个C8000v实例
请参考本文档的拓扑部分,了解每个接口的相应信息,并重复从6.1到6.6的相同步骤。
步骤8.重复步骤6,从AMI市场创建VM(Linux/Windows)
在本示例中,从AMI市场中选择Ubuntu服务器22.04.5 LTS作为内部主机。
默认情况下,会为公共接口创建ens5。在本示例中,为专用子网创建第二个接口(设备上的ens6)。
ubuntu@ip-10-100-30-254:~$ sudo apt install net-tools
...
ubuntu@ip-10-100-30-254:~$ ifconfig
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 10.100.30.254 netmask 255.255.255.0 broadcast 10.100.30.255
inet6 fe80::51:19ff:fea2:1151 prefixlen 64 scopeid 0x20<link>
ether 02:51:19:a2:11:51 txqueuelen 1000 (Ethernet)
RX packets 1366 bytes 376912 (376.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1417 bytes 189934 (189.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 10.100.130.254 netmask 255.255.255.0 broadcast 10.100.130.255
inet6 fe80::3b:7eff:fead:dbe5 prefixlen 64 scopeid 0x20<link>
ether 02:3b:7e:ad:db:e5 txqueuelen 1000 (Ethernet)
RX packets 119 bytes 16831 (16.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 133 bytes 13816 (13.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意:如果对接口进行了任何更改,请摆动接口或重新加载VM以应用这些更改。
步骤9.创建并配置VPC的Internet网关(IGW)
在VPC Dashboard > Virtual private cloud > Internet gateways部分中,单击Create internet gateway。

在此新部分中,为此网关创建name标记,然后单击Create internet gateway。

创建IGW后,将其连接到相应的VPC。导航到VPC Dashboard > Virtual Private Cloud > Internet Gateway部分并选择相应的IGW。单击操作>连接到VPC。

在此新部分中,选择名为HA的VPC。对于此示例,请单击连接互联网网关。

IGW必须如图所示指示连接状态:

步骤10.在AWS上创建并配置公共子网和专用子网的路由表
步骤10.1.创建并配置公共路由表
要在此拓扑上建立HA,请将所有公共子网和专用子网关联到其相应的路由表中。在VPC Dashboard > Virtual Private Cloud > Route tables部分中,单击Create route table。

在新部分中,为此拓扑选择对应的VPC。选中后,单击Create route table。

在路由表部分中,选择创建的表,然后单击操作>编辑子网关联。

然后,选择对应的子网,然后单击保存关联。

关联子网后,单击Route table ID超链接为表添加正确的路由。然后,单击Edit Routes:

要访问Internet,请单击Add route并将此公共路由表与IGW链接,该IGW是在第9步使用这些参数创建的。选中后,单击Save changes:

步骤10.2.创建并配置专用路由表
创建公共路由表后,除了在其路由上添加Internet网关外,还要为私有路由和私有子网复制步骤10。在本示例中,路由表如下所示,因为8.8.8.8的流量必须通过本示例中的专用子网:

步骤11.检查并配置基本网络配置、网络地址转换(NAT)、具有BFD的GRE隧道和路由协议
在AWS上准备好实例及其路由配置后,请配置设备:
C8000v R1配置:
interface Tunnel1
ip address 192.168.200.1 255.255.255.0
bfd interval 500 min_rx 500 multiplier 3
tunnel source GigabitEthernet1
tunnel destination <Public IPv4 address of C8000v R2>
!
interface GigabitEthernet1
ip address 10.100.10.254 255.255.255.0
ip nat outside
negotiation auto
!
interface GigabitEthernet2
ip address 10.100.110.254 255.255.255.0
ip nat inside
negotiation auto
!
router eigrp 1
bfd interface Tunnel1
network 192.168.200.0
passive-interface GigabitEthernet1
!
ip access-list standard 10
10 permit 10.100.130.0 0.0.0.255
!
ip nat inside source list 10 interface GigabitEthernet1 overload
!
ip route 0.0.0.0 0.0.0.0 GigabitEthernet1 10.100.10.1
ip route 10.100.130.0 255.255.255.0 GigabitEthernet2 10.100.110.1
C8000v R2配置:
interface Tunnel1
ip address 192.168.200.2 255.255.255.0
bfd interval 500 min_rx 500 multiplier 3
tunnel source GigabitEthernet1
tunnel destination<Public IPv4 address of C8000v R1>
!
interface GigabitEthernet1
ip address 10.100.20.254 255.255.255.0
ip nat outside
negotiation auto
!
interface GigabitEthernet2
ip address 10.100.120.254 255.255.255.0
negotiation auto
!
router eigrp 1
bfd interface Tunnel1
network 192.168.200.0
passive-interface GigabitEthernet1
!
ip route 0.0.0.0 0.0.0.0 GigabitEthernet1 10.100.20.1
ip route 10.100.130.0 255.255.255.0 GigabitEthernet2 10.100.120.1
!
ip access-list standard 10
10 permit 10.100.130.0 0.0.0.255
!
ip nat inside source list 10 interface GigabitEthernet1 overload
!
ip route 0.0.0.0 0.0.0.0 GigabitEthernet1 10.100.20.1
ip route 10.100.130.0 255.255.255.0 GigabitEthernet2 10.100.120.1
步骤12.配置高可用性(Cisco IOS® XE Denali 16.3.1a或更高版本)
设置了VM之间的冗余和连接后,请配置HA设置以定义路由更改。设置Route-table-id、Network-interface-id和CIDR.值,这些值在AWS HA错误(例如BFD对等体关闭)后必须设置。
Router(config)# redundancy
Router(config-red)# cloud provider aws (node-id)
bfd peer <IP address of the remote device>
route-table <Route table ID>
cidr ip <traffic to be monitored/prefix>
eni <Elastic network interface (ENI) ID>
region <region-name>
bfd peer参数与隧道对等IP地址相关。可使用show bfd neighbor输出检查此情况:
R1(config)#do sh bfd neighbors
IPv4 Sessions
NeighAddr LD/RD RH/RS State Int
192.168.200.2 4097/4097 Up Up Tu1
route-table参数与位于VPC Dashboard > Virtual Private Cloud > Route Tables部分中的专用路由表ID相关。复制相应的路由表ID。

cidr ip参数与私有路由表中添加的路由前缀相关(步骤10.2中创建的路由):

eni参数与所配置实例的相应专用接口的ENI ID相关。在本示例中,使用实例接口GigabitEthernet2的ENI ID:

region参数与VPC所在区域的AWS文档中的代码名称相关。在本示例中,使用us-east-1区域。
但是,此列表可以更改或增加。要查找最新更新,请访问AmazonRegion and Availability Zonesdocument文档。
考虑到所有这些信息,下面是VPC中每台路由器的配置示例:
C8000v R1的配置示例:
redundancy
cloud provider aws 1
bfd peer 192.168.200.2
route-table rtb-093df10a4de426eb8
cidr ip 8.8.8.8/32
eni eni-070e14fbfde0d8e3b
region us-east-1
C8000v R2的配置示例:
redundancy
cloud provider aws 1
bfd peer 192.168.200.1
route-table rtb-093df10a4de426eb8
cidr ip 8.8.8.8/32
eni eni-0239fda341b4d7e41
region us-east-1
确认
1.检查C8000v R1实例状态。确认隧道和云冗余已启动且正在运行。
R1#show bfd neighbors
IPv4 Sessions
NeighAddr LD/RD RH/RS State Int
192.168.200.2 4097/4097 Up Up Tu1
R1#show ip eigrp neighbors
EIGRP-IPv4 Neighbors for AS(1)
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 192.168.200.2 Tu1 10 00:16:52 2 1470 0 2
R1#show redundancy cloud provider aws 1
Provider : AWS node 1
BFD peer = 192.168.200.2
BFD intf = Tunnel1
route-table = rtb-093df10a4de426eb8
cidr = 8.8.8.8/32
eni = eni-070e14fbfde0d8e3b
region = us-east-1
2.从路由器后面的主机VM连续对8.8.8.8执行ping操作。请确保ping通过专用接口:
ubuntu@ip-10-100-30-254:~$ ping -I ens6 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.100.130.254 ens6: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=1.36 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=1.30 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=1.34 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=114 time=1.28 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=114 time=1.31 ms
3.打开AWS WebGUI并检查路由表的状态。当前ENI属于R1实例的专用接口:

4.通过关闭R1实例上的Tunnel1接口来模拟HA故障切换事件,从而触发路由更改:
R1#config t
R1(config)#interface tunnel1
R1(config-if)#shut
5.再次查看AWS上的route 表,ENI ID已更改为R2的专用接口ENI ID:

故障排除
以下是重新创建部署时经常遗忘/配置错误的大部分常见问题:
- 确保资源已关联。创建VPC、子网、接口、路由表等时,其中许多接口不会自动相互关联。他们彼此并不了解。
- 确保Elastic IP和任何私有IP与正确的接口、正确的子网、添加到正确的路由表、连接到正确的路由器,以及与IAM角色和安全组链接的正确的VPC和区域。
- 禁用每个ENI的源/目标检查。
如果您已经检查了本部分讨论的所有要点,但问题仍然存在,请收集这些输出,测试高可用性故障切换(如果可能),并使用Cisco TAC创建案例:
show redundancy cloud provider aws <node-id>
debug redundancy cloud all
debug ip http all