虚拟网络流量路由

在本文中,了解 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 虚拟网络对等 All
虚拟网络网关 从本地通过边界网关协议 (BGP) 播发的前缀,或者在本地网关中配置的前缀 虚拟网络网关 All
默认 多个 VirtualNetworkServiceEndpoint 仅为其启用服务终结点的子网
  • 虚拟网络对等互连:在两个虚拟网络之间创建虚拟网络对等互连时,系统会为每个参与对等互联的虚拟网络的地址空间中的每个地址范围添加一个路由。 详细了解虚拟网络对等互连

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

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

    注意

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

自定义路由

可通过两种方式来创建自定义路由:创建用户定义的路由 (UDR),或者在本地网关和 Azure 虚拟网关之间 BGP 路由。

用户定义

若要自定义流量路由,不应修改默认路由。 而是应创建自定义或用户定义的(静态)路由,以替代 Azure 默认系统路由。 在 Azure 中,创建一个路由表,然后将该路由表关联到零个或更多虚拟网络子网。 每个子网可以有一个与之关联的路由表,也可以没有。 若要了解可添加到路由表的最大路由数以及可为每个 Azure 订阅创建的 UDR 表数量上限,请参阅 Azure 限制

默认情况下,路由表最多可以包含 400 个 UDR。 使用 Azure Virtual Network Manager 的路由配置时,此数量可扩展到每个路由表 1000 个 UDR。 调高的这一限制支持更高级的路由设置。 例如,当你有更多的分支虚拟网络时,通过防火墙将流量从本地数据中心引导到中心和分支拓扑中的每个分支虚拟网络。

在你创建路由表并将其与子网关联时,该表的路由将与子网的默认路由组合。 如果存在冲突的路由分配,UDR 将替代默认路由。

可在创建 UDR 时指定下面的下一个跃点类型:

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

    • 附加到虚拟机的网络接口的专用 IP 地址。 如果网络接口附加到虚拟机,而虚拟机将网络流量转发到不是自己地址的地址,则该网络接口必须为其启用 Azure 选项“启用 IP 转发”。 此设置禁止 Azure 在源和目标中检查网络接口。 详细了解如何为网络接口启用 IP 转发。 “启用 IP 转发”是一项 Azure 设置

      你可能需要在虚拟机的操作系统中启用 IP 转发,否则设备无法在分配到 Azure 网络接口的专用 IP 地址之间转发流量。 如果设备需要将流量路由到公共 IP 地址,则它必须代理流量或执行网络地址转换 (NAT),方向为从源的专用 IP 地址到自己的专用 IP 地址。 然后,Azure 先对公共 IP 地址执行 NAT,然后再将流量发送到 Internet。 若要确定虚拟机中的必需设置,请参阅操作系统或网络应用程序的文档。 若要了解 Azure 中的出站连接,请参阅了解出站连接

      注意

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

      下一个跃点专用 IP 地址必须具有直接连接,无需通过 Azure ExpressRoute 网关或 Azure 虚拟 WAN 进行路由。 将下一个跃点设置为不带直接连接的 IP 地址会导致 UDR 配置无效。

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

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

  • 虚拟网络网关:需要将目标为特定地址前缀的流量路由到虚拟网络网关时,请指定此项。 创建虚拟网关时,类型必须为“VPN”。 不能在 UDR 中指定将虚拟网关创建为 ExpressRoute 类型,因为类型为 ExpressRoute 时,必须对自定义路由使用 BGP。 如果有虚拟专用网 (VPN) 和 ExpressRoute 共存的连接,则不能指定虚拟网络网关。 可以定义一个路由,让其将目标为 0.0.0.0/0 地址前缀的流量定向到基于路由的虚拟网关。

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

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

  • Internet:如果要将发往某个地址前缀的流量显式路由到 Internet,请指定“Internet”选项。 或者,如果希望将目标为具有公共 IP 地址的 Azure 服务的流量保留在 Azure 主干网络内,请使用它。

无法将“虚拟网络对等互连”或 VirtualNetworkServiceEndpoint 指定为 UDR 中的下一个跃点类型。 只有在创建虚拟网络对等互连或服务终结点时,Azure 才会在下一个跃点类型为“虚拟网络对等互连”或 VirtualNetworkServiceEndpoint 的情况下创建路由。

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

现可将服务标记指定为 UDR 的地址前缀,而不是显式 IP 范围。 服务标记表示来自特定 Azure 服务的一组 IP 地址前缀。 Microsoft 会管理服务标记包含的地址前缀,并会在地址发生更改时自动更新服务标记。 这支持将频繁更新 UDR 的复杂性降到最低,并减少需要创建的路由数量。 目前,可在每个路由表中创建不超过 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

Azure 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)
虚拟网络对等 虚拟网络对等 不适用
虚拟网络服务终结点 VirtualNetworkServiceEndpoint 不适用

边界网关协议

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

  • ExpressRoute:必须使用 BGP 将本地路由播发到 Microsoft 边缘路由器。 如果将虚拟网关部署为 ExpressRoute 类型,则不能通过创建 BGP 来强制流量到达 ExpressRoute 虚拟网关。 例如,可以使用 BGP 强制来自 Express Route 的流量到达网络虚拟设备。
  • VPN:可以选择性地使用 BGP。 有关详细信息,请参阅 BGP 与站点到站点 VPN 连接配合使用

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

可以使用路由表上的属性在子网上禁用 ExpressRoute 和 Azure 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/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 选择源为“用户”的路由。 Azure 选择此选项的原因是,UDR 的优先级高于系统默认路由。

如需提供了路由说明的全面路由表,请参阅路由示例

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 区域。

    创建下一个跃点类型为“虚拟网络网关”或“虚拟设备”的 UDR 或 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. 允许所有其他子网和虚拟网络之间的所有流量。

实现

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

显示网络实现的图示。

箭头显示流量方向。

路由表

下面是上述路由示例的路由表。

Subnet1

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

ID 状态 地址前缀 下一跃点类型 下一跃点 IP 地址 UDR 名称
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 虚拟网络对等
5 默认 无效 10.2.0.0/16 虚拟网络对等
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] VirtualNetworkServiceEndpoint
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 中创建 UDR,则发送到 10.0.0.1 与 10.0.255.254 之间任何地址的流量将在虚拟网络中进行路由。 发生此过程是因为前缀长于 0.0.0.0/0,并且不在任何其他路由的地址前缀内。

    添加 ID2 (UDR) 时,Azure 会自动将状态从“活动”更改为“无效”。 它具有与默认路由相同的前缀,UDR 会替代默认路由。 对于 Subnet2 来说,此路由的状态仍然为“活动”,因为 ID2 (UDR) 所在的路由表未关联到 Subnet2。

  • ID2:将地址前缀为 10.0.0.0/16 的 UDR 关联到 Virtual-network-1 虚拟网络中的 Subnet1 子网时,Azure 添加了此路由。 UDR 指定了 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 的 UDR 关联到 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 中创建 UDR,则发送到 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 中的路由相同的前缀,并且 UDR 替代了默认路由。 对于 Subnet2 来说,ID 4 和 5 中路由的状态仍然为“活动”,因为 ID 6 和 7 中的 UDR 所在的路由表未关联到 Subnet2。 创建虚拟网络对等互连是为了满足要求 1。

  • ID5:与 ID4 的说明相同。

  • ID6:将地址前缀为 10.1.0.0/16 和 10.2.0.0/16 的 UDR 关联到 Subnet1 子网时,Azure 添加了此路由以及 ID7 中的路由。 Azure 放弃目标为 10.1.0.1-10.1.255.254 与 10.2.0.1-10.2.255.254 之间的地址的流量,而不是将其路由到对等互连的虚拟网络,因为 UDR 会替代默认路由。 这些路由未关联到 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 的 UDR 添加到已关联到 Subnet1 的路由表时,Azure 添加了此路由。 此路由替代 ID8。 此路由将所有目标为本地网络的流量发送到网络虚拟设备进行检查,而不是直接将流量路由到本地。 创建此路由是为了满足要求 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 的 UDR (ID12) 关联到 Subnet1 子网时,Azure 自动将该子网的状态从“活动”更改为“无效”。 对于这两个虚拟网络中的所有其他子网,此路由的状态仍为“活动”,因为此路由未关联到任何其他虚拟网络中的任何其他子网。

  • ID12:将地址前缀为 0.0.0.0/0 的 UDR 关联到 Subnet1 子网时,Azure 添加了此路由。 UDR 指定了 10.0.100.4 作为虚拟设备的 IP 地址。 此路由未关联到 Subnet2,因此未出现在 Subnet2 的路由表中。 地址未包括在任何其他路由的地址前缀中的所有流量都发送到虚拟设备。

    对于 Subnet1,添加此路由后,地址前缀为 0.0.0.0/0 的默认路由 (ID11) 的状态就从“活动”变成了“无效”,因为 UDR 会替代默认路由。 此路由存在的原因是为了满足要求 3。

Subnet2

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

Source 状态 地址前缀 下一跃点类型 下一跃点 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 的 UDR 时,Azure 从 Subnet1 路由表中删除了地址前缀为 10.0.0.0/8、192.168.0.0/16 和 100.64.0.0/10 的路由。