虚拟网络流量路由

了解 Azure 如何在 Azure 资源、本地资源和 Internet 资源之间路由流量。 Azure 自动为 Azure 虚拟网络中的每个子网创建一个路由表,然后向该表添加系统默认路由。 若要详细了解虚拟网络和子网,请参阅虚拟网络概述。 可以使用自定义路由替代 Azure 的部分系统路由,并向路由表添加更多自定义路由。 Azure 根据子网的路由表中的路由,从子网路由出站流量。

系统路由

Azure 自动创建系统路由,并将路由分配到虚拟网络中的每个子网。 你不能创建系统路由,也不能删除系统路由,但可以使用自定义路由替代某些系统路由。 当你使用特定的 Azure 功能时,Azure 为每个子网创建默认系统路由,并向特定子网或每个子网添加更多可选默认路由

默认

每个路由包含地址前缀和下一跃点类型。 将离开子网的流量发送到某个路由的地址前缀中的 IP 地址时,包含前缀的该路由是 Azure 使用的路由。 详细了解当多个路由包含相同的前缀或重叠前缀时,Azure 如何选择路由。 只要创建了虚拟网络,Azure 就会自动为虚拟网络中的每个子网创建下述默认的系统路由:

地址前缀 下一跃点类型
默认 对虚拟网络唯一 虚拟网络
默认 0.0.0.0/0 Internet
默认 10.0.0.0/8
默认 172.16.0.0/12
默认 192.168.0.0/16
默认 100.64.0.0/10

上表中列出的下一跃点类型表示 Azure 如何路由目标为所列地址前缀的流量。 下面是下一跃点类型的说明:

  • 虚拟网络:在虚拟网络的地址空间中的地址范围之间路由流量。 Azure 使用地址前缀创建路由,该前缀对应的每个地址范围是在虚拟网络的地址空间中定义的。 如果虚拟网络地址空间定义了多个地址范围,Azure 会为每个地址范围创建单个路由。 Azure 使用为每个地址范围创建的路由在子网之间自动路由流量。 不需为 Azure 定义在子网之间路由流量的网关。 尽管虚拟网络包含子网,并且每个子网具有定义的地址范围,Azure 不会为子网地址范围创建默认路由。 每个子网地址范围都在虚拟网络地址空间的地址范围内。

  • Internet:将地址前缀指定的流量路由到 Internet。 系统默认路由指定 0.0.0.0/0 地址前缀。 如果不替代 Azure 的默认路由,Azure 会将不是通过虚拟网络中的地址范围指定的地址的流量路由到 Internet。 此路由有一个例外。 如果目标地址是用于某个 Azure 服务的,Azure 会将流量通过 Azure 的主干网络直接路由到该服务,而不是将流量路由到 Internet。 Azure 服务之间的流量不跨越 Internet,不管虚拟网络存在于哪个 Azure 区域,也不管 Azure 服务的实例部署在哪个 Azure 区域。 可以将 0.0.0.0/0 地址前缀对应的 Azure 默认系统路由替代为自定义路由

  • 无:系统会将路由到“”下一个跃点类型的流量删除,而不是将其路由到子网外。 Azure 自动为以下地址前缀创建默认路由:

    • 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16:保留在 RFC 1918 中专用。

    • 100.64.0.0/10:保留在 RFC 6598 中使用。

    如果将上述任何地址范围分配到虚拟网络的地址空间中,Azure 会自动将路由的下一跃点类型从“无”更改为“虚拟网络”。 如果将地址范围分配到虚拟网络的地址空间时,该地址空间包括四个保留地址前缀中的一个,但与其并不相同,则 Azure 会删除该前缀对应的路由,为你所添加的地址前缀添加一个路由,并使用“虚拟网络”作为下一跃点类型。

可选默认路由

Azure 会针对不同的 Azure 功能添加更多默认的系统路由,但前提是你启用这些功能。 Azure 会根据功能将可选的默认路由添加到虚拟网络中的特定子网,或者添加到虚拟网络中的所有子网。 启用不同的功能时,Azure 可能添加的其他系统路由和下一跃点类型为:

地址前缀 下一跃点类型 将路由添加到的虚拟网络的子网
默认 对虚拟网络唯一,例如:10.1.0.0/16 VNet 对等互连 All
虚拟网络网关 从本地通过 BGP 播发的前缀,或者在本地网关中配置的前缀 虚拟网络网关 All
默认 多个 虚拟网络服务终结点 仅为其启用服务终结点的子网。
  • 虚拟网络 (VNet) 对等互连:在两个虚拟网络之间创建虚拟网络对等互连时,系统会为每个参与对等互联的虚拟网络的地址空间中的每个地址范围添加一个路由。 详细了解虚拟网络对等互连

  • 虚拟网络网关:向虚拟网络添加虚拟网关时,会添加一个或多个将“虚拟网络网关”列为下一跃点类型的路由。 源也是“虚拟网关”,因为网关向子网添加路由。 如果本地网关与虚拟网关交换了边界网关协议 (BGP) 路由,则系统会为每个路由添加一个路由。 这些路由从本地网关传播。 建议尽可能将本地路由汇总到最大地址范围,这样可以将传播到 Azure 虚拟网关的路由数控制在最少。 传播到 Azure 虚拟网关的路由存在数量限制。 有关详细信息,请参阅 Azure 限制

  • 虚拟网络服务终结点:启用特定服务的服务终结点时,Azure 会将该服务的公共 IP 地址添加到路由表。 服务终结点是为虚拟网络中的单个子网启用的,因此仅将路由添加到为其启用了服务终结点的子网的路由表。 Azure 服务的公共 IP 地址定期更改。 当地址更改时,Azure 自动管理路由表中的地址。 详细了解虚拟网络服务终结点,以及可以为其创建服务终结点的服务。

    注意

    “VNet 对等互连”和“虚拟网络服务终结点”下一跃点类型仅添加到通过 Azure 资源管理器部署模型创建的虚拟网络中子网的路由表。 下一跃点类型不添加到通过经典部署模型与虚拟网络子网关联的路由表。 详细了解 Azure 部署模型

自定义路由

创建自定义路由有两种方式:一是创建用户定义路由,二是在本地网关和 Azure 虚拟网关之间交换边界网关协议 (BGP) 路由。

用户定义

可以在 Azure 中创建自定义或用户定义(静态)路由,以便替代 Azure 的默认系统路由,或者向子网的路由表添加更多路由。 可以在 Azure 中创建一个路由表,然后将该路由表关联到零个或零个以上的虚拟网络子网。 每个子网可以有一个与之关联的路由表,也可以没有。 若要了解可以添加到路由表的最大路由数,以及可以为每个 Azure 订阅创建的最大用户定义路由表数,请参阅 Azure 限制。 在你创建路由表并将其与子网关联时,该表的路由将与子网的默认路由组合。 如果存在冲突的路由分配,则用户定义的路由将替代默认路由。

可以在创建用户定义路由时指定下面的下一跃点类型:

  • 虚拟设备:虚拟设备是通常情况下运行防火墙等网络应用程序的虚拟机。 若要了解各种可在虚拟网络中部署的预配置网络虚拟设备,请参阅 Azure 市场。 使用“虚拟设备”跃点类型创建路由时,也指定下一跃点 IP 地址。 IP 地址可以是:

    • 附加到虚拟机的网络接口的专用 IP 地址。 如果网络接口附加到虚拟机,而虚拟机将网络流量转发到不是自己地址的地址,则该网络接口必须为其启用 Azure 选项“启用 IP 转发”。 此设置禁止 Azure 在源和目标中检查网络接口。 详细了解如何为网络接口启用 IP 转发。 虽然“启用 IP 转发”是一项 Azure 设置,但你也可能需要在虚拟机的操作系统中启用 IP 转发,否则设备无法在分配到 Azure 网络接口的专用 IP 地址之间转发流量。 如果设备需要将流量路由到公共 IP 地址,则它必须代理流量或执行网络地址转换 (NAT),方向为从源的专用 IP 地址到自己的专用 IP 地址。 然后,Azure 先对公共 IP 地址执行 NAT,然后再将流量发送到 Internet。 若要确定虚拟机中的必需设置,请参阅操作系统或网络应用程序的文档。 若要了解 Azure 中的出站连接,请参阅了解出站连接

      注意

      将虚拟设备部署到不同于通过虚拟设备路由的资源的子网中。 如果将虚拟设备部署到同一子网,然后将路由表应用到通过虚拟设备路由流量的子网,则可能导致路由循环,使流量无法离开子网。

      下一个跃点专用 IP 地址必须具有直接连接,而不必通过 ExpressRoute 网关或虚拟 WAN 进行路由。 如果将下一个跃点设置为没有直接连接的 IP 地址,将导致用户定义的路由配置无效。

    • Azure 内部负载均衡器的专用 IP 地址。 负载均衡器通常作为网络虚拟设备的高可用性策略的一部分使用。

    可以定义一个地址前缀为 0.0.0.0/0 的路由和虚拟设备的下一个跃点类型。 此配置允许设备检查流量,并确定是转发还是丢弃流量。 若要创建包含 0.0.0.0/0 地址前缀的用户定义路由,请先阅读 0.0.0.0/0 地址前缀

  • 虚拟网络网关:需要将目标为特定地址前缀的流量路由到虚拟网络网关时,请指定此项。 创建虚拟网关时,类型必须为“VPN”。 不能在用户定义路由中指定将虚拟网关创建为“ExpressRoute”类型,因为类型为 ExpressRoute 时,必须对自定义路由使用 BGP。 如果有 VPN 和 ExpressRoute 共存的连接,则不能指定虚拟网络网关。 可以定义一个路由,让其将目标为 0.0.0.0/0 地址前缀的流量定向到基于路由的虚拟网关。 可以在本地设置一个设备,让其检查流量并决定是转发还是丢弃流量。 若要创建地址前缀为 0.0.0.0/0 的用户定义路由,请先阅读 0.0.0.0/0 地址前缀。 可以通过 BGP 播发前缀为 0.0.0.0/0 的路由,而不必配置地址前缀为 0.0.0.0/0 的用户定义路由,前提是为 VPN 虚拟网关启用 BGP

  • :需要丢弃流向某个地址前缀的流量,而不是将该流量转发到目标时,请指定此项。 如果某项功能尚未完全配置好,Azure 可能会针对部分可选的系统路由列出“无”。 例如,如果看到“无”作为“下一跃点 IP 地址”列出,且“下一跃点类型”为“虚拟网关”或“虚拟设备”,则可能是因为设备未运行或未完全配置好。 Azure 为保留的地址前缀创建系统默认路由,使用“无”作为下一跃点类型。

  • 虚拟网络:需要替代虚拟网络中的默认路由时,请指定虚拟网络选项。 请参阅路由示例,通过示例了解为何需创建跃点类型为“虚拟网络”的路由。

  • Internet:需要将目标为某个地址前缀的流量显式路由到 Internet 时,或者需要将流量的目标设定为 Azure 服务,且公共 IP 地址始终位于 Azure 主干网络内时,请指定 Internet

不能在用户定义的路由中指定“虚拟网络对等互连”或“VirtualNetworkServiceEndpoint”作为下一个跃点类型。 下一个跃点类型为“虚拟网络对等互连”或“VirtualNetworkServiceEndpoint”的路由只能在配置虚拟网络对等互连或服务终结点时通过 Azure 创建。

用户定义的路由的服务标记

现可将服务标记指定为用户定义的路由的地址前缀,而不是显式 IP 范围。 服务标记代表给定 Azure 服务中的一组 IP 地址前缀。 Azure 会管理服务标记包含的地址前缀,并会在地址发生更改时自动更新服务标记。 从而最大限度地减少对用户定义的路由进行频繁更新的复杂性,并减少你需要创建的路由数量。 当前可在每个路由表中创建不超过 25 个带服务标记的路由。 在此版本中,还支持在容器的路由方案中使用服务标记。

完全匹配

如果在具有显式 IP 前缀的路由和具有服务标记的路由之间存在精确的前缀匹配,系统将优先考虑具有显式前缀的路由。 如果带服务标记的多个路由具有匹配的 IP 前缀,会按以下顺序评估路由:

  1. 区域标记(例如 Storage.ChinaEast)

  2. 顶级标记(例如 Storage)

  3. AzureCloud 区域标记(例如 AzureCloud.ChinaEast)

  4. AzureCloud 标记

s

若要使用此功能,请在路由表命令中指定地址前缀参数的服务标记名称。 例如,可在 PowerShell 中使用以下命令创建新的路由,将发送到 Azure 存储 IP 前缀的流量定向到虚拟设备:

$param = @{
    Name = 'StorageRoute'
    AddressPrefix = 'Storage'
    NextHopType = 'VirtualAppliance'
    NextHopIpAddress = '10.0.100.4'
}
New-AzRouteConfig @param

CLI 的相同命令如下所示:

az network route-table route create \
    --resource-group MyResourceGroup \
    --route-table-name MyRouteTable \
    --name StorageRoute \
    --address-prefix Storage \
    --next-hop-type VirtualAppliance \
    --next-hop-ip-address 10.0.100.4

各个 Azure 工具中的下一跃点类型

下一跃点类型的显示和引用名称在 Azure 门户和命令行工具以及 Azure 资源管理器部署模型和经典部署模型中并不相同。 下表列出了在不同的工具和部署模型中引用每个下一跃点类型时所使用的名称:

下一跃点类型 Azure CLI 和 PowerShell(资源管理器) Azure 经典 CLI 和 PowerShell(经典)
虚拟网络网关 VirtualNetworkGateway VPNGateway
虚拟网络 VNetLocal VNETLocal(不适用于服务管理模式下的经典 CLI)
Internet Internet Internet(不适用于服务管理模式下的经典 CLI)
虚拟设备 VirtualAppliance VirtualAppliance
Null(不适用于服务管理模式下的经典 CLI)
虚拟网络对等互连 VNet 对等互连 不适用
虚拟网络服务终结点 虚拟网络服务终结点 不适用

边界网关协议

本地网关可以通过边界网关协议 (BGP) 与 Azure 虚拟网关交换路由。 将 BGP 与 Azure 虚拟网关配合使用的前提是在创建网关时选择了适当的类型:

  • ExpressRoute:必须使用 BGP 将本地路由播发到 Microsoft 边缘路由器。 如果将虚拟网关部署为 ExpressRoute 类型,则不能通过创建用户定义路由来强制流量到达 ExpressRoute 虚拟网关。 例如,可以使用用户定义的路由来强制来自 Express Route 的流量到达网络虚拟设备。

  • VPN:可以选择性地使用 BGP。 有关详细信息,请参阅 BGP 与站点到站点 VPN 连接配合使用

使用 BGP 与 Azure 交换路由时,系统会针对每个播发的前缀,将一个单独的路由添加到包含虚拟网络中所有子网的路由表。 添加路由时,会将虚拟网关列为源和下一跃点类型。

可以使用路由表的一个属性,在子网上禁用 ER 和 VPN 网关路由传播。 禁用路由传播时,系统不会将路由添加到禁用了虚拟网关路由传播的所有子网的路由表。 此过程适用于静态路由和 BGP 路由。 VPN 连接的连接性是通过下一跃点类型为“虚拟网关”自定义路由实现的。 不应在 GatewaySubnet 上禁用路由传播。 如果禁用此设置,网关将无法工作。 有关详细信息,请参阅如何禁用虚拟网络网关路由传播

Azure 如何选择路由

当出站流量是从子网发送时,Azure 使用最长前缀匹配算法,根据目标 IP 地址选择路由。 例如,一个路由表有两个路由:一个路由指定 10.0.0.0/24 地址前缀,另一个路由指定 10.0.0.0/16 地址前缀。 Azure 将发往 10.0.0.5 的流量定向到地址前缀为 10.0.0.0/24 的路由中指定的下一个跃点类型。 发生此过程是因为 10.0.0.0/24 的前缀比 10.0.0.0/16 长,即使 10.0.0.5 在这两个地址前缀之内。 Azure 将发往 10.0.1.5 的流量定向到地址前缀为 10.0.0.0/16 的路由中指定的下一个跃点类型。 发生此过程是因为 10.0.0.0.0/24 地址前缀中不包含 10.0.1.5,因此具有 10.0.0.0/16 地址前缀的路由成为最长匹配的前缀。

如果多个路由包含同一地址前缀,Azure 根据以下优先级选择路由类型:

  1. 用户定义的路由

  2. BGP 路由

  3. 系统路由

注意

即使 BGP 路由更具体,与虚拟网络、虚拟网络对等互连或虚拟网络服务终结点相关的流量的系统路由也仍是首选路由。

例如,路由表包含以下路由:

地址前缀 下一跃点类型
默认 0.0.0.0/0 Internet
用户 0.0.0.0/0 虚拟网络网关

当流量的目标 IP 地址位于路由表中任何其他路由的地址前缀之外时,Azure 选择源为“用户”的路由,因为用户定义路由的优先级高于系统默认路由。

请参阅路由示例,其中有一个全面的路由表,对多种路由进行了说明。

0.0.0.0/0 地址前缀

地址前缀为 0.0.0.0/0 的路由向 Azure 提供指示。 Azure 使用这些指示路由目标 IP 地址不在子网路由表中任何其他路由的地址前缀内的流量。 创建子网时,Azure 会创建地址前缀为“0.0.0.0/0”且下一跃点类型为“Internet”的默认路由。 如果不替代此路由,Azure 会将目标 IP 地址不包括在任何其他路由的地址前缀中的所有流量路由到 Internet。 例外是,目标为 Azure 服务公共 IP 地址的流量仍保留在 Azure 主干网络中,不路由到 Internet。 使用自定义路由替代此路由时,将定向发往不在路由表中任何其他路由的地址前缀内的地址的流量。 目标取决于是在自定义路由中指定网络虚拟设备还是虚拟网关。

替代 0.0.0.0/0 地址前缀时,不仅出站流量会从子网流经虚拟网关或虚拟设备,Azure 的默认路由还会发生以下更改:

  • Azure 将所有流量发送到路由中指定的下一跃点类型,包括目标为 Azure 服务公共 IP 地址的流量。 当地址前缀为 0.0.0.0/0 的路由的下一跃点类型为“Internet”时,从子网流向 Azure 服务公共 IP 地址的流量不会离开 Azure 的主干网络,不管虚拟网络或 Azure 服务资源存在于哪个 Azure 区域。 但在创建下一跃点类型为“虚拟网关”或“虚拟设备”的用户定义路由或 BGP 路由时,所有流量都会发送到路由中指定的下一跃点类型,包括发送到 Azure 服务(尚未为其启用服务终结点)公共 IP 地址的流量。 为服务启用服务终结点时,Azure 会为服务创建具有地址前缀的路由。 发往服务的流量不会路由到地址前缀为 0.0.0.0/0 的路由中的下一个跃点类型。 服务的地址前缀长于 0.0.0.0/0。

  • 你将不再能够直接从 Internet 访问子网中的资源。 可以从 Internet 间接访问子网中的资源。 地址前缀为 0.0.0.0/0 的路由的下一个跃点类型指定的设备必须处理入站流量。 流量遍历设备后,会到达虚拟网络中的资源。 如果路由包含下一跃点类型的以下值:

    • 虚拟设备:设备必须:

      • 可从 Internet 访问

      • 有分配的公共 IP 地址

      • 没有与阻止设备通信的网络安全组规则相关联

      • 不拒绝通信

      • 能够进行网络地址转换和转发,或者能够对流向子网中目标资源的流量进行代理,以及能够让流量返回 Internet。

    • 虚拟网络网关:如果网关为 ExpressRoute 虚拟网络网关,则连接了 Internet 的本地设备可以进行网络地址转换和转发,或者通过 ExpressRoute 的专用对等互连对流向子网中目标资源的流量进行代理。

如果虚拟网络已连接到 Azure VPN 网关,请不要将路由表与包含目标为 0.0.0.0/0 的路由的网关子网相关联。 这样做可能会阻止网关正常工作。 有关详细信息,请参阅 VPN 网关常见问题解答中的“我的 VPN 网关上的某些端口为何处于打开状态?”问题。

路由示例

为了说明本文中的概念,下述部分介绍了:

  • 带要求的方案

  • 条件所要求的自定义路由

  • 为一个子网设置的路由表,其中包括条件所要求的默认路由和自定义路由

注意

不应将此示例作为建议或最佳做法来实现。 提供此示例只是为了说明本文中的概念。

要求

  1. 在同一 Azure 区域实现两个虚拟网络,并允许资源在虚拟网络之间通信。

  2. 允许本地网络以安全方式通过 Internet 上的 VPN 隧道与两个虚拟网络通信。 也可使用 ExpressRoute 连接,但在此示例中,使用的是 VPN 连接。

  3. 对于一个虚拟网络中有一个子网的情况,请执行以下操作:

    • 强制来自子网的所有出站流量(到 Azure 存储和子网内的流量除外)流经网络虚拟设备进行检查和日志记录。

    • 不检查子网中专用 IP 地址之间的流量;允许流量在所有资源之间直接流动。

    • 丢弃目标为其他虚拟网络的出站流量。

    • 允许目标为 Azure 存储的出站流量直接流向存储,不强制其流经网络虚拟设备。

  4. 允许所有其他子网和虚拟网络之间的所有流量。

实现

下图显示了一个通过 Azure 资源管理器部署模型完成的符合上述要求的实现:

网络的示意图。

箭头显示流量方向。

路由表

Subnet1

图中 Subnet1 的路由表包含以下路由:

ID 状态 地址前缀 下一跃点类型 下一跃点 IP 地址 用户定义路由的名称
1 默认 无效 10.0.0.0/16 虚拟网络
2 用户 活动 10.0.0.0/16 虚拟设备 10.0.100.4 Within-VNet1
3 用户 活动 10.0.0.0/24 虚拟网络 Within-Subnet1
4 默认 无效 10.1.0.0/16 VNet 对等互连
5 默认 无效 10.2.0.0/16 VNet 对等互连
6 用户 活动 10.1.0.0/16 ToVNet2-1-Drop
7 用户 活动 10.2.0.0/16 ToVNet2-2-Drop
8 默认 无效 10.10.0.0/16 虚拟网络网关 [X.X.X.X]
9 用户 活动 10.10.0.0/16 虚拟设备 10.0.100.4 To-On-Prem
10 默认 活动 [X.X.X.X] 虚拟网络服务终结点
11 默认 无效 0.0.0.0/0 Internet
12 用户 活动 0.0.0.0/0 虚拟设备 10.0.100.4 Default-NVA

每个路由 ID 的说明如下所示:

  • ID1:Azure 自动为 Virtual-network-1 中的所有子网添加了此路由,因为 10.0.0.0/16 是在虚拟网络的地址空间中定义的唯一地址范围。 如果你没有在路由 ID2 中创建用户定义的路由,则发送到 10.0.0.1 与 10.0.255.254 之间任何地址的流量将在虚拟网络中进行路由。 此过程是因为前缀长于 0.0.0.0/0,并且不在任何其他路由的地址前缀内。 添加用户定义路由 ID2 时,Azure 自动将状态从“活动”更改为“无效”,因为其前缀与默认路由相同,且用户定义路由会替代默认路由。 对于 Subnet2 来说,此路由的状态仍为“活动”,因为用户定义路由 ID2 所在的路由表未关联到 Subnet2。

  • ID2:将地址前缀为 10.0.0.0/16 的用户定义路由关联到 Virtual-network-1 虚拟网络中的 Subnet1 子网时,Azure 添加了此路由。 用户定义路由指定 10.0.100.4 作为虚拟设备的 IP 地址,因为该地址是分配到虚拟设备虚拟机的专用 IP 地址。 此路由所在的路由表未关联到 Subnet2,因此未出现在 Subnet2 的路由表中。 此路由会替代 10.0.0.0/16 前缀的默认路由 (ID1),后者自动通过虚拟网络下一跃点类型将目标地址为 10.0.0.1 和 10.0.255.254 的流量路由到虚拟网络内部。 此路由存在的原因是为了满足要求 3,强制所有出站流量流经虚拟设备。

  • ID3:将地址前缀为 10.0.0.0/24 的用户定义路由关联到 Subnet1 子网时,Azure 添加了此路由。 目标为 10.0.0.1 和 10.0.0.254 之间地址的流量保留在子网内,而不是路由到前一规则 (ID2) 中指定的虚拟设备,因为它的前缀比 ID2 路由长。 此路由未关联到 Subnet2,因此未出现在 Subnet2 的路由表中。 对于 Subnet1 中的流量,此路由有效地替代了 ID2 路由。 此路由存在的原因是为了满足要求 3。

  • ID4:对于 Virtual-network-1 中的所有子网,Azure 在该虚拟网络与 Virtual-network-2 对等互连时自动在 ID 4 和 5 中添加了路由。Virtual-network-2 在其地址空间中有两个地址范围:10.1.0.0/16 和 10.2.0.0/16,因此,Azure 为每个范围添加了一个路由。 如果你没有在路由 ID 6 和 7 中创建用户定义的路由,则发送到 10.1.0.1-10.1.255.254 与 10.2.0.1-10.2.255.254 之间任何地址的流量将路由到对等互连的虚拟网络。 此过程是因为前缀长于 0.0.0.0/0,并且不在任何其他路由的地址前缀内。 在 ID 6 和 7 中添加路由时,Azure 会自动将状态从“活动”更改为“无效”。 此过程是因为它们具有与 ID 4 和 5 中的路由相同的前缀,并且用户定义的路由替代了默认路由。 对于 Subnet2 来说,ID 4 和 ID 5 中路由的状态仍为“活动”,因为 ID 6 和 ID 7 中用户定义路由所在的路由表未关联到 Subnet2。 创建虚拟网络对等互连是为了满足要求 1。

  • ID5:与 ID4 的说明相同。

  • ID6:将地址前缀为 10.1.0.0/16 和 10.2.0.0/16 的用户定义路由关联到 Subnet1 子网时,Azure 添加了此路由以及 ID7 中的路由。 Azure 放弃目标为 10.1.0.1-10.1.255.254 与 10.2.0.1-10.2.255.254 之间的地址的流量,而不是将其路由到对等互连的虚拟网络,因为用户定义的路由会替代默认路由。 这些路由未关联到 Subnet2,因此未出现在 Subnet2 的路由表中。 对于离开 Subnet1 的流量,这些路由替代 ID4 和 ID5 路由。 ID6 和 ID7 路由存在的目的是满足要求 3,丢弃目标为其他虚拟网络的流量。

  • ID7:与 ID6 的说明相同。

  • ID8:在 Virtual-network-1 中创建 VPN 类型的虚拟网关时,Azure 自动为该虚拟网络中的所有子网添加了此路由。 Azure 向路由表添加了虚拟网关的公共 IP 地址。 发送到 10.10.0.1 和 10.10.255.254 之间地址的流量路由到虚拟网关。 此前缀比 0.0.0.0/0 长,且不在任何其他路由的地址前缀中。 创建虚拟网关是为了满足要求 2。

  • ID9:将地址前缀为 10.10.0.0/16 的用户定义路由添加到已关联到 Subnet1 的路由表时,Azure 添加了此路由。 此路由替代 ID8。 此路由将所有目标为本地网络的流量发送到 NVA 进行检查,而不是直接将流量路由到本地。 创建此路由是为了满足要求 3。

  • ID10:为子网启用 Azure 服务的服务终结点时,Azure 自动将此路由添加到了子网。 Azure 通过 Azure 基础结构网络将流量从子网路由到服务的公共 IP 地址。 此前缀比 0.0.0.0/0 长,且不在任何其他路由的地址前缀中。 创建服务终结点是为了满足要求 3,允许目标为 Azure 存储的流量直接流向 Azure 存储。

  • ID11:Azure 自动向 Virtual-network-1 和 Virtual-network-2 中所有子网的路由表添加了此路由。0.0.0.0/0 地址前缀是最短的前缀。 发送到更长地址前缀中地址的流量根据其他路由来路由。 默认情况下,如果流量的目标地址不同于在某个其他路由中指定的地址,Azure 会将所有这些流量路由到 Internet。 将地址前缀为 0.0.0.0/0 的用户定义路由 (ID12) 关联到 Subnet1 子网时,Azure 自动将该子网的状态从“活动”更改为“无效”。 对于这两个虚拟网络中的所有其他子网,此路由的状态仍为“活动”,因为此路由未关联到任何其他虚拟网络中的任何其他子网。

  • ID12:将地址前缀为 0.0.0.0/0 的用户定义路由关联到 Subnet1 子网时,Azure 添加了此路由。 用户定义路由指定 10.0.100.4 作为虚拟设备的 IP 地址。 此路由未关联到 Subnet2,因此未出现在 Subnet2 的路由表中。 地址未包括在任何其他路由的地址前缀中的所有流量都发送到虚拟设备。 对于 Subnet1,添加此路由后,地址前缀为 0.0.0.0/0 的默认路由 (ID11) 的状态就从“活动”变成了“无效”,因为用户定义路由会替代默认路由。 此路由存在的原因是为了满足第三个要求

Subnet2

图中 Subnet2 的路由表包含以下路由:

状态 地址前缀 下一跃点类型 下一跃点 IP 地址
默认 活动 10.0.0.0/16 虚拟网络
默认 活动 10.1.0.0/16 虚拟网络对等互连
默认 活动 10.2.0.0/16 虚拟网络对等互连
默认 活动 10.10.0.0/16 虚拟网络网关 [X.X.X.X]
默认 活动 0.0.0.0/0 Internet
默认 活动 10.0.0.0/8
默认 活动 100.64.0.0/10
默认 活动 192.168.0.0/16

Subnet2 的路由表包含所有 Azure 创建的默认路由,以及可选的虚拟网络对等互连和虚拟网关可选路由。 向虚拟网络添加网关和对等互连时,Azure 向虚拟网络中的所有子网添加了可选路由。 向 Subnet1 添加地址前缀为 0.0.0.0/0 的用户定义路由时,Azure 从 Subnet1 路由表中删除了地址前缀为 10.0.0.0/8、192.168.0.0/16 和 100.64.0.0/10 的路由。

后续步骤