分支虚拟网络中的默认路由注入
Azure 中最常见的体系结构之一是中心分支设计,其中部署在分支虚拟网络 (VNet) 中的工作负载通过中心 VNet 中存在的共享网络设备发送流量。 用户定义的路由 (UDR) 通常需要在分支 VNet 中进行配置,以将流量引导到中心中的安全设备。 但是,此设计要求管理员跨多个分支管理这些路由。
Azure 路由服务器提供了一个集中点,网络虚拟设备 (NVA) 可在该点播发其注入分支 VNet 的路由。 这样,管理员就不必在分支 VNet 中创建和更新路由表。
拓扑
下图描述了使用中心 VNet 和两个分支 VNet 的简单中心和分支设计。 在中心中已经部署了网络虚拟设备和路由服务器。 如果没有路由服务器,则必须在每个分支中配置用户定义的路由。 这些 UDR 通常包含 0.0.0.0/0 的默认路由,该路由通过 NVA 发送来自分支 VNet 的所有流量。 此方案可用于执行出于安全目的检查流量等操作。
使用中心 VNet 中的路由服务器,无需使用由用户定义的路由。 NVA 将网络前缀播发给路由服务器,这会注入这些前缀,以便其显示在中心 VNet 或分支 VNet (通过设置使用远程虚拟网络的网关或路由服务器与中心 VNet 对等互连)中部署的任何虚拟机的有效路由中。
通过 NVA 连接到本地
如果使用 NVA 通过 IPsec VPN 或 SD-WAN 技术提供与本地网络的连接,则可以使用相同的机制将流量从分支吸引到 NVA。 此外,NVA 还可以从 Azure 路由服务器动态了解 Azure 前缀,并使用动态路由协议将其播发到本地。 下图描述了此设置:
通过 NVA 检查专用流量
前面的部分描述了网络虚拟设备 (NVA) 通过将 0.0.0.0/0
默认路由从 NVA 注入到路由服务器来检查的流量。 但是,如果你只想通过 NVA 检查分支到分支以及分支到本地的流量,则应考虑到 Azure 路由服务器不会播发前缀与从 NVA 获知的虚拟网络地址空间相同或更长的路由。 换言之,Azure 路由服务器不会将这些前缀注入到虚拟网络,且不会在中心或分支 VNet 中的虚拟机 NIC 上进行编程。
但是,Azure 路由服务器播发的子网比从 NVA 获知的 VNet 地址空间更大。 可以从 NVA 播发虚拟网络中已有的超网。 例如,如果虚拟网络使用 RFC 1918 地址空间 10.0.0.0/16
,则 NVA 可以将 10.0.0.0/8
播发到 Azure 路由服务器,这些前缀将注入到中心和分支 VNet。 请参阅关于使用 VPN 网关的 BGP 了解这种 VNet 行为。
重要
如果你的方案从 ExpressRoute 和 NVA 播发长度相同的前缀,Azure 将优先使用从 ExpressRoute 获知的路由并为其编程。 有关更多信息,请参见下一节。
通过虚拟网络网关连接到本地
如果 VPN 或 ExpressRoute 网关与路由服务器和 NVA 存在于相同的虚拟网络中以提供与本地网络的连接,则这些网关获知的路由也会在分支 Vnet 中进行编程。 这些路由将覆盖路由服务器注入的默认路由 (0.0.0.0/0
),因为它们会更具体(更长的网络掩码)。 下图描述了已添加 ExpressRoute 网关的上一个设计。
无法在分支 VNet 中配置子网以便仅获知来自 Azure 路由服务器的路由。 在与子网关联的路由表中禁用“传播网关路由”将阻止两种类型的路由(来自虚拟网络网关的路由和来自 Azure 路由服务器的路由)注入该子网中的 NIC。
默认情况下,路由服务器也会将从 NVA 获知的所有前缀播发到 ExpressRoute。 这可能是不需要的,例如,由于 ExpressRoute 的路由限制或路由服务器本身。 在这种情况下,NVA 可以宣布其到路由服务器的路由,包括 BGP 社区 no-advertise
(值为 65535:65282
)。 当路由服务器通过此 BGP 社区接收路由时,它会将这些路由注入子网,但不会将其播发到任何其他 BGP 对等机(如 ExpressRoute 或 VPN 网关,或其他 NVA)。
SDWAN 与 ExpressRoute 和Azure 防火墙共存
之前设计的一个特定情况是,客户在流量流中插入 Azure 防火墙,以检查通过 ExpressRoute 或通过 SD-WAN/VPN 设备流向本地网络的所有流量。 在这种情况下,所有分支子网都有路由表,这些路由表防止分支从 ExpressRoute 或路由服务器得知任何路由,并将 Azure 防火墙的默认路由 (0.0.0.0/0) 作为下一个跃点,如下图所示:
Azure 防火墙子网将得知来自 ExpressRoute 和 VPN/SDWAN NVA 的路由,并决定选择哪一种方式发送流量。 如上一部分所述,如果 NVA 设备向路由服务器播发超过 200 个路由,则应发送其带有 BGP 社区 no-advertise
标记的 BGP 路由。 这样,SDWAN 前缀将不会通过 Express-Route 注入回本地。
流量对称
如果在主动/主动方案中使用多个 NVA 实例来实现更好的复原能力或可伸缩性,则当 NVA 需要保持连接状态时,将需要流量对称。 这是下一代防火墙的示例。
- 对于从 Azure 虚拟机到公共 Internet 的连接,NVA 将使用源网络地址转换 (SNAT),以便出口流量来源于 NVA 的公共 IP 地址,从而实现流量对称。
- 对于从 Internet 到虚拟机中运行的工作负载的入站流量,除了目标网络地址转换 (DNAT) 之外,NVA 还需要执行源网络地址转换 (SNAT),以确保来自虚拟机的返回流量到达处理第一个数据包的同一个 NVA 实例。
- 对于 Azure 到 Azure 的连接,由于源虚拟机将独立于目标做出路由决策,因此现在需要 SNAT 来实现流量对称。
多个 NVA 实例也可以部署在主动/被动设置中,例如,如果其中一个实例播发的路由比另一个更差(具有更长的 AS 路径)。 在这种情况下,Azure 路由服务器将仅在 VNet 虚拟机中注入首选路由,并且仅当主 NVA 实例停止通过 BGP 播发时,才会使用次首选路由。
用于将路由播发到虚拟网络网关和 VNet 的不同路由服务器
如前几节所示,Azure 路由服务器具有双重角色:
- 它从虚拟网络网关得知路由以及将路由播发到虚拟网络网关(VPN 和 ExpressRoute)
- 它在其 VNet 上和直接对等互连的 VNet 上配置得知的路由
这种双重功能通常很有趣,但有时会对某些要求造成不利影响。 例如, 如果路由服务器部署在 VNet 中,其中 NVA 播发 0.0.0.0/0 路由和来自本地的 ExpressRoute 网关播发前缀,它将在其 VNet 和直接对等互连的 VNet 中的虚拟机上配置所有路由(NVA 中的 0.0.0.0/0 和本地前缀)。 因此,由于本地前缀将比 0.0.0.0/0 更具体,本地和 Azure 之间的流量将绕过 NVA。 如果不需要这样做,可按照本文前述部分在 VM 子网中禁用 BGP 传播并配置 UDR。
但是,还有一种更动态的替代方法。 可以将不同的 Azure 路由服务器用于不同的功能:其中一个负责与虚拟网络网关交互,另一个用于与虚拟网络路由交互。 下图显示了一个可能的设计方案:
中心中的路由服务器 1 用于将 SDWAN 中的前缀注入 ExpressRoute。 由于分支 VNet 与中心 VNet 的对等互连不是通过使用远程虚拟网络的网关或路由服务器(在分支 VNet 对等互连中)或使用此虚拟网络的网关或路由服务器(中心中的网关传输)来实现的,因此分支 VNet 不会了解这些路由(包括 SDWAN 前缀和 ExpressRoute 前缀)。
为了将路由传播到分支 VNet,NVA 使用部署在新的辅助 VNet 中的路由服务器 2。 NVA 只会将单个 0.0.0.0/0
路由传播到路由服务器 2。 由于分支 VNet 与此辅助 VNet 的对等互连是通过使用远程虚拟网络的网关或路由服务器(在分支 VNet 对等互连中)和使用此虚拟网络的网关或路由服务器(中心 VNet 对等互连中的网关传输)来实现的,因此辐射中的所有虚拟机将会得知 0.0.0.0/0
路由。
此 0.0.0.0/0
路由的下一个跃点是 NVA,因此分支 VNet 仍然需要与中心 VNet 对等互连。 需要注意的另一个重要方面是,中心 VNet 需要与部署路由服务器 2 的 VNet 对等互连,否则将无法创建 BGP 邻接。
如果要将从 ExpressRoute 到分支 VNet 的流量发送到防火墙 NVA 进行检查,则 GatewaySubnet 中的路由表仍是必需的,否则 ExpressRoute 虚拟网络网关将使用从 VNet 对等互连中获知的路由将数据包发送到虚拟机。 此路由表中的路由应与分支前缀匹配,下一个跃点应为防火墙 NVA 的 IP 地址(或为防火墙 NVA 前面的负载均衡器,以便实现冗余)。 防火墙 NVA 可以与上图中的 SDWAN NVA 相同,也可以是不同的设备(例如 Azure 防火墙),因为 SDWAN NVA 可以播发下一个跃点指向其他 IP 地址的路由。 下图显示了此设计,其中添加了 Azure 防火墙:
注意
对于发往专用终结点的本地流量,此流量将绕过中心内的防火墙 NVA 或 Azure 防火墙。 但是,这会导致非对称路由(这可能导致本地和专用终结点之间的连接丢失),因为专用终结点会将本地流量转发到防火墙。 若要确保路由对称,请在部署专用终结点的子网上为专用终结点启用路由表网络策略。
此设计允许在分支 VNet 中自动注入路由,而不会受到从 ExpressRoute、VPN 或 SDWAN 环境得知的其他路由的干扰,此外还允许添加防火墙 NVA 进行流量检查。