两种 EVPN 设计把租户网关放在不同位置,防火墙在两种设计里看到的流量也不同。采用集中式网关时,子网间流量会到达防火墙,因为路由就发生在那里。采用分布式 IRB 时,leaf 交换机在本地路由,除非有意插入,防火墙什么也看不到。两种模型本身都没有错。错的是把防火墙接在边界上,就以为 fabric 会把流量送到它面前。

两种模型,两个不同的检查点

先列出需要检查的流量,因为两种模型对它们的处理方式不同。

Flow classCentralized gatewayDistributed IRB
Same subnetBridged, not routedBridged, not routed
Inter-subnetRouted at the firewallRouted at the leaf
Inter-VRFAt the firewallNeeds leaking or service insertion
ExternalBorder firewallBorder firewall

同一子网内的流量,是最容易被忽略的一行。同一 VLAN 上的两台主机会通过桥接通信,除非另有一套 2 层检查设计加以拦截,否则这条路径上并没有路由型防火墙。这一点在两种模型里都一样,所以它是设计缺口,而不是两种模型之间的差异。

其余三行才是两种模型真正分道扬镳的地方。

集中式网关:检查简单,但确有穿行成本

把租户 VLAN 保持为2 层服务,并把它们的路由网关放在防火墙上。于是子网间流量要往返于该网关,即使两台主机接在同一台 leaf 上也可能如此。检查点是明确的,这正是这套设计的全部理由。代价是防火墙上的穿行负载,外加一份你现在必须设计的集中式容量与可用性依赖。

把变更范围限定在你打算改动的租户网关上。当管理、underlay 和平台接口各有分工时,把所有 VLAN 地址都删掉就太宽了。也要检查是否存在第二个活动网关,因为仍在绕过防火墙做路由的那一个,会悄无声息地让设计失效。

这套模型向审计人员解释起来更容易。但它并不会自动变得更省成本。

分布式 IRB:快速路径,默认不做检查

采用分布式 anycast 网关时,每台 leaf 在本地为租户流量做路由,RFC 9135 说明了这样做为什么能避免集中式网关的回程。收益是真实的,也带来一个直接后果:不能从防火墙接在哪里推断出是否做了检查。接在边界 leaf 上的防火墙,只能看到外部流量,以及你明确引流给它的部分。

要用平台真正支持的机制来插入服务:基于策略的重定向、服务节点,或经防火墙的受控 VRF 间路由。要在流量真实的入口点做匹配。写在面向主机的接口上的策略,覆盖不到从 overlay 进来的报文。

要读实际安装的路由,而不是想当然的默认路由。直接导入的更具体的租户前缀,可以绕过指向防火墙的默认路由,而配置上看不出任何异常。

对称性是路由属性,不是检查保证

对称 IRB 描述的是入口与出口 provider edge 节点如何处理一条流的路由与桥接。它并没有说明两个方向是否到达同一台有状态设备。ECMP、anycast 以及防火墙高可用都会影响哪个节点看到回程流量,而集群支持的状态模型决定这是否可接受。

对你关心的每条流,都要显式跟踪回程路径。NAT 并不是这项工作的通用替代品,依赖它的设计往往在故障切换时、而不是在建设阶段发现缺口。

在签字确认设计之前,把一条必需流量和一条被有意排除的流量,各自双向走一遍。

如何选择,以及两种情况下各要测什么

如果检查覆盖比穿行容量更重要,而且你承受得起集中式依赖,就选集中式网关。如果本地路由才是重点,就选分布式 IRB,并为显式插入服务留出预算,而不是假定它已经存在。

然后测试你实际安装的路由,因为两种设计差异最大的地方正在这里:

show ip route vrf TENANT 10.20.0.0/16
show bgp l2vpn evpn route-type prefix

把服务节点故障与恢复也纳入测试。悄悄绕过检查的备用路由,与有计划的 fail-open 策略是两种不同的决定,通常只会选择其中一种。完成后的设计要写明每类流量在哪里路由、在哪里被检查,以及当这条检查路径不可用时会发生什么。

相关文章