

# 子网路由表


VPC 具有隐式路由器，您可以使用路由表来控制网络流量的流向。您的 VPC 中的每个子网必须与一个路由表关联，该路由表控制子网的路由（子网路由表）。您可以将子网与特定路由表显式关联。否则，子网将与主路由表隐式关联。一个子网一次只能与一个路由表关联，但您可以将多个子网与同一子网路由表关联。

**Topics**
+ [

## Routes
](#route-table-routes)
+ [

## 主路由表
](#main-route-table)
+ [

## 自定义路由表
](#custom-route-tables)
+ [

## 子网路由表关联
](#route-table-assocation)

## Routes


表中的每个路由指定一个目的地和一个目标。例如，要使您的子网能够通过互联网网关访问 Internet，请将以下路由添加到子网路由表中。路由的目的地为 `0.0.0.0/0`，表示所有 IPv4 地址。目标是连接到您的 VPC 的互联网网关。


| 目标位置 | 目标 | 
| --- | --- | 
| 0.0.0.0/0 | igw-id | 

IPv4 和 IPv6 的 CIDR 块是分开处理的。例如，目标 CIDR 为 `0.0.0.0/0` 的路由不会自动包括所有 IPv6 地址。您必须为所有 IPv6 地址创建目标 CIDR 为 `::/0` 的路由。

如果您经常在 AWS 资源中引用同一组 CIDR 块，则可以创建[客户托管的前缀列表](managed-prefix-lists.md)以将它们分组在一起。然后，您可以在路由表条目中将此前缀列表指定为目的地。

每个路由表都包含一个用于在 VPC 内部通信的本地路由。默认情况下，此路由将添加到所有路由表中。如果您的 VPC 有多个 IPv4 CIDR 块，则路由表为每个 IPv4 CIDR 块包含一个本地路由。如果您已将 IPv6 CIDR 块与 VPC 关联，则路由表为 IPv6 CIDR 块包含一个本地路由。您可以根据需要[替换或恢复](replace-local-route-target.md)每个本地路由的目标。<a name="route-table-rule-considerations"></a>

**规则和注意事项**
+ 您可以在您的路由表中添加比本地路由更具体的路由。目的地必须匹配 VPC 中子网的整个 IPv4 或 IPv6 CIDR 块。目标必须是 NAT 网关、网络接口或网关负载均衡器端点。
+ 如果您的路由表有多个路由，我们使用路由表中与流量匹配的最明确的路由（最长前缀匹配）来判断流量的路由方式。
+ 您不能向 IPv4 地址添加与以下范围完全匹配或是其子集的路由：169.254.168.0/22。此范围位于链路本地地址空间内，是专供 AWS 服务使用的保留范围。例如，Amazon EC2 将此范围内的地址用于只能从 EC2 实例访问的服务，例如实例元数据服务（IMDS）和 Amazon DNS 服务器。您可以使用大于但包含 169.254.168.0/22 的 CIDR 块，但是系统不会转发指向 169.254.168.0/22 范围内地址的数据包。
+ 您不能向 IPv6 地址添加与以下范围完全匹配或是其子集的路由：fd00:ec2::/32。此范围位于唯一本地地址（ULA）空间内，是专供 AWS 服务使用的保留范围。例如，Amazon EC2 将此范围内的地址用于只能从 EC2 实例访问的服务，例如实例元数据服务（IMDS）和 Amazon DNS 服务器。您可以使用大于但包含 fd00:ec2::/32 的 CIDR 块，但是系统不会转发指向 fd00:ec2::/32 范围内地址的数据包。
+ 您可以将中间盒设备添加到 VPC 的路由路径中。有关更多信息，请参阅 [中间盒设备的路由](route-table-options.md#route-tables-appliance-routing)。

**示例**  
在以下示例中，VPC 具有 IPv4 CIDR 块和 IPv6 CIDR 块。IPv4 和 IPv6 流量是分开处理的，如以下路由表所示。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | Local | 
| 2001:db8:1234:1a00::/56 | Local | 
| 172.31.0.0/16 | pcx-11223344556677889 | 
| 0.0.0.0/0 | igw-12345678901234567 | 
| ::/0 | eigw-aabbccddee1122334 | 
+ Local 路由涵盖了要在 VPC (10.0.0.0/16) 内路由的 IPv4 流量。
+ Local 路由涵盖了要在 VPC (2001:db8:1234:1a00::/56) 内路由的 IPv6 流量。
+ 172.31.0.0/16 的路由将流量发送到对等连接。
+ 所有 IPv4 流量 (0.0.0.0/0) 的路由将流量发送到互联网网关。因此，除了 VPC 内和发送到对等连接的流量外，所有 IPv4 流量都路由到互联网网关。
+ 所有 IPv6 流量 (::/0) 的路由将流量发送到仅出口互联网网关。因此，除了 VPC 内和发送到对等连接的流量外，所有 IPv6 流量都路由到仅出口互联网网关。

## 主路由表


当您创建 VPC 时，它会自动生成主路由表。子网未与显式路由表关联，则预设情况下会使用主路由表。在 Amazon VPC 控制台中的 **Route tables**（路由表）页面上，通过在 **Main**（主）列中查找 **Yes**（是）以查看 VPC 的主路由表。

默认情况下，当您创建非默认 VPC 时，主路由表仅包含本地路由。如果您[创建 VPC](create-vpc.md)并选择 NAT 网关，Amazon VPC 会自动将路由添加到网关的主路由表中。

以下规则适用于主路由表：
+ 您可以在主路由表中添加、删除和修改路由。
+ 您无法删除主路由表。
+ 您无法将网关路由表设置为主路由表。
+ 您可以通过将自定义路由表与子网关联来替换主路由表。
+ 即使某个子网与主路由表已隐式关联，您也可以将它们显式关联。

  在希望更改作为主路由表的表时，您需要执行此操作。当您更改用作主路由表的表时，还会更改其他新子网或所有未与任何其他路由表显式关联的子网的默认设置。有关更多信息，请参阅 [替换主路由表](Route_Replacing_Main_Table.md)。

## 自定义路由表


默认情况下，每个路由表都包含一个用于在 VPC 内部通信的本地路由。如果您[创建 VPC](create-vpc.md)并选择公有子网，Amazon VPC 会创建自定义路由表并添加指向互联网网关的路由。一种保护 VPC 的方法是将主路由表保持原始默认状态。然后，将您创建的各个新子网与您已创建的自定义路由表之一显式关联。这样可以确保您能够明确控制每个子网的流量的路由方式。

您可以在自定义路由表中添加、删除和修改路由。您只能删除没有关联的自定义路由表。

## 子网路由表关联


您的 VPC 中的每个子网都必须与一个网络 ACL 相关联。子网可以与自定义路由表显式关联，也可以与主路由表隐式或显式关联。有关查看子网和路由表关联的更多信息，请参阅[确定显式关联](WorkWithRouteTables.md#Route_Which_Associations)。

与 Outposts 关联的 VPC 中的子网可以有本地网关的额外目标类型。这是与非 Outposts 子网的唯一路由差异。

**示例 1：隐式和显式子网关联**  
下图展示了有互联网网关、虚拟私有网关、以及一个公有子网和仅限 VPN 连接子网的 VPC 的路由。

![\[该图显示了与主路由表关联的私有子网和带有自定义路由表的公有子网\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/subnet-association.png)


路由表 A 是与公有子网显式关联的自定义路由表，它有一条将所有流量发送到互联网网关的路由，因此子网成为公有子网。


| 目标位置 | Target | 
| --- | --- | 
| VPC CIDR | 本地 | 
| 0.0.0.0/0 | igw-id | 

路由表 B 是主路由表，它与私有子网隐式关联。它有一条将所有流量发送到虚拟私有网关的路由，但没有发送到互联网网关的路由，因此子网成为仅限 VPN 的子网。如果您在此 VPC 中创建另一个子网但不关联自定义路由表，由于此路由表是主路由表，该子网也将与其隐式关联。


| 目标位置 | Target | 
| --- | --- | 
| VPC CIDR | 本地 | 
| 0.0.0.0/0 | vgw-id | 

**示例 2：替换主路由表**  
您可能希望更改主路由表。为避免对流量造成任何干扰，我们建议您首先使用自定义路由表测试路由更改。当您满意测试结果之后，可以将主路由表替换为新的自定义路由表。

下图显示了两个子网和两个路由表。子网 A 与路由表 A（主路由表）隐式关联。子网 B 与路由表 A 隐式关联。路由表 B（自定义路由表）与这两个子网均未关联。

![\[两个子网与路由表 A（主路由表）隐式关联。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/replace-route-table-initial.png)


要替换主路由表，请先在子网 B 和路由表 B 之间创建显式关联。测试路由表 B。

![\[子网 B 现在与路由表 B（自定义路由表）显式关联。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/replace-route-table-step1.png)


在您测试完路由表 B 之后，将其设为主路由表。子网 B 仍与路由表 B 有显式关联。然而子网 A 现在与路由表 B 有隐式关联，因为路由表 B 是新的主路由表。路由表 A 不再与这两个子网关联。

![\[该图显示了与主路由表 B 关联的子网 A 和与路由表 B 关联的子网 B\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/replace-route-table-step2.png)


（可选）如果您解除子网 B 与路由表 B 的关联，在子网 B 与路由表 B 之间仍将存在隐式关联。如果您不再需要路由表 A，可以将其删除。

![\[两个子网都与路由表 B 隐式关联。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/replace-route-table-step3.png)
