路由表 - Amazon Virtual Private Cloud

路由表

路由表 中包含一组被称为路由的规则,用于确定来自您的子网或网关的网络流量的导向何处。

路由表概念

以下是路由表的主要概念。

  • 主路由表 — 随 VPC 自动生成的路由表。它控制未与任何其他路由表显式关联的所有子网的路由。

  • 自定义路由表 — 您为 VPC 创建的路由表。

  • 边缘关联 — 用于将入站 VPC 流量路由到设备的路由表。您需要将路由表与互联网网关或虚拟私有网关相关联,并将设备的网络接口指定为 VPC 流量的目标。

  • 路由表关联 — 路由表与子网、互联网网关或虚拟私有网关之间的关联。

  • 子网路由表 — 与子网关联的路由表。

  • 网关路由表 — 与互联网网关或虚拟私有网关关联的路由表。

  • 本地网关路由表 — 与 Outposts 本地网关相关联的路由表。有关本地网关的信息,请参阅 AWS Outposts 用户指南 中的本地网关

  • 目的地 — 您希望流量传输到的 IP 地址范围(目的地 CIDR)。例如,具有 172.16.0.0/12 CIDR 的外部公司网络。

  • 传播 — 路由传播允许虚拟私有网关自动将路由传播到路由表。这意味着您不需要将 VPN 路由手动输入到路由表。有关 VPN 路由选项的更多信息,请参阅站点到站点 VPN 用户指南 中的站点到站点 VPN 路由选项

  • 目标 — 用于发送目的地流量的网关、网络接口或连接,例如互联网网关。

  • 本地路由 — VPC 内通信的默认路由。

有关路由选项的示例,请参阅示例路由选项

路由表的工作原理

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

(可选)您可以将路由表与互联网网关或虚拟私有网关关联(网关路由表)。这使您能够为通过网关流入 VPC 的入站流量指定路由规则。有关更多信息,请参阅 网关路由表

您可以为每个 VPC 创建的路由表数量存在配额。您可以为每个路由表添加的路由数量也有配额。有关更多信息,请参阅 Amazon VPC 配额

路由

表中的每个路由指定一个目的地和一个目标。例如,要使您的子网能够通过互联网网关访问 Internet,请将以下路由添加到子网路由表中。

目的地 目标
0.0.0.0/0 igw-12345678901234567

路由的目的地为 0.0.0.0/0,表示所有 IPv4 地址。目标是连接到您的 VPC 的互联网网关。

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

每个路由表都包含一个用于在 VPC 内部通信的本地路由。默认情况下,此路由将添加到所有路由表中。如果您的 VPC 有多个 IPv4 CIDR 块,则路由表为每个 IPv4 CIDR 块包含一个本地路由。如果您已将 IPv6 CIDR 块与 VPC 关联,则路由表为 IPv6 CIDR 块包含一个本地路由。您无法在子网路由表或主路由表中修改或删除这些路由。

有关网关路由表中的路由和本地路由的更多信息,请参阅网关路由表

如果您的路由表有多个路由,我们使用路由表中与流量匹配的最明确的路由(最长前缀匹配)来判断流量的路由方式。

在以下示例中,IPv6 CIDR 块与您的 VPC 关联。在路由表中:

  • 流向 VPC (2001:db8:1234:1a00::/56) 中的 IPv6 流量为 Local 路由所覆盖,在 VPC 内路由。

  • IPv4 和 IPv6 流量是分开处理的;因此,所有 IPv6 流量(VPC 内流量除外)均被路由到仅出口互联网网关。

  • 指向对等连接的 172.31.0.0/16 IPv4 流量有一条路由。

  • 指向互联网网关的所有 IPv4 流量 (0.0.0.0/0) 有一条路由。

  • 指向仅出口互联网网关的所有 IPv6 流量 (::/0) 有一条路由。

目的地 目标
10.0.0.0/16 本地
2001:db8:1234:1a00::/56 本地
172.31.0.0/16 pcx-11223344556677889
0.0.0.0/0 igw-12345678901234567
::/0 eigw-aabbccddee1122334

如果您经常在 AWS 资源中引用同一组 CIDR 块,则可以创建客户管理的前缀列表以将它们分组在一起。然后,您可以在路由表条目中将此前缀列表指定为目的地。

主路由表

当您创建 VPC 时,它会自动生成主路由表。主路由表控制未与任何其他路由表显式关联的所有子网的路由。在 Amazon VPC 控制台中的路由表页面上,通过在列中查找以查看 VPC 的主路由表。

默认情况下,当您创建非默认 VPC 时,主路由表仅包含本地路由。当您在控制台中使用 VPC 向导创建具有 NAT 网关或虚拟私有网关的非默认 VPC 时,向导会自动向这些网关的主路由表添加路由。

您可以在主路由表中添加、删除和修改路由。不能创建比本地路由更明确的路由。您无法删除主路由表,但可以使用已创建的自定义子网路由表替换主路由表。您无法将网关路由表设置为主路由表。

即使某个子网与主路由表已隐式关联,您也可以将它们显式关联。在希望更改作为主路由表的表时,您需要执行此操作。当您更改用作主路由表的表时,还会更改其他新子网或所有未与任何其他路由表显式关联的子网的默认设置。有关更多信息,请参阅 替换主路由表

自定义路由表

默认情况下,自定义路由表为空,您可以根据需要添加路由。当您在控制台中使用 VPC 向导创建带有互联网网关的 VPC 时,向导会创建自定义路由表并向互联网网关添加路由。一种保护 VPC 的方法是将主路由表保持原始默认状态。然后,将您创建的各个新子网与您已创建的自定义路由表之一显式关联。这样可以确保您能够明确控制每个子网的流量的路由方式。

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

子网路由表关联

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

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

如果以下任何情况适用,则您无法将子网与路由表关联:

  • 路由表包含的现有路由比默认本地路由更明确。

  • 默认本地路由的目标已替换。

示例 1:隐式和显式子网关联

下图展示了有互联网网关、虚拟私有网关、以及一个公有子网和仅限 VPN 连接子网的 VPC 的路由。主路由表具有指向虚拟私有网关的路由。与公有子网显式关联的自定义路由表。自定义路由表具有通过互联网网关指向 Internet (0.0.0.0/0) 的路由。


                    主路由表和自定义表

如果您在此 VPC 内创建一个新的子网,它将自动隐式与主路由表关联,而主路由表会将流量路由到虚拟私有网关。如果您设置反向配置(主路由表内包含通往互联网网关的路由,自定义路由表内包含通往虚拟私有网关的路由),则新子网会自动生成通往互联网网关的路由。

示例 2:替换主路由表

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

下图展示的是一个有两个子网的 VPC,并且这些子网都与主路由表 (路由表 A) 有隐式关联,自定义路由表 (路由表 B) 则未与任何子网相关。


                    替换主路由表:开始

您可以在子网 2 和路由表 B 之间建立显式关联。


                    替换主路由表:新建路由表

在您测试完路由表 B 之后,您可以将其设定为主路由表。请注意子网 2 仍与路由表 B 有显式关联,而子网 1 与路由表 B 有隐式关联,因为路由表 B 是新的主路由表。路由表 A 已经不再使用。


                    替换主路由表:替换

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


                    替换主路由表:解除关联

网关路由表

您可以将路由表与互联网网关或虚拟私有网关相关联。当路由表关联到某个网关时,它称为网关路由表。您可以创建网关路由表,以精细控制进入 VPC 的流量的路由路径。例如,对于通过互联网网关进入 VPC 的流量,您可以将流量重定向到 VPC 中的中间盒设备(例如安全设备)来进行拦截。

网关路由表支持目标为 local(默认本地路由)或 VPC 中已连接中间盒设备的弹性网络接口(网络接口)的路由。当目标是网络接口时,允许使用以下目标:

  • 您的 VPC 的整个 IPv4 或 IPv6 CIDR 块。在这种情况下,您将替换默认本地路由的目标。

  • VPC 中子网的整个 IPv4 或 IPv6 CIDR 块。这是比默认本地路由更明确的路由。

如果您将网关路由表中本地路由的目标更改为 VPC 中的网络接口,则以后可以将其还原为默认 local 目标。有关更多信息,请参阅替换和恢复本地路由的目标

在下面的网关路由表中,流向具有 172.31.0.0/20 CIDR 块的子网的流量将路由到特定网络接口。流向 VPC 中所有其他子网的流量使用本地路由。

目的地 目标
172.31.0.0/16 本地
172.31.0.0/20 eni-id

在以下网关路由表中,本地路由的目标替换为网络接口 ID。流向 VPC 中所有子网的流量将路由到网络接口。

目的地 目标
172.31.0.0/16 eni-id

规则和注意事项

如果以下任何情况适用,则无法将路由表与网关相关联:

  • 路由表包含的现有路由具有网络接口或默认本地路由以外的其他目标。

  • 路由表包含的路由指向 VPC 范围之外的 CIDR 块。

  • 为路由表启用了路由传播。

此外,还适用以下规则和注意事项:

  • 您不能将路由添加到 VPC 范围之外的任何 CIDR 块,包括超出单个 VPC CIDR 块的范围。

  • 您只能将 local 或网络接口指定为目标。不能指定任何其他类型的目标,包括单个主机 IP 地址。

  • 不能将前缀列表指定为目的地。

  • 您不能使用网关路由表来控制或拦截 VPC 外部的流量,例如,流经所连接传输网关的流量。您可以拦截进入您 VPC 的流量,并仅能将其重定向到相同 VPC 中的另一个目标。

  • 要确保流量到达您的中间盒设备,必须将目标网络接口连接到正在运行的实例。对于流经互联网网关的流量,目标网络接口还必须具有公有 IP 地址。

  • 配置中间盒设备时,请注意设备注意事项

  • 通过中间盒设备路由流量时,来自目标子网的返回流量必须通过同一设备路由。不支持非对称路由。

有关安全设备路由的示例,请参阅VPC 内中间盒设备的路由

路由优先级

我们使用路由表中与流量匹配的最具体的路由来判断数据流的路由方式 (最长前缀匹配)。

到 IPv4 和 IPv6 地址或 CIDR 块的路由彼此独立。我们使用与 IPv4 流量或 IPv6 流量匹配的最明确路由来确定如何路由流量。

例如,下面的子网路由表包含一条指向互联网网关的 IPv4 Internet 流量 (0.0.0.0/0) 路由、一条指向对等连接 (pcx-11223344556677889) 的 172.31.0.0/16 IPv4 流量路由。来自该子网的目标为 172.31.0.0/16 IP 地址范围的任意流量均使用对等连接,因为该路由比互联网网关路由更明确。目标设为 VPC (10.0.0.0/16) 中的目标的任何流量将被 Local 路由涵盖,因此将在 VPC 中路由。来自该子网的所有其他流量使用互联网网关。

目的地 目标
10.0.0.0/16 本地
172.31.0.0/16 pcx-11223344556677889
0.0.0.0/0 igw-12345678901234567

如果您已将一个虚拟私有网关连接到 VPC,并且已启用子网路由表上的路由传播,则代表站点到站点 VPN 连接的路由会在您的路由表中自动显示为已传播路由。如果传播的路由与静态路由重叠,且无法应用最长前缀匹配,则静态路由优先于传播的路由。有关更多信息,请参阅 AWS 站点到站点 VPN 用户指南 中的路由表和 VPN 路由优先级

在该示例中,路由表包含一条到互联网网关(您手动添加的)的静态路由和一条到虚拟私有网关的传播路由。这两条路由的目的地均为 172.31.0.0/24。在这种情况下,目标为 172.31.0.0/24 的所有流量均路由到互联网网关,这是静态路由,因此,其优先级高于传播路由。

目的地 目标
10.0.0.0/16 本地
172.31.0.0/24 vgw-11223344556677889(传播)
172.31.0.0/24 igw-12345678901234567(静态)

如果路由表包含指向以下任一项的静态路由,则相同的规则适用:

  • NAT 网关

  • 网络接口

  • 实例 ID

  • 网关 VPC 终端节点

  • 转换网关

  • VPC 对等连接

如果静态路由和传播路由的目的地相同,则静态路由优先。

前缀列表的路由优先级

如果路由表引用前缀列表,则以下规则适用:

  • 如果路由表中包含的静态路由与引用前缀列表的另一条路由重叠,则具有目的地 CIDR 块的静态路由优先。

  • 如果路由表中包含的传播路由与引用前缀列表的路由重叠,则引用前缀列表的路由优先。

  • 如果路由表引用多个前缀列表,而这些前缀列表具有到不同目标的重叠的 CIDR 块,则我们会随机选择哪条路由优先。此后,同一路由将始终优先。

  • 如果前缀列表条目中的 CIDR 块对路由表无效,则忽略该 CIDR 块。例如,在子网路由表中,如果前缀列表包含的一个条目具有比 VPC CIDR 更具体的 CIDR,则忽略该条目。