参考官方文档:
由表中包含一系列被称为路由的规则,可用于判断网络流量的导向目的地。
在您的 VPC 中的每个子网必须与一个路由表关联;路由表控制子网的路由。一个子网一次只能与一个路由表关联,但您可以将多个子网与同一路由表关联。
路由表基本信息
以下是您需要了解的关于路由表的基本信息:
-
您的 VPC 有一个隐式路由器。
-
您的 VPC 会自动生成主路由表,以供您修改。
-
您可以为您的 VPC 创建额外的自定义路由表。
-
每个子网必须与一个路由表关联,这个路由表控制子网的路由。 如果您未在子网与特定路由表间建立显式关联,则这个子网将与主路由表建立隐式关联。
-
您不能删除主路由表,但可以将主路由表替换为您创建的自定义路由表(以使这个路由表成为默认路由表,并可与每个新增子网存在关联)。
-
表中的每项路由都指定了一个目的 CIDR 和目标 (例如,指向数据包被外部企业网络的 172.16.0.0/12 的数据将通向虚拟专用网关)。我们使用与流量匹配的最明确路由以判断数据流的路由方式。
-
每个路由表都包含一个实现 VPC 内部通信的本地路由。您无法修改或删除该路由。
-
在 VPC 中添加 Internet 网关、虚拟专用网关、NAT 设备、对等连接或 VPC 端点时,必须更新所有使用这些网关或连接的子网的路由表。
-
在每个 VPC 上创建的路由表和在每个路由表中添加的路由均存在数量限制。有关更多信息,请参阅 Amazon VPC 限制。
主路由表
当您创建 VPC 时,它会自动生成主路由表。 在 Amazon VPC 控制台中的 Route Tables 页面上,通过在 Main 列中查找 Yes 可以查看 VPC 的主路由表。主路由表控制未与任何其他路由表显式关联的所有子网的路由。您可以在主路由表中添加、删除和修改路由。
即使某个子网与主路由表已隐式关联,您也可以将它们显式关联。当您更改用作主路由表的表时,可以这样做。这会更改其他新子网或所有未与任何其他路由表显式关联的子网的默认设置。有关更多信息,请参阅 正在替换主路由表。
自定义路由表
除了默认路由表之外,您的 VPC 还可以有其他路由表。保护您的 VPC 的一种方式是保留主路由表的初始默认状态(仅包含本地路由),并将您创建的每个新建子网与您已经创建的自定义路由表之一建立显式关联。这样可以确保您能够显式控制每个子网的出站数据流的路由方式。
下图展示了同时有 Internet 网关和虚拟专用网关、以及一个公有子网和仅限 VPN 连接子网的 VPC 的路由。主路由表自带 VPC,同时还有仅限 VPN 的子网的路由。与公有子网关联的自定义路由表。自定义路由表内包含 Internet 网关路由(目的地为 0.0.0.0/0,目标为 Internet 网关)。
如果您在此 VPC 内创建一个新的子网,它将自动与主路由表关联,而主路由表会将数据流路由到虚拟专用网关。如果您设置反向配置(主路由表内包含通往 Internet 网关的路由,自定义路由表内包含通往虚拟专用网关的路由),则新子网会自动生成通往 Internet 网关的路由。
路由表关联
VPC 控制台显示与每个路由表显式关联的子网的数量,并提供与主路由表隐式关联的子网的信息。有关更多信息,请参阅 正在判断与表显式关联的子网。
子网可以与主路由表建立显式或隐式关联。子网通常不会与主路由表建立显式关联,尽管当您替换主路由表时可能会临时生成显式关联。
您可能需要更改主路由表,但是为避免数据流中断,您可以先使用自定义路由表测试路由更改。当您满意测试结果之后,您便可以将主路由表替换为新的自定义路由表。
下图展示的是一个有两个子网的 VPC,并且这些子网都与主路由表(路由表 A)有隐式关联,自定义路由表(路由表 B)则未与任何子网相关。
您可以在子网 2 和路由表 B 之间建立显式关联。
在您测试完路由表 B 之后,您可以将其设定为主路由表。请注意子网 2 仍与路由表 B 有显式关联,而子网 1 与路由表 B 有隐式关联,因为路由表 B 是新的主路由表。 路由表 A 已经不再使用。
如果您解除子网 2 与路由表 B 的关联,在子网 2 与路由表 B 之间仍将存在隐式关联。如果您不再需要路由表 A,您可以将其删除。
路由优先级
我们使用路由表中与流量匹配的最具体的路由来判断数据流的路由方式(最长前缀匹配)。例如,下面的路由表包含一条指向 Internet 网关的 Internet 流量 (0.0.0.0/0
) 路由、一条指向对等连接 (pcx-1a2b3c4d
) 的 172.31.0.0/16
流量路由。来自该子网的目标为 172.31.0.0/16
IP 地址范围的任意流量均使用对等连接,因为该路由比 Internet 网关路由更明确。目标设为 VPC (10.0.0.0/16
) 中的目标的任何流量将被 Local
路由涵盖,因此将在 VPC 中路由。来自该子网的所有其他流量使用 Internet 网关。
目标 | 目标 |
---|---|
10.0.0.0/16 | 本地 |
172.31.0.0/16 | pcx-1a2b1a2b |
0.0.0.0/0 | igw-11aa22bb |
如果您已将一个虚拟专用网关连接到 VPC,并且已启用路由表上的路由传播,则代表 VPN 连接的路由会在您的路由表中自动显示为已传播路由。以下情况将适用:
-
如果来自 VPN 连接或 AWS Direct Connect 连接的任何传播路由与 VPC 的本地路由重叠,则本地路由的优先级最高,即使传播路由更特定也是如此。
-
如果来自 VPN 连接或 AWS Direct Connect 连接的任何传播路由的目标 CIDR 块与其他现有静态路由的相同(无法应用最长前缀匹配),我们将设置其目标为 Internet 网关、虚拟专用网关、网络接口、实例 ID、VPC 对等连接或 VPC 端点的静态路由的优先级。
如果 VPN 连接内存在重叠路由,且最长前缀匹配不适用,则我们在 VPN 连接内按以下规则排序路由,从最高优先级到最低优先级:
-
来自 AWS Direct Connect 连接的 BGP 传播路由
-
为 VPN 连接手动添加的静态路由
-
来自 VPN 连接的 BGP 传播路由
在该示例中,路由表包含一条到 Internet 网关(您手动添加的)的静态路由和一条到虚拟专用网关的传播路由。这两条路由的目的地均为 172.31.0.0/24
。在这种情况下,目的地为172.31.0.0/24
的所有流量均路由到 Internet 网关 - 此为静态路由,因此,其优先级高于传播路由。
目标 | 目标 |
---|---|
10.0.0.0/16 | 本地 |
172.31.0.0/24 | vgw-1a2b3c4d(传播) |
172.31.0.0/24 | igw-11aa22bb |
路由选项
以下主题介绍了您的 VPC 中的特定网关或连接的路由。
Internet 网关的路由表
您可以通过向 Internet 网关添加路由来将一个子网设为公有子网。为此,请创建一个 Internet 网关并将其附加到您的 VPC,然后添加一个目的地为 0.0.0.0/0
且目标为 Internet 网关 ID (igw-xxxxxxxx
) 的路由。有关更多信息,请参阅 Internet 网关。
NAT 设备的路由表
要使私有子网中的实例能够连接到 Internet,您可以在公有子网中创建一个 NAT 网关或启动 NAT 实例,然后为私有子网添加一个路由以将 Internet 数据流 (0.0.0.0/0
) 路由到 NAT 设备。有关更多信息,请参阅 NAT 网关 和 NAT 实例。
虚拟专用网关的路由表
您可以使用 AWS 硬件 VPN 连接来支持 VPC 中的实例与您自己的网络进行通信。为此,请创建一个虚拟专用网关并将其附加到您的 VPC,然后添加一个目的地为您的网络且目标为虚拟专用网关 (vgw-xxxxxxxx
) 的路由。您随后可以创建和配置 VPN 连接。有关更多信息,请参阅 在您的 VPC 中添加硬件虚拟专用网关。
VPC 对等连接的路由表
VPC 对等连接是两个 VPC 之间的网络连接,通过此连接,您可以使用私有 IP 地址在这两个 VPC 之间路由流量。任何一个 VPC 中的实例都可以彼此通信,就像它们属于同一网络中一样。
要在 VPC 对等连接中的 VPC 之间实现流量路由,必须将一个路由添加到 VPC 的一个或多个路由表,该路由指向 VPC 对等连接以访问对等连接中另一个 VPC 的全部或部分 CIDR 块。同样,另一个 VPC 的拥有者必须将一个路由添加到其 VPC 的路由表,以将流量路由回您的 VPC。
例如,您在具有以下信息的两个 VPC 之间具有 VPC 对等连接 (pcx-1a2b1a2b
):
-
VPC A:
vpc-1111aaaa
,CIDR 块为 10.0.0.0/16 -
VPC B:
vpc-2222bbbb
,CIDR 块为 172.31.0.0/16
要启用 VPC 之间的流量并允许访问任一 VPC 的整个 CIDR 块,VPC A 的路由表的配置如下所示。
目标 | 目标 |
---|---|
10.0.0.0/16 | 本地 |
172.31.0.0/16 | pcx-1a2b1a2b |
VPC B 的路由表的配置如下所示。
目标 | 目标 |
---|---|
172.31.0.0/16 | 本地 |
10.0.0.0/16 | pcx-1a2b1a2b |
有关 VPC 对等连接的更多信息,请参阅 Amazon VPC Peering Guide。
ClassicLink 路由表
ClassicLink 功能允许您将 EC2-Classic 实例链接到 VPC,从而允许 EC2-Classic 实例与 VPC 中使用私有 IP 地址的实例进行通信。有关 ClassicLink 的更多信息,请参阅ClassicLink。
为 VPC 启用 ClassicLink 时,会向所有 VPC 的路由表添加一个路由,其目的地为 10.0.0.0/8
,目标为 local
。这允许 VPC 中的实例与后来链接到该 VPC 的任意 EC2-Classic 实例之间进行通信。如果您向启用了 ClassicLink 的 VPC 另外添加一个路由表,该路由表会自动接收一个目的地为10.0.0.0/8
并且目标为 local
的路由。如果禁用 VPC 的 ClassicLink,会从该 VPC 的所有路由表中自动删除此路由。
如果您的 VPC 的任意路由表具有地址范围在 10.0.0.0/8
CIDR 内的现有路由,则无法为该 VPC 启用 ClassicLink。这不包括 VPC 的 10.0.0.0/16
和 10.1.0.0/16
IP 地址范围的本地路由。
如果您已经为 VPC 启用了 ClassicLink,则无法再在路由表中添加 10.0.0.0/8
IP 地址范围的任何具体路由。
如果您修改 VPC 对等连接以允许 VPC 中的实例与已链接到对等 VPC 的 EC2-Classic 实例之间的通信,则静态路由将自动添加到您的路由表,其目的地为 10.0.0.0/8
,目标为 local
。如果您修改 VPC 对等连接以允许已链接到 VPC 的本地 EC2-Classic 实例与对等 VPC 中的实例之间的通信,则必须手动将路由添加到您的主路由表,其目的地为对等 VPC CIDR 块,目标为 VPC 对等连接。EC2-Classic 实例依赖主路由表来路由到对等 VPC。有关更多信息,请参阅 Amazon VPC Peering Guide中的使用 ClassicLink 进行配置。
VPC 端点的路由表
使用 VPC 端点可以在您的 VPC 和其他 AWS 服务之间创建私有连接。创建终端节点时,您指定 VPC 中由该终端节点使用的路由表。路由会自动添加到每个路由表中,这些路由表的目的地指定服务的前缀列表 ID (pl-
),目标具有相应终端节点 ID (xxxxxxxx
vpce-
)。您无法显式删除或修改终端节点路由,但可更改终端节点所使用的路由表。xxxxxxxx
有关终端节点路由的更多信息以及对到 AWS 服务的路由的影响,请参阅 终端节点路由。
使用路由表
此部分将为您展示如何使用路由表。
Note
当您使用控制台向导创建带有网关的 VPC 时,向导会自动为您更新使用网关的路由表。如果您正在使用命令行工具或 API 来设置您的 VPC,您必须自行更新路由表。
主题
正在判断与子网关联的具体路由表。
可通过在 Amazon VPC 控制台中查看子网的详细信息,判断该子网与哪个路由表关联。
判断与子网关联的路由表
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Subnets。
-
子网详细信息显示在 Summary (摘要) 选项卡中。选择 Route Table 选项卡可查看路由表 ID 及其路由。如果它是主路由表,控制台便无法表明关联为隐式或是显式。 如需判断与主路由表的关联是否为显式关联,请参见正在判断与表显式关联的子网。
正在判断与表显式关联的子网
您可以判断与路由表显式关联的子网数目以及存在关联的具体子网。
主路由表可以有显式和隐式关联。 自定义路由表只有显式关联。
未与任何路由表建立显式关联的子网都与主路由表有隐式关联。您可以在子网和主路由表中建立显式关联(有关您为何建立显式关联的原因,请参见正在替换主路由表)。
判断显式关联的子网
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables。
-
查看 Explicitly Associated With 列以确定显式关联的子网数。
-
选择所需的路由表。
-
在详细信息窗格中,选择 Subnet Associations 选项卡。与路由表有显式关联的子网已经列于选项卡之中。所有未与任何路由表关联的子网(并因此与主路由表隐式关联)也将被列出。
创建自定义路由表
您可以使用 Amazon VPC 控制台为 VPC 创建自定义路由表。
创建自定义路由表
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables。
-
选择 Create Route Table。
-
在 Create Route Table 对话框中,您可以选择为 Name tag 命名您的路由表。这样做可创建具有
Name
键以及指定值的标签。针对 VPC 选择您的 VPC,然后选择 Yes, Create。
在路由表中添加和删除路由
您可在路由表中添加、删除和修改路由。您只能修改已添加的路由。
修改路由或将路由添加到路由表
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Routes 选项卡中,选择 Edit。
-
要修改现有路由,请为 Destination 替换目的地 CIDR 块或单个 IP 地址,然后为 Target 选择一个目标。选择 Add another route、Save。
从路由表中删除路由
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Routes 选项卡中,选择 Edit,然后针对要删除的路由选择 Remove。
-
完成此操作后,选择 Save。
启用和禁用路由传播
路由传播允许虚拟专用网关自动传播路由至路由表,所以您便无需再手动向您的路由表中输入 VPN 路由。您可以启用或禁用路由传播。
有关 VPN 路由选项的更多信息,请参见 VPN 路由选项。
启用路由传播
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Route Propagation 选项卡上,选择 Edit。
-
选中虚拟专用网关旁边的 Propagate 复选框,然后选择 Save。
禁用路由传播
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Route Propagation 选项卡上,选择 Edit。
-
取消选中 Propagate 复选框,然后选择 Save。
正在将子网与路由表关联
若要对特定子网应用路由表路由,您必须将路由表与子网关联。一个路由表可以与多个子网关联;但是一个子网一次只能与一个路由表关联。任何未与路由表显式关联的子网都默认与主路由表隐式关联。
关联路由表和子网
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Subnet Associations 选项卡上,选择 Edit。
-
选中要与路由表关联的子网的 Associate 复选框,然后选择 Save。
更改子网路由表
您可以更改与子网关联的路由表。
更改子网路由表关联
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Subnets,然后选择子网。
-
在 Route Table 选项卡中,选择 Edit。
-
从 Change to 列表中选择要与子网关联的新路由表,然后选择 Save。
正在解除子网与路由表的关联
您可以解除子网与路由表的关联。在将子网与其他路由表关联前,它与主路由表是隐式关联的。
解除子网与路由表的关联
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Subnet Associations 选项卡中,选择 Edit。
-
取消选中子网的 Associate 复选框,然后选择 Save。
正在替换主路由表
您也可以更改作为 VPC 中主路由表的路由表。
替换主路由表
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables。
-
选择应为新的主路由表的路由表,然后选择 Set as Main Table。
-
在确认对话框中,选择 Yes, Set。
以下步骤描述如何删除子网与主路由表之间的显式关联。结果是在子网和主路由之间生成隐式关联。这个步骤与解除任何子网与任何路由表的步骤相同。
删除与主路由表的显式关联
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables,然后选择路由表。
-
在 Subnet Associations 选项卡中,选择 Edit。
-
取消选中子网的 Associate 复选框,然后选择 Save。
正在删除路由表
您只可以删除未与任何子网关联的路由表。您无法删除主路由表。
删除路由表
-
打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/。
-
在导航窗格中,选择 Route Tables。
-
选择路由表,然后选择 Delete。
-
在确认对话框中,选择 Yes, Delete。