第259篇:Anycast Gateway 与主机路由
关键词
Anycast Gateway、分布式网关、主机路由、/32精确路由、无中断切换、网关冗余、MAC地址共享
一、分布式网关的冗余挑战
1.1 传统网关的问题
在传统 VLAN 网络中,每个 VLAN 的网关有一个固定的 IP 和 MAC 地址:
传统 VLAN 网关模式:
VLAN 100 网关:10.10.1.1/24, MAC: 00-01-02-03-04-05
问题:网关在汇聚层设备上
汇聚层主备切换时:
虚拟 MAC 切换(VRRP/HSRP)
主机 ARP 表超时
切换时间 3-10 秒
业务中断
1.2 分布式网关的冗余需求
分布式网关要求每台 Leaf 都是 VXLAN 网关,但主机只能配置一个网关地址:
矛盾点:
主机 VM A 的网关配置:
IP: 192.168.1.1
MAC: ??
如果 Leaf1 和 Leaf3 的网关 MAC 不同:
VM A 在 Leaf1 下 → 学到 Leaf1 的网关 MAC → 正常
VM A 迁移到 Leaf3 → 网关 MAC 变了 → ARP 刷新 → 有中断
如果 Leaf1 和 Leaf3 的网关 MAC 相同:
VM A 在 Leaf1 下 → 学到网关 MAC
VM A 迁移到 Leaf3
ARP 表中网关 MAC 没变 → 直接通信 → 零中断!
Anycast Gateway = 所有 Leaf 共享相同的网关 IP + MAC
二、Anycast Gateway 原理
2.1 基本概念
Anycast Gateway 是分布式网关的关键设计——所有 Leaf 设备上配置相同的网关 IP 和 MAC 地址:
Anycast Gateway 示意:
┌──────────┐
│ Spine │
└────┬─────┘
│
| ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ | ||||
| Leaf1 GW: IP:1.1 MAC:MACg | Leaf2 GW: IP:1.1 MAC:MACg | Leaf3 GW: IP:1.1 MAC:MACg | ||
| │ │ │ | ||||
| VM A GW:1.1 ARP:MACg | VM B GW:1.1 ARP:MACg | VM C GW:1.1 ARP:MACg | ||
| --- | --- | --- | --- | --- |
关键点: 每台 Leaf 上的 Vbdif 接口: IP: 192.168.1.1(相同) MAC: 0000-5e00-0101(相同,手动指定)
主机侧: 所有 VM 的网关:192.168.1.1 → MAC 0000-5e00-0101 无论哪个 Leaf 接入,网关的 MAC 不变
2.2 华为配置
# Leaf1 Anycast Gateway 配置
interface Vbdif10001
description Gateway for VNI 10001
ip binding vpn-instance Tenant-A
ip address 192.168.1.1 255.255.255.0
mac-address 0000-5e00-0101 # 手动指定 MAC(所有 Leaf 相同)
#
# Leaf2 Anycast Gateway 配置(完全相同的 IP 和 MAC)
interface Vbdif10001
description Gateway for VNI 10001
ip binding vpn-instance Tenant-A
ip address 192.168.1.1 255.255.255.0
mac-address 0000-5e00-0101 # 与 Leaf1 相同 MAC
#
2.3 转发行为
Anycast Gateway 下的转发:
场景 1:VM A(Leaf1)访问外部网络(默认路由)
VM A 的默认路由:0.0.0.0/0 → 网关 192.168.1.1
1. VM A 发送帧:dst MAC = 0000-5e00-0101(网关 MAC)
2. Leaf1 收到:
dst MAC = 本 Leaf 的 Anycast MAC → 接收
路由查找 → 下一跳是出口路由器
VXLAN 封装 → 发送到出口 Leaf
3. 回程流量:
出口 Leaf → Spine Underlay → Leaf1
因为 Leaf1 发布的主机路由 /32 告诉全网 VM A 在 Leaf1 下
场景 2:VM A(Leaf1)→ VM B(Leaf3)跨子网
VM A(192.168.1.10) → VM B(192.168.2.10)
1. VM A:目标不是本地子网 → ARP 查询网关 MAC →
已有:192.168.1.1 → MAC 0000-5e00-0101
2. 发送帧:dst MAC = 0000-5e00-0101
3. Leaf1 收到:匹配本地 Anycast MAC → 三层路由
目标 192.168.2.10 → 主机路由 /32 → VTEP = Leaf3
VXLAN 封装(VNI 20001)→ 发送到 Leaf3
4. Leaf3 收到:解封装 → 转发给 VM B
三、主机路由(/32 精确路由)
3.1 为什么需要主机路由
分布式网关需要知道每台主机在哪台 Leaf 下,这样才能精确转发:
没有主机路由的问题:
VM A(192.168.1.10)在 Leaf1 下
VM B(192.168.2.10)在 Leaf3 下
出口 Leaf 想回传流量给 VM A:
查路由表:
192.168.1.0/24 → 网关 192.168.1.1(Anycast)
但 192.168.1.1 在每台 Leaf 上!
出口 Leaf 不知道 VM A 具体在哪台 Leaf
结果:流量可能发到错误的 Leaf
主机路由(/32)的解决方案:
EVPN Type 2 路由发布时,同时发布 /32 主机路由:
192.168.1.10/32 → VTEP 10.1.1.1(Leaf1)
192.168.2.10/32 → VTEP 10.1.1.3(Leaf3)
192.168.1.20/32 → VTEP 10.1.1.2(Leaf2)
路由表成为:
192.168.1.0/24 → Anycast 192.168.1.1(汇总路由)
192.168.1.10/32 → VTEP 10.1.1.1(精确路由)
192.168.1.20/32 → VTEP 10.1.1.2
192.168.2.10/32 → VTEP 10.1.1.3
最长匹配原则:/32 比 /24 更精确 → 优先使用
3.2 主机路由的发布
主机路由由 EVPN Type 2 路由自动发布:
Type 2 MAC/IP 路由:
MAC: AA:AA:AA:AA:AA:01
IP: 192.168.1.10
VNI: 10001
Next-Hop: 10.1.1.1(VTEP IP)
Leaf1 发布 Type 2 后,自动生成主机路由:
IP: 192.168.1.10/32
出接口: NVE1(VXLAN 隧道接口)
下一跳: 10.1.1.1(Leaf1 的 VTEP IP)
华为配置:
# 自动发布 /32 主机路由
bgp 65001
l2vpn-family evpn
advertise arp # 通告 ARP(生成主机路由)
advertise irb # 通告 IRB 接口
# 验证主机路由
display ip routing-table vpn-instance Tenant-A
Route Flags: R - relay, D - download to fib
───────────────────────────────────────────────
Routing Table : Tenant-A
Destinations : 10 Routes : 15
Destination/Mask Proto Pre Cost NextHop Interface
192.168.1.0/24 Direct 0 0 192.168.1.1 Vbdif10001
192.168.1.10/32 EVPN 0 0 10.1.1.1 NVE1
192.168.1.20/32 EVPN 0 0 10.1.1.2 NVE1
192.168.2.0/24 Direct 0 0 192.168.2.1 Vbdif20001
192.168.2.10/32 EVPN 0 0 10.1.1.3 NVE1
3.3 主机路由的精确转发
利用主机路由实现精确转发:
场景:VM A(L1, 192.168.1.10) → Internet
1. VM A 发送 ping 8.8.8.8
dst MAC = 网关 MAC(0000-5e00-0101)
2. Leaf1 收到:
路由查找:8.8.8.0/8 → 默认路由 → 出口 Leaf
VXLAN 封装 → 发送到出口 Leaf(L3 VNI)
3. 回程:8.8.8.8 → 出口 Leaf →
查路由:
192.168.1.10/32 → VTEP 10.1.1.1(Leaf1)✓ 精确匹配
不是发到 Anycast 192.168.1.1
VXLAN 封装 → 发送到 Leaf1
4. Leaf1 解封装 → 转发给 VM A
精确路由保证回程流量正确到达 Leaf1,
而不是被 Anycast 网关随机路由到其他 Leaf!
四、Anycast Gateway + 主机路由的故障切换
4.1 Leaf 故障切换
VM A 在 Leaf1 下,Leaf1 故障:
故障前:
路由表全网一致:
192.168.1.10/32 → VTEP 10.1.1.1(Leaf1)
Leaf1 故障:
1. BGP 邻居断连(BFD 300ms 检测)
2. Spine(RR)撤销 Leaf1 的所有 EVPN 路由
3. 192.168.1.10/32 从路由表删除
4. 只剩 192.168.1.0/24 → Anycast 192.168.1.1
VM A 迁移到 Leaf2(或 Leaf2 感知到 VM A):
1. Leaf2 学习到 VM A 的 MAC/IP
2. Leaf2 发布 Type 2 路由
3. 全网更新:192.168.1.10/32 → VTEP 10.1.1.2(Leaf2)
4. 恢复通信
切换时间:
BFD 检测:300ms
BGP 撤销:~100ms
主机路由更新:~100ms
总切换时间:< 1s
注意:Anycast MAC 不变,VM A 不需要刷新 ARP!
4.2 无中断升级
场景:Leaf1 需要软件升级
升级流程:
Step 1:通过路由策略撤销 /32 主机路由
# 在 Leaf1 上临时撤销路由
route-policy DENY_SELF permit node 10
if-match ip-prefix LOCAL_HOST
bgp 65001
l2vpn-family evpn
apply route-policy DENY_SELF export
Step 2:全网更新
192.168.1.10/32 撤销
只剩 192.168.1.0/24 Anycast
Step 3:其他 Leaf 接管流量
VM A 的流量由 Leaf2/Leaf3 通过 Anycast 分担
ARP 表不变(因 MAC 相同)
业务不中断
Step 4:升级 Leaf1
Step 5:恢复路由发布
undo route-policy DENY_SELF
重新学习 VM 的 ARP
重新发布 /32 主机路由
Step 6:流量回切(可选)
Leaf1 的 /32 路由发布后
回程流量自动回到 Leaf1
五、Anycast Gateway 的设计要点
5.1 MAC 地址规划
Anycast MAC 地址规划原则:
1. 每 VNI 唯一的 MAC
VNI 10001: MAC 0000-5e00-0101
VNI 20001: MAC 0000-5e00-0201
VNI 30001: MAC 0000-5e00-0301
2. 使用标准 OUI
推荐:0000-5e00-xxxx(IANA 分配的 VRRP 地址段)
避免与真实 NIC MAC 冲突
3. 跨 Leaf 一致
同一个 VNI 的 Anycast MAC 在所有 Leaf 上必须相同
否则 VM ARP 表会混乱
4. 避免冲突
不与物理服务器网卡的 MAC 冲突
不与 VRRP/HSRP 虚拟 MAC 冲突
5.2 ARP 处理
Anycast Gateway 下的 ARP 处理:
VM 查询网关 MAC:
"Who has 192.168.1.1?"
Leaf 回复:
"192.168.1.1 is at 0000-5e00-0101"
每台 Leaf 都回复!
但由于 Underlay 可达性,VM 只收到直连 Leaf 的回复
跨 Leaf 的 ARP:
VM(Leaf1)发 ARP 查询另一台 Leaf 下的 VM:
ARP 代理(Leaf1 本地代答)
如果不存在 → 通过 Type 3 BUM 发送
优化:ARP 代理+主机路由,绝大多数 ARP 本地代答
六、总结
| 知识点 | 核心要点 |
|---|---|
| Anycast Gateway | 所有 Leaf 共享相同网关 IP+MAC |
| 核心价值 | VM 迁移/故障时网关 MAC 不变,ARP 不刷新 |
| 主机路由 | /32 精确路由,EVPN Type 2 自动发布 |
| 最长匹配 | /32 优先于 Anycast 的汇总 /24 |
| 故障切换 | BFD 检测→撤销/32→Anycast 接管→迁移后恢复 |
| 无中断升级 | 先撤销路由,升级完再恢复 |
| MAC 规划 | 每 VNI 一个 MAC,所有 Leaf 一致 |
| 与 VRRP 区别 | 所有 Leaf 同时 Active(非主备) |
七、思考
- Anycast Gateway 和 VRRP 虚拟网关有什么本质区别?为什么 VRRP 不适合 Spine-Leaf 架构?
- 如果所有 Leaf 的 Anycast MAC 相同,Leaf 收到一个目的 MAC = Anycast 的帧时,怎么知道是自己需要路由的帧?
- 主机路由(/32)在分布式网关中扮演什么角色?如果不发布 /32 路由,仅靠 Anycast 网关的 /24 汇总路由会有什么问题?
- 当 Leaf1 故障时,VM A 从 Leaf1 切换到 Leaf2,为什么 ARP 不需要刷新?请描述完整的切换时间线。
- 假设一个数据中心有 4 台 Leaf,每台 Leaf 下挂 50 台 VM,每台 VM 有一个 /32 主机路由。全网路由表有多少条路由?Anycast 汇总路由如何与 /32 精确路由协同工作?
下篇预告:第260篇《BGP EVPN 的 RT/RD 规划》——EVPN 中的 Route Distinguisher 和 Route Target 的设计原则,在大规模多租户场景下的规划策略。