目录

简介

先决条件

要求

使用的组件

目标

拓扑

网络图

术语

限制

配置

步骤1.选择区域。

步骤2.创建VPC。

步骤3.创建VPC的安全组。

步骤4.使用策略创建IAM角色并将其与VPC关联。

步骤5.使用您创建的AMI角色启动CSR1000v并关联公共/专用子网。

步骤6.重复步骤5，为HA创建第二个CSR1000v实例。

步骤7.重复步骤5并从AMI应用商店创建VM(Linux/Windows)。

步骤8.配置私有路由表和公共路由表。

步骤9.使用BFD和任何路由协议配置网络地址转换(NAT)和GRE隧道。

步骤10.配置高可用性（Cisco IOS XE Denali 16.3.1a或更高版本）。

验证高可用性

故障排除

问题：httpc_send_request失败

问题：路由表rtb-9c0000f4和接口eni-32791318属于不同的网络

问题：您无权执行此操作。编码授权失败消息。

相关信息

简介

本文档介绍如何在Amazon AWS云上部署CSR1000v路由器以实现高可用性的配置指南。它旨在向用户提供高可用性实用知识以及部署全功能测试平台的能力。

有关AWS和HA的更多深入背景，请参阅部分。

先决条件

要求

Cisco 建议您了解以下主题：

- Amazon AWS账户

- 同一区域中有2个CSR1000v和1个Linux/Windows AMI

- Cisco IOS-XE®版本16.5至16.9支持HA版本1。  从16.11及以上版本使用HA版本3。

使用的组件

本文档中的信息基于Cisco IOS-XE® Denali 16.7.1。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

目标

在多可用区环境中，模拟从专用数据中心(VM)到互联网的连续流量。模拟HA故障切换，观察到HA成功时，路由表确认流量从CSRHA切换到CSRHA1的专用接口。

拓扑

在配置开始之前，必须完全了解拓扑和设计。这有助于排除以后可能出现的任何问题。

根据网络要求有多种高可用性部署方案。在本示例中，HA冗余使用以下设置进行配置：

- 1x — 区域

- 1个 — VPC

- 3倍 — 可用区

- 6x — 网络接口/子网（3x面向公共/3x面向专用）

- 2x — 路由表（公共和专用）

- 2x - CSR1000v路由器(Cisco IOS-XE® Denali 16.3.1a或更高版本)

- 1x — 虚拟机(Linux/Windows)

一个高可用性对中有2个CSR1000v路由器，位于两个不同的可用区域中。将每个可用性区域视为独立的数据中心，以提供额外的硬件恢复能力。

第三个区域是模拟专用数据中心中的设备的VM。目前，通过上的公共接口启用互联网访问，以便您可以访问和配置VM。通常，所有正常流量应流经专用路由表。

从CSRHA 8.8.8.8→流量模→中→VM的专用接口和专用路由表。在故障切换场景中，观察专用路由表已将路由切换到指向CSRHA1的专用接口。

网络图

术语

RTB — 路由表ID。

CIDR — 要在路由表中更新的路由的目标地址。

ENI — 流量路由到的CSR 1000v千兆接口的网络接口ID。

例如，如果CSRHA发生故障，则CSRHA1会接管并更新AWS路由表中的路由，以指向自己的ENI。

区域 — CSR 1000v的AWS区域。

限制

- 对于专用子网，请勿使用IP地址10.0.3.0/24 — 此地址在内部用于Cisco CSR 1000v，以实现高可用性。Cisco CSR 1000v需要具有公共互联网访问能力，才能进行更改AWS路由表的REST API调用。

- 请勿将CSR1000v的gig1接口置于VRF中。  HA无法正常工作。

配置

一般配置流程是从最顶层的功能（区域/VPC）开始，然后向下移动到最具体的功能（接口/子网）。 但是，没有特定的配置顺序。开始之前，首先了解拓扑很重要。

提示：为您的所有设置（VPC、接口、子网、路由表等）指定名称。

步骤1.选择区域。

本示例使用US West（俄勒冈）。

步骤2.创建VPC。

1. 在AWS控制台上，导航到VPC > VPC Dashboard > Start VPC Wizard。

2. 选择具有单个公共子网的VPC。

3. 创建VPC时，系统会为您分配一个/16网络，供您随意使用。

4. 系统还会为您分配一个/24公共子网。公共子网实例使用设备访问互联网的弹性IP或公共IP。

5. vpc-b98d8ec0已创建。

步骤3.创建VPC的安全组。

安全组类似于允许或拒绝流量的ACL。

1. 在Security下，点击Security Groups和Create your Security Group，与上面创建的名为HA的VPC关联。

2. 在Inbound Rules下，定义要允许sg-1cf47d6d的流量。在本示例中，您允许所有流量。

步骤4.使用策略创建IAM角色并将其与VPC关联。

IAM授予您对Amazon API的CSR访问权限。

CSR1000v用作代理，以调用AWS API命令来修改路由表。默认情况下，不允许AMI访问API。此过程将创建IAM角色，并在CSR实例启动期间使用此角色。IAM为CSR提供使用和修改AWS API的访问凭证。

1. 创建IAM角色。浏览到IAM控制面板，然后导航到Roles > Create Role，如图所示。

2. 如图所示，允许EC2实例代表您调用AWS。

3. 创建角色并点击下一步：复查，如图所示。

4. 为其指定角色名称。在本示例中，如图所示，角色名称为routetablechange。

5. 接下来，您需要创建一个策略，并将其附加到上面创建的角色。IAM控制面板，并导航至策略>创建策略。

{

"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": "*"

}

]

}

6. 为其指定策略名称，并将其附加到您创建的角色。在本示例中，策略名称称为具有管理员访问权限的CSRHA，如图所示。

7. 如图所示，将策略附加到您创建的名为routetablechange的角色。

8. 摘要.

步骤5.使用您创建的AMI角色启动CSR1000v并关联公共/专用子网。

每个CSR1000v路由器有2个接口（1个公共接口，1个专用接口），并且位于自己的可用区中。您可以将每个CSR视为位于单独的数据中心。

1. 在AWS控制台上，选择EC2，然后单击Launch Instance。

2. 选择AWS Marketplace。

3. 输入CSR1000v，对于此示例，您使用思科云服务路由器(CSR)1000V - BYOL实现最佳性能。

4. 选择实例类型。在本示例中，选择的类型为t2.medium。

5. 配置实例时，您需要确保选择上面创建的VPC以及上面的IAM角色。此外，创建与面向专用接口的专用子网。

6. 点击Create new Subnet for Private Subnet。在本示例中，Name标签为HA Private。确保它与公共子网位于同一可用区域。

7. 向下滚动并点击Configure Instance Details下的Add Device，如图所示。

8. 添加辅助接口后，关联您创建的名为HA Private的专用子网。Eth0是面向公共的接口，Eth1是面向私有接口的接口。
注意：在上一步骤中创建的子网可能不会出现在此下拉列表中。您可能需要刷新或取消页面，然后重新开始才能显示子网。

9. 选择您在VPC下创建的安全组，并确保规则定义正确。

10. 创建新的密钥对并确保下载您的私钥。您可以为每个设备重复使用一个密钥。
注意：如果您丢失了私钥，则无法再次登录您的CSR。没有恢复密钥的方法。

11. 将所创建实例的弹性IP与公共接口的ENI关联，然后导航至AWS控制台> EC2管理>网络安全>弹性IP。
注意：公共术语/私人术语可能会让您感到困惑。在本示例中，公共接口的定义是Eth0，它是面向互联网的接口。从AWS的角度来看，我们的公共接口是他们的私有IP。

12. 导航到EC2 > Network Interfaces时，禁用Source/Dest Check。检验每个ENI以进行源/目标检查。
默认情况下，所有ENI都启用此源/目标检查。一种反欺骗功能，通过验证ENI是流量的目的地后再转发流量，避免让ENI出现并非真正针对它的流量。路由器很少是数据包的实际目的地。必须在所有CSR传输ENI上禁用此功能，否则无法转发数据包。

13. 连接到您的CSR1000v。
注意：AWS提供的通过SSH连接到CSR1000v的用户名可能错误地列为根。如有必要，请将其更改为ec2-user。

注意：在中必须能ping通SSH的DNS地址。此处为ec2-54-208-234-64.compute-1.amazonaws.com。检查路由器的公共子网/eni是否与公共路由表关联。简要转到步骤8，了解如何将该子网与路由表关联。

步骤6.重复步骤5，为HA创建第二个CSR1000v实例。

公共子网：  10.16.1.0/24

专用子网：10.16.5.0/24

如果无法ping通这个新AMI的弹性IP地址，请简要转到步骤8，确保公共子网与公共路由表关联。

步骤7.重复步骤5并从AMI应用商店创建VM(Linux/Windows)。

在本示例中，请在市场中使用Ubuntu Server 14.04 LTS。

公共子网：  10.16.2.0/24

专用子网：10.16.6.0/24

如果无法ping通这个新AMI的弹性IP地址，请简要转到步骤8，确保公共子网与公共路由表关联。

1. 默认情况下，会为公共接口创建Eth0。为专用子网创建另一个名为eth1的接口。

2. 您在Ubuntu中配置的IP地址是AWS分配的eth1私有接口。
ubuntu@ip-10-16-2-139:~$ cd /etc/network/interfaces.d/

ubuntu@ip-10-16-2-139:/etc/network/interfaces.d$ sudo vi eth1.cfg

auto eth1

iface eth1 inet static

address 10.16.6.131

netmask 255.255.255.0

network 10.16.6.0

up route add -host 8.8.8.8 gw 10.16.6.1 dev eth1

3. 摆动接口或重新启动VM。
ubuntu@ip-10-16-2-139:/etc/network/interfaces.d$ sudo ifdown eth1 && sudo ifup eth1

ubuntu@ip-10-16-2-139:/etc/network/interfaces.d$ sudo reboot

4. Ping 8.8.8.8进行测试。确保已在步骤7中添加了8.8.8.8路由。
ubuntu@ip-10-16-2-139:~$ route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 10.16.2.1 0.0.0.0 UG 0 0 0 eth0

8.8.8.8 10.16.6.1 255.255.255.255 UGH 0 0 0 eth1     <--------------

10.16.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

10.16.6.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

如果表中未列出8.8.8.8，请手动添加：

ubuntu@ip-10-16-2-139:~$ sudo route add -host 8.8.8.8 gw 10.16.6.1 dev eth1

步骤8.配置私有路由表和公共路由表。

1. 通过步骤2中的向导创建VPC时，会自动创建两个路由表。如果只有一个路由表，请为您的专用子网创建另一个路由表，如图所示。

2. 以下是两个路由表的视图。公共路由表自动连接了互联网网关(igw-95377973)。相应地标记这两个表。PRIVATE表不应包含此路由。

3. 将所有6个子网关联到正确的路由表
3个公共接口与公共路由表关联：

公共子网：10.16.0.0/24，10.16.1.0/24，10.16.2.0/24

3个专用接口与专用路由表关联：

专用子网：10.16.4.0/24，10.16.5.0/24，10.16.6.0/24

步骤9.使用BFD和任何路由协议配置网络地址转换(NAT)和GRE隧道。

通过CSR 1000v的弹性IP配置通用路由封装(GRE)隧道（建议避免检测虚假故障的DHCP租用续约问题。） 如果需要更快的收敛，则可以将双向转发检测(BFD)值配置为比本示例所示值更主动。但是，这可能会导致在间歇性连接期间发生BFD对等体关闭事件。本示例中的值在1.5秒内检测对等体故障。执行AWS API命令的时间与VPC路由表更改生效的时间之间大约有几秒的可变延迟。

- CSRHA上的配置

GRE和BFD — 用于观察HA故障切换条件

interface Tunnel1

ip address 192.168.1.1 255.255.255.0

bfd interval 500 min_rx 500 multiplier 3

tunnel source GigabitEthernet1

tunnel destination 52.10.183.185 /* Elastic IP of the peer CSR */

!

router eigrp 1

bfd interface Tunnel1

network 192.168.1.0

passive-interface GigabitEthernet1

NAT和路由 — 用于通过专用接口访问虚拟机互联网

interface GigabitEthernet1

ip address dhcp

ip nat outside

no shutdown

!

interface GigabitEthernet2

ip address dhcp

ip nat inside

no shutdown

!

ip nat inside source list 10 interface GigabitEthernet1 overload

!

access-list 10 permit 10.16.6.0 0.0.0.255

!

ip route 10.16.6.0 255.255.255.0 GigabitEthernet2 10.16.4.1

- CSRHA1上的配置

GRE和BFD — 用于观察HA故障切换条件

interface Tunnel1

ip address 192.168.1.2 255.255.255.0

bfd interval 500 min_rx 500 multiplier 3

tunnel source GigabitEthernet1

tunnel destination 50.112.227.77 /* Elastic IP of the peer CSR */

!

router eigrp 1

bfd interface Tunnel1

network 192.168.1.0

passive-interface GigabitEthernet1

NAT和路由 — 用于通过专用接口访问虚拟机互联网

interface GigabitEthernet1

ip address dhcp

ip nat outside

no shutdown

!

interface GigabitEthernet2

ip address dhcp

ip nat inside

no shutdown

!

ip nat inside source list 10 interface GigabitEthernet1 overload

!

access-list 10 permit 10.16.6.0 0.0.0.255

!

ip route 10.16.6.0 255.255.255.0 GigabitEthernet2 10.16.5.1

步骤10.配置高可用性（Cisco IOS XE Denali 16.3.1a或更高版本）。

使用下面指定的cloud provider aws命令配置每个CSR 1000v，监控BFD对等体关闭事件。在检测到AWS HA错误（例如BFD对等体关闭）后，使用此命令定义对(VPC)Route-table-id、Network-interface-id和CIDR的路由更改。

CSR(config)# redundancy

CSR(config-red)# cloud provider [aws | azure] node-id

# bfd peer ipaddr

# route-table table-name

# cidr ip ipaddr/prefix

# eni elastic-network-intf-name

# region region-name

1. 第#bfd对等ipaddr是对等隧道ip地址。
CSRHA#show bfd neighbors

IPv4 Sessions

NeighAddr LD/RD RH/RS State Int

192.168.1.2 4097/4097 Up Up Tu1

2. 在AWS#route-table制台下可以找到路由表名称，请导航至VPC >路由表。此操作会更改专用路由表。

3. #cidr ip ipaddr/prefix是要更新路由在路由表中的目标地址。在AWS控制台下，导航至VPC >路由表。向下滚动，单击Edit，然后单击Add another route。添加我们的测试目的地址8.8.8.8和CSRHA的私有ENI。

4. EC#eni实例中提供了elastic-network-intf-name。点击每个相应CSR的面向专用接口eth1并使用接口ID。

5. AWS#region称是在AWS文档中找到的代码名称。此列表可能会更改或增加。要查找最新更新，请访问Amazon的区域和可用区文档。

CSRHA上的冗余配置示例

redundancy

cloud provider aws 1

bfd peer 192.168.1.2

route-table rtb-ec081d94

cidr ip 8.8.8.8/32

eni eni-90b500a8

region us-west-2

CSRHA1上的冗余配置示例

redundancy

cloud provider aws 1

bfd peer 192.168.1.1

route-table rtb-ec081d94

cidr ip 8.8.8.8/32

eni eni-10e3a018

region us-west-2

验证高可用性

1. 检查BFD和云配置。
CSRHA#show bfd nei

IPv4 Sessions

NeighAddr LD/RD RH/RS State Int

192.168.1.2 4097/4097 Up Up Tu1

CSRHA#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.1.2 Tu1 12 00:11:57 1 1470 0 2

CSRHA#show redundancy cloud provider aws 1

Cloud HA: work_in_progress=FALSE

Provider : AWS node 1

State : idle

BFD peer     = 192.168.1.2

BFD intf     = Tunnel1

route-table  = rtb-ec081d94

cidr         = 8.8.8.8/32

eni          = eni-90b500a8

region       = us-west-2

2. 从VM对目标运行连续ping。确保ping通过专用eth1接口。
ubuntu@ip-10-16-3-139:~$ ping -I eth1 8.8.8.8

PING 8.8.8.8 (8.8.8.8) from 10.16.6.131 eth1: 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=1.60 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=1.62 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=1.57 ms

3. 检查专用路由表。Eni当前是CSRHA的专用接口，这是流量。

4. 关闭CSRHA的Tunnel1以模拟HA故障切换。
CSRHA(config)#int Tun1

CSRHA(config-if)#shut

5. 请注意，路由表指向新的ENI，即CSRHA1的专用接口。

故障排除

- 确保资源已关联。当创建VPC、子网、接口、路由表等时，其中许多接口不会自动相互关联。他们彼此并不了解。

- 确保Elastic IP和所有私有IP与正确的接口关联，将正确的子网添加到正确的路由表中，连接到正确的路由器以及正确的VPC和区域，并与IAM角色和安全组关联。

- 禁用每个ENI的源/目标检查。

- 对于Cisco IOS XE 16.3.1a或更高版本，这是可用的附加验证命令。

show redundancy cloud provider [aws | azure] node-id

debug redundancy cloud [all | trace | detail | error]

debug ip http all

- 以下是调试中常见的故障：

问题：httpc_send_request失败

分辨率：Http用于从CSR向AWS发送API调用。确保DNS可以解析实例中列出的DNS名称。确保http流量未被阻止。

*May 30 20:08:06.922: %VXE_CLOUD_HA-3-FAILED: VXE Cloud HA BFD state transitioned, AWS node 1 event httpc_send_request failed

*May 30 20:08:06.922: CLOUD-HA : AWS node 1 httpc_send_request failed (0x12)

URL=http://ec2.us-east-2b.amazonaws.com

问题：路由表rtb-9c0000f4和接口eni-32791318属于不同的网络

分辨率：不同网络中的区域名称和ENI配置不正确。区域和ENI应与路由器处于同一区域。

*May 30 23:38:09.141: CLOUD-HA : res content iov_len=284 iov_base=<?xml version="1.0" encoding="UTF-8"?>

<Response><Errors><Error><Code>InvalidParameterValue</Code><Message>route table rtb-9c0000f4 and interface eni-32791318 belong to different networks</Message></Error></Errors><RequestID>af3f228c-d5d8-4b23-b22c-f6ad999e70bd</RequestID></Response>

问题：您无权执行此操作。编码授权失败消息。

分辨率：IAM JSON角色/策略创建错误或未应用于CSR。IAM角色授权CSR进行API调用。

*May 30 22:22:46.437: CLOUD-HA : res content iov_len=895 iov_base=<?xml version="1.0" encoding="UTF-8"?>

<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation. Encoded

authorization failure message: qYvEB4MUdOB8m2itSteRgnOuslAaxhAbDph5qGRJkjJbrESajbmF5HWUR-MmHYeRAlpKZ3Jg_y-_tMlYel5l_ws8Jd9q2W8YDXBl3uXQqfW_cjjrgy9jhnGY0nOaNu65aLpfqui8kS_4RPOpm5grRFfo99-8uv_N3mYaBqKFPn3vUcSYKBmxFIIkJKcjY9esOeLIOWDcnYGGu6AGGMoMxWDtk0K8nwk4IjLDcnd2cDXeENS45w1PqzKGPsHv3wD28TS5xRjIrPXYrT18UpV6lLA_09Oh4737VncQKfzbz4tPpnAkoW0mJLQ1vDpPmNvHUpEng8KrGWYNfbfemoDtWqIdABfaLLLmh4saNtnQ_OMBoTi4toBLEb2BNdMkl1UVBIxqTqdFUVRS**MSG 00041 TRUNCATED**

**MSG 00041 CONTINUATION #01**qLosAb5Yx0DrOsLSQwzS95VGvQM_n87LBHYbAWWhqWj3UfP_zmiak7dlm9P41mFCucEB3Cs4FRsFtb-9q44VtyQJaS2sU2nhGe3x4uGEsl7F1pNv5vhVeYOZB3tbOfbV1_Y4trZwYPFgLKgBShZp-WNmUKUJsKc1-6KGqmp7519imvh66JgwgmU9DT_qAZ-jEjkqWjBrxg6krw</Message></Error></Errors><RequestID>4cf31249-2a6e-4414-ae8d-6fb825b0f398</RequestID></Response>

相关信息

- VPC网关冗余 — 思科

- 适用于Amazon Web Services的思科CSR 1000v系列云服务路由器部署指南

- 实例类型细分

- EC2和VPC

- 《EC2用户指南》中的“弹性网络接口”包括每种实例类型的ENI数量

- 增强的Linux网络操作指南，有用的背景信息

- 专用实例/租户说明和操作说明

- 一般EC2文档

- 一般VPC文档

- 区域和可用区域

- CSR1000v高可用性版本3