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 网关的上一个设计。
为了防止使用 VPN 和 ExpressRoute 网关获取的本地前缀对你的分支 VNet 进行编程,可以对分支子网的路由表禁用“传播网关路由”。 为了确保 NVA 检查 VNet 向本地的流量,可以对分支子网的路由表配置 0.0.0.0/0 UDR(用户定义的路由),并将下一个跃点作为中心 VNet 中的 NVA/防火墙。 请注意,禁用“传播网关路由”将阻止这些分支子网从路由服务器动态学习路由。
默认情况下,路由服务器会将从 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 设备向路由服务器播发超过 1000 个路由,则应发送其带有 BGP 社区 no-advertise
标记的 BGP 路由。 这样,SDWAN 前缀将不会通过 Express-Route 注入回本地。
注意
对于发往专用终结点的本地流量,此流量将绕过中心内的防火墙 NVA 或 Azure 防火墙。 但是,这会导致非对称路由(这可能导致本地和专用终结点之间的连接丢失),因为专用终结点会将本地流量转发到防火墙。 若要确保路由对称,请在部署专用终结点的子网上为专用终结点启用路由表网络策略。
流量对称
如果在主动/主动方案中使用多个 NVA 实例来提高复原能力或可伸缩性,则当 NVA 需要保持连接的状态时,一项要求就是流量对称。 这是下一代防火墙的示例。
- 对于从 Azure 虚拟机到公共 Internet 的连接,NVA 将使用源网络地址转换 (SNAT),以便出口流量来源于 NVA 的公共 IP 地址,从而实现流量对称。
- 对于从 Internet 到虚拟机中运行的工作负载的入站流量,除了目标网络地址转换 (DNAT) 之外,NVA 还需要执行源网络地址转换 (SNAT),以确保来自虚拟机的返回流量到达处理第一个数据包的同一个 NVA 实例。
- 对于 Azure 到 Azure 的连接,由于源虚拟机将独立于目标做出路由决策,因此现在需要 SNAT 来实现流量对称。
也可以在主动/被动设置中部署多个 NVA 实例,例如,如果其中一个实例播发的路由比另一个更差(具有更长的 AS 路径)。 在这种情况下,Azure 路由服务器将仅向 VNet 的虚拟机注入首选路由,并且仅在主 NVA 实例停止通过 BGP 播发时,次优路由才会被使用。
此外,请务必注意路由服务器不支持数据路径流量。 向路由服务器播发路由时,NVA 需要播发下一个跃点为其自身、NVA 前面的负载均衡器或与 NVA 在同一虚拟网络中的 NVA/防火墙的路由。