

# 使用 VPC Route Server 在 VPC 中动态路由
<a name="dynamic-routing-route-server"></a>

Amazon VPC Route Server 简化了部署在 VPC 内的工作负载与其互联网网关之间的流量路由。借助此功能，VPC Route Server 使用首选的 IPv4 或 IPv6 路由动态更新 VPC 和互联网网关路由表，以实现对这些工作负载的路由容错能力。这使您能够自动重新路由 VPC 内的流量，从而提高 VPC 路由的可管理性，以及与第三方工作负载的互操作性。

路由服务器支持以下路由表类型：
+ 未与子网关联的 VPC 路由表
+ 子网路由表
+ 互联网网关路由表

路由服务器不支持与虚拟专用网关关联的路由表。要将路由传播到中转网关路由表，请使用 [Transit Gateway Connect](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html)。

**配额**

有关与 Amazon VPC Route Server 相关的配额，请参阅[路由服务器配额](amazon-vpc-limits.md#vpc-limits-route-servers)。

**定价**

有关与 Amazon VPC Route Server 相关费用的信息，请参阅 Amazon VPC 定价页面上的 [VPC 路由服务器](https://aws.amazon.com/vpc/pricing/)选项卡。

**Topics**
+ [术语](route-server-terms.md)
+ [Amazon VPC Route Server 的工作原理](route-server-how-it-works.md)
+ [路由服务器对等日志记录](route-server-peer-logging.md)
+ [入门教程](route-server-tutorial.md)

# 术语
<a name="route-server-terms"></a>

本指南中使用了以下术语：
+ **FIB**：[转发信息库（FIB）](https://en.wikipedia.org/wiki/Forwarding_information_base)用作路由服务器在评估所有可用路由信息和策略后确定为 RIB 中最佳路径路由的转发表。安装在路由表上的 FIB 路由。每当 RIB 发生变化时，就会重新计算 FIB。
+ **RIB**：[路由信息库（RIB）](https://en.wikipedia.org/wiki/Routing_table)是一个数据库，用于存储路由器或路由系统收集的所有路由信息和网络拓扑数据，例如从 BGP 对等获取的路由。当收到新的路由信息或现有路由发生变化时，RIB 会不断更新。这样可以确保路由服务器始终拥有最新的网络拓扑视图，并能够做出最佳的路由决策。
+ **路由服务器**：路由服务器组件使用转发信息库（FIB）中的 IPv4 或 IPv6 路由更新您的 VPC 和互联网网关路由表。路由服务器代表单个 FIB 和路由信息库（RIB）。
+ **路由服务器关联**：路由服务器关联是在路由服务器与 VPC 之间建立的连接。
+ **路由服务器端点**：路由服务器端点是子网内的 AWS 托管组件，可促进路由服务器与 BGP 对等之间的 [BGP（边界网关协议）](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)连接。
+ **路由服务器对等**：路由服务器对等是路由服务器端点与部署在 AWS 中的设备（例如在 EC2 实例上运行的防火墙设备或其他网络安全功能）之间的会话。设备必须满足以下要求：
  + 在 VPC 中有弹性网络接口
  + 支持 BGP（边界网关协议）
  + 可以启动 BGP 会话
+ **路由服务器传播**：启用后，路由服务器传播会将路由安装到指定路由表的 FIB 中。路由服务器支持 IPv4 和 IPv6 路由传播。

# Amazon VPC Route Server 的工作原理
<a name="route-server-how-it-works"></a>

本节说明 Amazon VPC Route Server 的工作原理，并帮助您了解其如何为子网中运行的工作负载实现路由容错能力。

**Topics**
+ [概述](#route-server-overview)
+ [示意图](#route-server-diagrams)

## 概述
<a name="route-server-overview"></a>

Amazon VPC Route Server 的工作原理：

1. 您可以将网络设备（例如在 VPC 中 EC2 实例上运行的防火墙）配置为使用 Amazon VPC Route Server。

1. 网络设备出现故障。

1. 路由服务器端点通过在路由服务器对等上配置的 [BFD（双向转发检测）](https://en.wikipedia.org/wiki/Bidirectional_Forwarding_Detection)来检测故障。

1. 路由服务器端点会更新路由服务器，以从故障设备所在的下一个跃点的跳[路由信息库（RIB）](https://en.wikipedia.org/wiki/Routing_table)中撤回路由。

1. 路由服务器从 RIB 计算[转发信息库（FIB）](https://en.wikipedia.org/wiki/Forwarding_information_base)，选择最佳可用路由。

1. 路由服务器使用来自 FIB 的路由更新配置的路由表。

1. 所有新流量都将转发到备用设备。

## 示意图
<a name="route-server-diagrams"></a>

以下是为两个子网中的设备配置路由服务器端点的 VPC 路由服务器示例图。

![\[基本 Amazon VPC Route Server 设置\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/route-server-main.png)


以上面的示例为基准，下面的示例显示了一个更详细的设计，其中设备 A 和设备 B 都通过 BGP 通告其可以接受目标 IP 在 192.0.0.0/24 范围内（从 192.0.0.0 到 192.0.0.255 ）的任何流量。MED（多出口标识）属性为 0 告诉路由服务器，设备 A 应该优先于设备 B。路由服务器从设备 A 接收路由和 MED 属性，并将该路由安装到子网路由表中，将设备 A 的网络接口作为“下一个跃点”。因此，子网内目标 IP 在 192.0.0.0/24 范围内的任何流量都将发送到设备 A。然后设备 A 将处理该流量并将其继续发送。任一子网（10.0.0.0/24 或 10.0.1.0/24）内发往 192.0.0.0/24 的流量将路由到设备 A eni-abcd（10.0.0.1），作为下一个跃点。

![\[在设备 A 出现故障之前设置 Amazon VPC Route Server\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/route-server-failover-part-1.png)


下面的最后一个示例显示了路由服务器如何处理失效转移。虽然较高的 MED 属性告诉路由服务器设备 B 的优先级低于设备 A，但如果设备 A eni-abcd（10.0.0.1）发生故障，则路由服务器会更新子网路由表，并将发往 192.0.0.0/24 的流量路由到设备 B eni-efgh（10.0.1.1）作为下一个跃点。

![\[Amazon VPC Route Server 失效转移到设备 B\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/route-server-failover-part-2.png)


# 路由服务器对等日志记录
<a name="route-server-peer-logging"></a>

当需要执行以下操作时，请使用 VPC 路由服务器对等日志记录：
+ 监控 BGP 和 BFD 会话运行状况
+ 排查连接问题
+ 查看历史会话更改
+ 跟踪网络状态

## 定价
<a name="pricing"></a>
+ **CloudWatch**：当您将路由服务器对等日志发布到 CloudWatch Logs 时，将收取已出售日志的数据摄取和存档费用。
+ **S3**：当您将路由服务器对等日志发布到 Amazon S3 时，将收取已出售日志的数据摄取和存档费用。
+ **Data Firehose**：收取标准摄取和传输费用。

已出售日志是来自特定 AWS 服务的日志，这些服务按批量分层定价提供，并传送到 CloudWatch Logs、Amazon S3 或 Amazon Data Firehose。有关更多信息，请打开 **Amazon CloudWatch Pricing**（Amazon CloudWatch 定价），选择 **Logs**（日志），找到 [Vended Logs](https://aws.amazon.com//cloudwatch/pricing/)（已出售日志）。

## 日志格式示例
<a name="example-log-format"></a>

```
{
    "resource_arn": "arn:aws:ec2:us-east-1:111122223333:route-server-peer/rsp-1234567890abcdef0",
    "event_timestamp": 1746643505367,
    "type": "RouteStatus",
    "status": "ADVERTISED",
    "message": {
        "prefix": "10.24.34.0/32",
        "asPath": "65000",
        "med": 100,
        "nextHopIp": "10.24.34.1"
    }
}

{
    "resource_arn": "arn:aws:ec2:us-east-1:111122223333:route-server-peer/rsp-1234567890abcdef0",
    "event_timestamp": 1746643490000,
    "type": "BGPStatus",
    "status": "UP",
    "message": null
}
```

其中：
+ `resource_arn` 是路由服务器对等体的 ARN。
+ `event_timestamp` 是事件的时间戳。
+ 我们生成的日志事件的 `type`（`RouteStatus`、`BGPStatus`、`BFDStatus`）。
+ `status` 字段是状态更新。
  + 对于 `RouteStatus` 类型消息
    + `ADVERTISED`（路由由对等体公布）
    + `UPDATED`（现有路由由对等体更新）
    + `WITHDRAWN`（路由由对等体撤回）
  + 对于 `BFDStatus` 和 `BGPStatus` 更新
    + `UP`, `DOWN`.
+ `message` 字段当前仅用于 RouteStatus 消息类型的路由属性，但可以填充任何类型的相关信息。

------
#### [ AWS Management Console ]

要创建路由服务器对等日志：

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中的**虚拟私有云**下，选择**路由服务器**。

1. 在**路由服务器**页面上，选择**路由服务器对等**。

1. 选择**日志传输**选项卡。

1. 选择**添加日志传输**。

1. 选择一个目的地并配置设置：
   + Amazon CloudWatch Logs
     + **日志类型**：要传输的日志类型。唯一支持的日志类型是 EVENT\$1LOGS。
     + **目的地日志组**：将发送日志的 CloudWatch 日志组。您可以选择一个现有日志组或创建一个新的日志组（例如：/aws/vpc/route-server-peers）。
     + **字段选择**：要包括在日志中的数据字段。
     + **输出格式**：如何设置日志的格式：
       + JSON：计算机处理的结构化格式
       + 文本：纯文本格式
     + **字段分隔符**：使用文本格式时，这是用于分隔字段的字符（例如：逗号、制表符、空格）。
   + Amazon S3
     + 跨账户 - 向不同的 AWS 账户发送日志
       + **日志类型**：要传输的日志类型。唯一支持的日志类型是 EVENT\$1LOGS。
       + **传输目的地 ARN**：将发送日志的另一个 AWS 账户中 S3 存储桶的 Amazon 资源名称。
       + **字段选择**：要包括在日志中的数据字段。
       + **后缀**：添加到日志文件名的结尾（例如：.log、.txt）。
       + **Hive 兼容**：启用后，将日志组织到可与基于 Hive 的工具配合使用的文件夹结构中，以便更轻松地使用 Amazon Athena 等服务进行搜索。
       + **字段分隔符**：使用文本格式时，这是用于分隔字段的字符。
     + 在当前账户中
       + **日志类型**：要传输的日志类型。唯一支持的日志类型是 EVENT\$1LOGS。
       + **目的地 S3 存储桶**：您的账户中将发送日志的 S3 存储桶。您可以指定一个子文件夹路径。
       + **字段选择**：要包括在日志中的数据字段。
       + **后缀**：添加到日志文件名的结尾（例如：.log、.txt）。
       + **Hive 兼容**：启用后，将日志组织到可与基于 Hive 的工具配合使用的文件夹结构中，以便更轻松地进行搜索。
       + **字段分隔符**：使用文本格式时，这是用于分隔字段的字符。
   + Amazon Data Firehose
     + 跨账户
       + **日志类型**：要传输的日志类型。唯一支持的日志类型是 EVENT\$1LOGS。
       + **传输目的地 ARN**：另一个 AWS 账户中的 Firehose 传输流的 Amazon 资源名称。
       + **字段选择**：要包括在日志中的数据字段。
       + **字段分隔符**：使用文本格式时，这是用于分隔字段的字符。
     + 在当前账户中
       + **日志类型**：要传输的日志类型。唯一支持的日志类型是 EVENT\$1LOGS。
       + **传输目的地流**：您的账户中将发送日志的 Firehose 传输流。流必须使用“Direct Put”源类型。
       + **字段选择**：要包括在日志中的数据字段。
       + **输出格式**：如何设置日志的格式：
         + JSON：计算机处理的结构化格式
         + 文本：纯文本格式
       + **字段分隔符**：使用文本格式时，这是用于分隔字段的字符。

------
#### [ Command line ]

本节中的命令链接到《AWS CLI 命令参考》**。本文档提供了运行命令时可以使用的选项的详细说明。

要创建路由服务器对等日志：

1. 使用 [put-delivery-source](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/put-delivery-source.html) 命令。
   + 示例请求

     ```
     aws logs put-delivery-source --name "source-rsp-1234567890abcdef0" --resource-arn "arn:aws:ec2:us-east-1:111122223333:route-server-peer/rsp-1234567890abcdef0" --log-type "EVENT_LOGS"
     ```
   + 响应示例

     ```
     {
          "deliverySource": {
             "name": "source-rsp-1234567890abcdef0",
             "arn": "arn:aws:logs:us-east-1:111122223333:delivery-source:source-rsp-1234567890abcdef0",
             "resourceArns": [
                 "arn:aws:ec2:us-east-1:111122223333:route-server-peer/rsp-1234567890abcdef0"
             ],
             "service": "ec2",
             "logType": "EVENT_LOGS"
         }
     }
     ```

1. 使用 [put-delivery-destination](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/put-delivery-destination.html) 命令。
   + 以下 AWS CLI 示例创建路由服务器日志。日志将传输到指定的日志组。
   + 示例请求

     ```
     aws logs put-delivery-destination --name "destination-rsp-abcdef01234567890" --destination-resource-arn "arn:aws:logs:us-east-1:111122223333:log-group:/aws/vendedlogs/ec2/route-server-peer/EVENT_LOGS/rsp-abcdef01234567890"
     ```
   + 响应示例

     ```
     {
          "deliveryDestination": {
             "name": "destination-rsp-abcdef01234567890",
             "arn": "arn:aws:logs:us-east-1:111122223333:delivery-destination:destination-rsp-abcdef01234567890",
             "deliveryDestinationType": "CWL",
             "deliveryDestinationConfiguration": {
                 "destinationResourceArn": "arn:aws:logs:us-east-1:111122223333:log-group:/aws/vendedlogs/ec2/route-server-peer/EVENT_LOGS/rsp-abcdef01234567890"
             }
         }
     }
     ```

1. 使用 [create-delivery](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/create-delivery.html) 命令。
   + 示例请求

     ```
     aws logs create-delivery --delivery-source-name "source-rsp-1234567890abcdef0" --delivery-destination-arn "arn:aws:logs:us-east-1:111122223333:delivery-destination:destination-rsp-abcdef01234567890"
     ```
   + 响应示例

     ```
     {
          "delivery": {
             "id": "1234567890abcdef0",
             "arn": "arn:aws:logs:us-east-1:111122223333:delivery:1234567890abcdef0",
             "deliverySourceName": "source-rsp-1234567890abcdef0",
             "deliveryDestinationArn": "arn:aws:logs:us-east-1:111122223333:delivery-destination:destination-rsp-abcdef01234567890",
             "deliveryDestinationType": "CWL",
             "recordFields": [
                 "resource_arn",
                 "event_timestamp",
                 "type",
                 "status",
                 "message"
             ]
         }
     }
     ```

------

# 入门教程
<a name="route-server-tutorial"></a>

本教程将指导您完成设置和配置 VPC Route Server，以在 VPC 中启用动态路由的过程。您将学习如何创建和配置所有必要的组件、建立 BGP 对等，以及验证操作是否正确。本教程涵盖了从初始 IAM 设置到测试和清理的所有内容。

开始本教程之前，请确保您满足以下条件：
+ AWS 账户的管理权限
+ 具有至少两个要在其中启用动态路由的子网的 VPC
+ 支持 BGP 并可用作路由服务器对等设备的网络设备（如在 EC2 实例上运行的防火墙）
+ 基本熟悉 BGP 概念和 AWS 网络

这些步骤可以使用 AWS 管理控制台或 AWS CLI 完成。每个步骤都提供了两种方法。

预计完成时间：15 到 30 分钟

**Topics**
+ [步骤 1：配置所需的 IAM 角色权限](route-server-iam.md)
+ [步骤 2：创建路由服务器](route-server-tutorial-create.md)
+ [步骤 3：将路由服务器与 VPC 关联](route-server-tutorial-associate.md)
+ [步骤 4：创建路由服务器端点](route-server-tutorial-create-endpoints.md)
+ [步骤 5：启用路由服务器传播](route-server-tutorial-enable-prop.md)
+ [步骤 6：创建路由服务器对等](route-server-tutorial-create-peer.md)
+ [步骤 7：从设备启动 BGP 会话](route-server-tutorial-initiate-bgp.md)
+ [步骤 8：清除](route-server-tutorial-cleanup.md)

# 步骤 1：配置所需的 IAM 角色权限
<a name="route-server-iam"></a>

要使用 VPC Route Server，请确保您使用的 IAM 用户或角色具有所需的 IAM 权限。以下是每个 API 需要哪些权限的指南：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateRouteServer",
            "Effect": "Allow",
            "Action": [
                "sns:CreateTopic"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeleteRouteServer",
            "Effect": "Allow",
            "Action": [
                "sns:DeleteTopic"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreateRouteServerEndpoint",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:CreateSecurityGroup",
                "ec2:DescribeSecurityGroups",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateTags",
                "ec2:DeleteTags"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeleteRouteServerEndpoint",
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteSecurityGroup",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:CreateTags",
                "ec2:DeleteTags"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreateRouteServerPeer",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeleteRouteServerPeer",
            "Effect": "Allow",
            "Action": [
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# 步骤 2：创建路由服务器
<a name="route-server-tutorial-create"></a>

完成本部分中的步骤以创建路由服务器。

路由服务器组件使用转发信息库（FIB）中的 IPv4 或 IPv6 路由更新您的 VPC 和互联网网关路由表。路由服务器代表单个 FIB 和路由信息库（RIB）。

------
#### [ AWS Management Console ]

**创建路由服务器**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中的**虚拟私有云**下，选择**路由服务器**。

1. 在**路由服务器**页面上，选择**创建路由服务器**。

1. 在**创建路由服务器**页面上，配置以下设置：
   + 对于**名称**，输入路由服务器的名称（例如，"my-route-server-01"）。名称长度不得超过 255 个字符。
   + 对于 **Amazon 端 ASN**，输入 BGP ASN 值。该值必须在 1 到 4294967295 的范围内。建议使用 64512 到 65534（16 位 ASN）或 4200000000 到 4294967294（32 位 ASN）范围内的专用 ASN。
   +  对于**保留路由**，请选择**启用**或**禁用**。此选项决定在所有 BGP 会话终止后是否应保留路由：
     + 如果启用：即使所有 BGP 会话均已结束，路由仍将保留在路由服务器的路由数据库中
     + 如果禁用：所有 BGP 会话结束后，路由将从路由数据库中删除
   + 如果您启用了保留路由，请在**保留持续时间**中输入一个介于 1 到 5 分钟之间的值。此持续时间指定路由服务器在重新建立 BGP 后要等待多长时间才能取消保留路由。例如，如果您将其设置为 1 分钟，则在重新建立 BGP 后，您的设备有 1 分钟的时间来重新学习和通告其路由，然后路由服务器将恢复正常功能。虽然 1 分钟通常就足够了，但如果您的 BGP 网络需要更多时间来完全重新建立和重新学习所有路由，则可以设置最多 5 分钟。
   + （可选）要启用 BGP 状态更改的 SNS 通知，请切换**启用 SNS 通知**开关。启用 SNS 通知功能后，路由服务器对等上的 BGP 或 BFD 会话状态更改，以及路由服务器端点的维护通知，都将保留到 AWS 预置的 SNS 主题。有关这些通知的详细信息，请参阅下方的 **SNS 通知详细信息**表。

1. （可选）要向您的路由服务器添加标签，请向下滚动到**标签 - 可选**部分，然后选择**添加新标签**。输入每个标签的键和可选值。最多可以添加 50 个标签。

1. 检查您的设置，然后选择**创建路由服务器**。

1. 等待创建路由服务器。完成后，您将重定向到**路由服务器**页面，在此可以看到列出的新路由服务器，其状态为*可用*。

------
#### [ Command line ]

使用以下步骤创建新的路由服务器，以管理 VPC 中的动态路由。

对于 `--amazon-side-asn`，输入 BGP ASN 值。该值必须在 1 到 4294967295 的范围内。建议使用 64512 到 65534（16 位 ASN）或 4200000000 到 4294967294（32 位 ASN）范围内的专用 ASN。

1. 命令:

   ```
   aws ec2 create-route-server --amazon-side-asn 65000
   ```

   响应：

   ```
   {
       "RouteServer": {
           "RouteServerId": "rs-1",
           "AmazonSideAsn": 65000,
           "State": "pending"
       }
   }
   ```

1. 等待路由服务器变为可用。

   命令:

   ```
   aws ec2 describe-route-servers
   ```

   响应：

   ```
   {
       "RouteServer": {
           "RouteServerId": "rs-1",
           "AmazonSideAsn": 65000,
           "State": "available"
       }
   }
   ```

------

**SNS 通知详细信息**

下表显示 Amazon VPC Route Server 将使用 Amazon SNS 发送的消息的详细信息：


| 标准字段 |  | 消息属性（元数据） |  |  |  | 
| --- | --- | --- | --- | --- | --- | 
| Message | 何时发送 | timestamp | eventCode | routeServerEndpointId | affectedRouteServerPeerIds | 
| 路由服务器端点 [ENDPOINT ID] 现在正在进行维护。BFD 和 BGP 会话可能会受到影响。 | 路由服务器端点维护 | 格式：2025-02-17T15:55:00Z | ROUTE\$1SERVER\$1ENDPOINT\$1MAINTENANCE | 受影响的端点 ID | 受影响的对等 ID 列表 | 
| Message | 何时发送 | timestamp | eventCode | routeServerPeerId | newBgpStatus | 
| 路由服务器对等 [PEER ID] 的 BGP 现在处于 [UP/DOWN] 状态。 | 路由服务器对等 BGP 状态更改 | 格式：2025-02-17T15:55:00Z | ROUTE\$1SERVER\$1PEER\$1BGP\$1STATUS\$1CHANGE | 受影响的对等 ID | 运行或停机 | 
| Message | 何时发送 | timestamp | eventCode | routeServerPeerId | newBfdStatus | 
| 路由服务器对等 [PEER ID] 的 BFD 现在处于 [UP/DOWN] 状态。 | 路由服务器对等 BFD 状态更改 | 格式：2025-02-17T15:55:00Z | ROUTE\$1SERVER\$1PEER\$1BFD\$1STATUS\$1CHANGE | 受影响的对等 ID | 运行或停机 | 

# 步骤 3：将路由服务器与 VPC 关联
<a name="route-server-tutorial-associate"></a>

完成本部分中的步骤将路由服务器与 VPC 关联。

路由服务器关联是在路由服务器与 VPC 之间建立的连接。这是一个基本配置步骤，使路由服务器能够与 VPC 中的设备协同工作。

创建路由服务器关联时：
+ 其将路由服务器关联到特定的 VPC。
+ 其使路由服务器能够与 VPC 子网内的路由表进行交互。
+ 其允许路由服务器在关联的 VPC 内接收和传播路由。
+ 其确定路由服务器可以运行的范围。

路由服务器关联的关键方面：
+ 每个路由服务器可以与一个 VPC 关联。默认情况下，每个 VPC 最多可以有 5 个独立的路由服务器关联。有关限额的更多信息，请参阅[路由服务器限额](amazon-vpc-limits.md#vpc-limits-route-servers)。
+ 必须先创建关联，然后路由服务器才能管理路由。
+ 可以监控关联以追踪其状态（例如正在关联和已关联）。
+ 如果您不再希望路由服务器在该 VPC 中运行，则可以移除关联（取消关联）。

------
#### [ AWS Management Console ]

**将路由服务器与 VPC 关联**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中的**虚拟私有云**下，选择**路由服务器**。

1. 选择要与 VPC 关联的路由服务器。

1. 在**关联选项卡**上，选择**关联路由服务器**。

1. 在“关联路由服务器”对话框中：
   + **路由服务器 ID** 字段将自动填充您选择的路由服务器
   + 对于 **VPC ID**，从下拉列表中选择要关联的 VPC

1. 选择**关联路由服务器**。

1. 等待关联完成。完成后，该**状态**将在**关联**选项卡上显示为*已关联*。

------
#### [ Command line ]

使用以下步骤将路由服务器与 VPC 关联。

1. 命令:

   ```
   aws ec2 associate-route-server --route-server-id rs-1 --vpc-id vpc-1
   ```

   响应：

   ```
   {
       "RouteServerAssociation": {
           "RouteServerId": "rs-1",
           "VpcId": "vpc-1",
           "State": "associating"
       }
   }
   ```

1. 等待关联完成。

   命令:

   ```
   aws ec2 get-route-server-associations --route-server-id rs-1
   ```

   响应：

   ```
   {
       "RouteServerAssociation": {
           "RouteServerId": "rs-1",
           "VpcId": "vpc-1",
           "State": "associated"
       }
   }
   ```

------

# 步骤 4：创建路由服务器端点
<a name="route-server-tutorial-create-endpoints"></a>

完成本部分中的步骤，以创建路由服务器端点。为每个子网创建两个端点以实现冗余。

路由服务器端点是子网内的 AWS 托管组件，可促进路由服务器与 BGP 对等之间的 [BGP（边界网关协议）](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)连接。

路由服务器端点是网络设备与路由服务器建立 BGP 会话的“接触点”。它们是实际处理 BGP 连接的组件，而路由服务器本身则管理路由决策和路由传播。

**注意**  
路由服务器端点的费用为每小时 0.75 美元。

------
#### [ AWS Management Console ]

**创建路由服务器端点**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中的**虚拟私有云**下，选择**路由服务器**。

1. 选择要为其创建端点的路由服务器。

1. 在下方窗格中，选择**路由服务器端点**选项卡。

1. 选择**创建路由服务器端点**。

1. 在**创建路由服务器端点**页面上，配置以下设置：
   + 对于**名称**，为您的端点输入一个描述性名称。
   + 对于**路由服务器**，请确认已选择正确的路由服务器。
   + 对于**子网**，选择您要在其中创建端点的子网。

1. （可选）要向您的路由服务器端点添加标签，请向下滚动到**标签 - 可选**部分，然后选择**添加新标签**。输入每个标签的键和可选值。

1. 检查您的设置，然后选择**创建路由服务器端点**。

1. 等待创建端点。完成后，您将看到一条成功消息。

1. 重复步骤 5 到 9，使用不同的名称在同一子网中创建第二个端点。

1. 对需要路由服务器端点的每个子网重复步骤 5 到 10。

1. 创建端点后，返回路由服务器的**路由服务器端点**选项卡。

1. 确认您看到每个子网列出两个端点。

1. 检查每个端点的**状态**是否为*可用*。

------
#### [ Command line ]

使用以下步骤创建路由服务器端点。

1. 命令:

   ```
   aws ec2 create-route-server-endpoint --route-server-id rs-1 --subnet-id subnet-1
   ```

   响应：

   ```
   {
       "RouteServerEndpoint": {
           "RouteServerId": "rs-1",
           "RouteServerEndpointId": "rse-1",
           "VpcId": "vpc-1",
           "SubnetId": "subnet-1",
           "State": "pending"
       }
   }
   ```

1. 创建后可能需要等待几分钟，端点才会变为完全可用。

   命令:

   ```
   aws ec2 describe-route-server-endpoints
   ```

   响应：

   ```
   {
       "RouteServerEndpoint": {
           "RouteServerId": "rs-1",
           "RouteServerEndpointId": "rse-1",
           "VpcId": "vpc-1",
           "SubnetId": "subnet-1",
           "EniId": "eni-123",
           "EniAddress": "10.1.2.3",
           "State": "available"
       }
   }
   ```

重复上述步骤，在同一子网中使用不同的名称创建第二个端点，为需要路由服务器端点的每个子网创建端点。

------

# 步骤 5：启用路由服务器传播
<a name="route-server-tutorial-enable-prop"></a>

完成此步骤以启用路由服务器传播。

启用后，路由服务器传播会将路由安装到指定路由表的 FIB 中。路由服务器支持 IPv4 和 IPv6 路由传播。

路由服务器传播是自动更新路由表的机制：路由服务器无需手动更新路由表，而是使用来自 FIB 的路由自动将适当的路由传播到已配置的路由表。

路由服务器传播的关键方面：
+ 配置
  + 将路由服务器关联到特定的路由表
  + 确定哪些路由表将接收动态路由更新
  + 可以为每个路由表启用或禁用
+ 功能
  + 使用从 BGP 对等获知的路由自动更新路由表
  + 根据 BGP 属性传播最佳可用路由
  + 保持指定路由表间的路由一致性
  + 网络条件发生变化时动态更新路由
+ 状态
  + 可以启用（路由正在传播）
  + 可以禁用（路由未进行传播）

------
#### [ AWS Management Console ]

**启用路由服务器传播**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择要为其启用传播的路由服务器。

1. 在路由服务器详细信息面板中选择**传播**选项卡。

1. 选择**启用传播**。

1. 在**启用传播**对话框中：
   + **路由服务器 ID** 将预先填充。
   + 在**路由表**下，从新传播路由的下拉菜单中选择目标路由表。

1. 选择**启用传播**进行确认。

1. 等待**传播**列表中的传播状态更改为“可用”。

1. 验证所选路由表是否显示在**传播**列表中，状态为*可用*。

------
#### [ Command line ]

使用以下步骤启用路由服务器传播。

1. 命令:

   ```
   aws ec2 enable-route-server-propagation --route-table-id rtb-1 --route-server-id rs-1
   ```

   响应：

   ```
   {
       "RouteServerRoutePropagation": {
           "RouteServerId": "rs-1",
           "RouteTableId": "rtb-1",
           "State": "pending"
       }
   }
   ```

1. 等待传播状态变为可用。

   命令:

   ```
   aws ec2 get-route-server-propagations --route-server-id rs-1
   ```

   响应：

   ```
   {
       "RouteServerRoutePropagation": {
           "RouteServerId": "rs-1",
           "RouteTableId": "rtb-1",
           "State": "available"
       }
   }
   ```

------

# 步骤 6：创建路由服务器对等
<a name="route-server-tutorial-create-peer"></a>

路由服务器对等是路由服务器端点与部署在 AWS 中的设备（例如在 EC2 实例上运行的防火墙设备或其他网络安全功能）之间的会话。设备必须满足以下要求：
+ 在 VPC 中有弹性网络接口
+ 支持 BGP（边界网关协议）
+ 可以启动 BGP 会话

**注意**  
建议您为每个路由服务器端点创建一个路由服务器对等以实现冗余。

------
#### [ AWS Management Console ]

**创建路由服务器对等**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航路径中，选择 **VPC** > **路由服务器对等** > **创建路由服务器对等**。

1. 在**详细信息**下，配置以下各项：
   + **名称**：输入路由服务器对等的名称（最多 255 个字符）。例如：my-route-server-peer-01
   + **路由服务器端点 ID**：从下拉列表中选择路由服务器端点。或者，选择**创建路由服务器端点**来创建新端点。
   + **对等地址**：输入对等的 IPv4 地址。必须是有效的 IP 地址。对等地址必须能够从路由服务器端点访问。
   + **对等 ASN**：输入 BGP 对等的 ASN（自治系统编号）。值必须在 1 到 4294967295 的范围内。ASN 通常应使用专用范围（16 位为 64512 到 65534，32 位为 4200000000 到 4294967294）
   + **对等活跃度检测**：
     + **BGP 保持活跃**（默认）：标准 BGP 保持活动状态机制
     + **BFD**：双向转发检测，可实现更快的失效转移
   + （可选）在**标签**下，选择**添加新标签**以添加键值对标签。标签有助于标识和追踪 AWS 资源。

1. 检查您的设置，然后选择**创建路由服务器对等**。

------
#### [ Command line ]

使用以下步骤创建路由服务器对等。

1. 命令:

   ```
   aws ec2 create-route-server-peer --route-server-endpoint-id rse-1 --peer-address 10.0.2.3 --bgp-options PeerAsn=65001,PeerLivenessDetection=bfd
   ```

   响应：

   在响应中，状态值可以是 `pending|available|deleting|deleted`。

   ```
   {
       "RouteServerPeer": {
           "RouteServerPeerId": "rsp-1",
           "RouteServerId": "rs-1",
           "VpcId": "vpc-1",
           "SubnetId": "subnet-1",
           "State": "pending",
           "EndpointEniId": "eni-2,
           "EndpointEniAddress": "10.0.2.4",
           "PeerEniId": "eni-1",
           "PeerAddress": "10.0.2.3",
           "BgpOptions": {
               "PeerAsn": 65001,
      "PeerLivenessDetection": "bfd"
           },
           "BgpStatus": {
               "Status": "Up"
           }
       }
   }
   ```

1. 等待传播状态变为可用。

   命令:

   ```
   aws ec2 describe-route-server-peers
   ```

   响应：

   ```
   {
       "RouteServerPeer": {
           "RouteServerPeerId": "rsp-1",
           "RouteServerId": "rs-1",
           "VpcId": "vpc-1",
           "SubnetId": "subnet-1",
           "State": "available",
           "EndpointEniId": "eni-2,
           "EndpointEniAddress": "10.0.2.4",
           "PeerEniId": "eni-1",
           "PeerAddress": "10.0.2.3",
           "BgpOptions": {
               "PeerAsn": 65001,
      "PeerLivenessDetection": "bfd"
           },
           "BgpStatus": {
               "Status": "down"
           }
       }
   }
   ```

------

# 步骤 7：从设备启动 BGP 会话
<a name="route-server-tutorial-initiate-bgp"></a>

当路由服务器对等的状态为可用时，请配置您的工作负载以启动与路由服务器端点的 BGP 会话。

从子网中的设备启动 BGP 会话不在本指南的讨论范围内。路由服务器端点不启动 BGP 会话。

您可以通过验证路由表中是否包含路由服务器传播的最佳路由，来检查 VPC Route Server 功能是否正常运行。

# 步骤 8：清除
<a name="route-server-tutorial-cleanup"></a>

本教程的构建部分已完成。完成本部分中的步骤，以删除您创建的 VPC Route Server 组件。

**7.1：撤销设备上的 BGP 通告**

撤销子网中设备上的 BGP 通告不在本指南的讨论范围内。如有必要，请向第三方供应商咨询您的 BGP 配置。

**7.2：禁用路由服务器传播**

使用以下步骤禁用路由服务器传播。

------
#### [ AWS Management Console ]

****

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择要为其禁用传播的路由服务器。

1. 选择**操作 > 修改路由服务器**。

1. 在路由服务器详细信息面板中选择**传播**选项卡。

1. 选择要禁用的传播，然后选择**禁用传播**。

1. 在对话框中，选择**禁用路由服务器传播**。

------
#### [ Command line ]

1. 禁用传播：

   ```
   aws ec2 disable-route-server-route-propagation --route-table-id rtb-1 --route-server-id rs-1
   ```

1. 确认传播已删除：

   ```
   aws ec2 get-route-server-route-propagations --route-server-id rs-1 [--route-table-id rtb-1]
   ```

------

**7.3：删除路由服务器对等**

使用以下步骤删除路由服务器对等。

------
#### [ AWS Management Console ]

****

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航路径中，选择**路由服务器** > **路由服务器对等**。

1. 选择路由服务器对等。

1. 选择**操作** > **删除路由服务器对等**。

------
#### [ Command line ]

1. 删除对等：

   ```
   aws ec2 delete-route-server-peer --route-server-peer-id rsp-1
   ```

1. 确认删除操作：

   ```
   aws ec2 describe-route-server-peers [--route-server-peer-ids rsp-1] [--filters Key=RouteServerId|RouteServerEndpointId|VpcId]
   ```

------

**7.4：删除路由服务器端点**

使用以下步骤删除路由服务器端点。

------
#### [ AWS Management Console ]

****

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择要删除端点的路由服务器。

1. 选择**路由服务器端点**。

1. 选择端点，然后选择**操作** > **删除路由服务器端点**。

1. 输入删除并选择**删除**。

------
#### [ Command line ]

1. 描述端点：

   ```
   aws ec2 describe-route-server-endpoints
   ```

1. 删除路由服务器端点：

   ```
   aws ec2 delete-route-server-endpoint --route-server-endpoint-id rse-1
   ```

1. 确认已删除端点：

   ```
   aws ec2 describe-route-server-endpoints [--route-server-endpoint-ids rsp-1] [--filters Key=RouteServerId|VpcId|SubnetId]
   ```

------

**7.5：取消路由服务器与 VPC 的关联**

使用以下步骤取消路由服务器与 VPC 的关联。

------
#### [ AWS Management Console ]

****

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择要取消关联的路由服务器。

1. 选择**关联**。

1. 选择**取消关联路由服务器**。

1. 确认将要进行的更改，然后选择**取消关联路由服务器**。

------
#### [ Command line ]

1. 取消路由服务器与 VPC 的关联：

   ```
   aws ec2 disassociate-route-server --route-server-id rs-1 --vpc-id vpc-1
   ```

1. 确认取消关联：

   ```
   aws ec2 get-route-server-associations --route-server-id rs-1
   ```

------

**7.6 删除路由服务器**

使用以下步骤删除路由服务器。

------
#### [ AWS Management Console ]

****

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择要删除的路由服务器。

1. 选择**操作** > **删除路由服务器**。

1. 输入*删除*并选择**删除**。

------
#### [ Command line ]

1. 删除路由服务器：

   ```
   aws ec2 delete-route-server --route-server-id rs-1
   ```

1. 确认删除操作：

   ```
   aws ec2 describe-route-servers [--route-server-ids rs-1] [--filters Key=VpcId]
   ```

------

Amazon VPC Route Server 教程已完成。