第167篇:Hub & Spoke VPN 拓扑设计
关键词
Hub & Spoke、星型拓扑、RT 控制、Spoke 间隔离、集中式访问、防火墙策略
一、Hub & Spoke 拓扑概述
1.1 什么是 Hub & Spoke
Hub & Spoke(中心-分支)是 VPN 中最常见的拓扑之一:
Spoke1
│
│
Spoke2 ──── Hub ──── Spoke3
│
│
Spoke4
特点:
- Spoke 之间不能直接通信,必须经过 Hub
- Hub 控制所有流量,可以部署安全策略
- 类似于一颗"星"的形状
1.2 典型应用场景
| 场景 | Hub | Spoke | 说明 |
|---|---|---|---|
| 总部-分支 | 总部数据中心 | 各分支办公室 | 所有流量经过总部防火墙审计 |
| 金融监管 | 监管中心 | 各金融机构 | 机构之间不能直连 |
| 政务网络 | 政务云中心 | 各委办局 | 委办局之间通信需经中心 |
| 供应链 | 核心企业 | 供应商 | 供应商之间不互信 |
二、Full Mesh 与 Hub & Spoke 对比
Full Mesh(全网状):
Spoke1 ───── Spoke2
│ \ / │
│ Hub ──── │
│ / \ │
Spoke3 ───── Spoke4
特点:所有节点都可以直接通信
优点:延迟最低
缺点:路由表全量,N(N-1)/2 条路径
Hub & Spoke(星型):
Spoke1
│
Spoke2 ──── Hub ──── Spoke3
│
Spoke4
特点:所有通信必须经过 Hub
优点:集中控制,安全策略一致
缺点:Hub 是瓶颈,增加一跳延迟
| 对比维度 | Full Mesh | Hub & Spoke |
|---|---|---|
| 会话数 | N(N-1)/2 | N-1 |
| 延迟 | 最小 | 增加一跳(Hub 中转) |
| 集中控制 | 无 | 有 |
| 扩展性 | 差(N 大时爆炸) | 好(线性扩展) |
| 安全策略 | 分布在各节点 | 集中在 Hub |
三、通过 RT 实现 Hub & Spoke
3.1 核心思路
Hub & Spoke 的 RT 策略是:
Hub:
export RT = 100:2(Hub 发布的路由,发送给所有 Spoke)
import RT = 100:1(接收所有 Spoke 的路由)
Spoke:
export RT = 100:1(Spoke 发布的路由,只发送给 Hub)
import RT = 100:2(只接收 Hub 的路由)
3.2 路由传播分析
Spoke1 (RT out=100:1) ──▶ PE ──▶ Hub (RT in=100:1)
Spoke1 的路由被 Hub 学习
Hub (RT out=100:2) ──▶ PE ──▶ Spoke2 (RT in=100:2)
Hub 将路由传播给 Spoke2(包括 Spoke1 的)
Spoke2 看到 10.1.1.0/24(Spoke1 的网段)
下一跳指向 Hub(非 Spoke1)
→ Spoke2 → Hub → Spoke1
3.3 详细配置
# Hub PE 的 VRF 配置
ip vpn-instance VRF-Enterprise
route-distinguisher 100:1
vpn-target 100:2 export-extcommunity # Hub 路由导出给 Spoke
vpn-target 100:1 import-extcommunity # Hub 导入所有 Spoke 路由
# Spoke1 PE 的 VRF 配置
ip vpn-instance VRF-Enterprise
route-distinguisher 100:1
vpn-target 100:1 export-extcommunity # Spoke 路由只发给 Hub
vpn-target 100:2 import-extcommunity # Spoke 只接收 Hub 的路由
# Spoke2 PE 的 VRF 配置(与 Spoke1 相同)
ip vpn-instance VRF-Enterprise
route-distinguisher 100:1
vpn-target 100:1 export-extcommunity
vpn-target 100:2 import-extcommunity
四、验证路由流向
4.1 Hub PE 上查看
<HUB-PE> display ip routing-table vpn-instance VRF-Enterprise
Routing Table : VRF-Enterprise
Destinations : 5 Routes : 5
Destination/Mask Proto Pre Cost NextHop Interface
10.1.1.0/24 BGP 255 0 1.1.1.1 Tunnel1 ← Spoke1
10.2.2.0/24 BGP 255 0 2.2.2.2 Tunnel2 ← Spoke2
10.3.3.0/24 BGP 255 0 3.3.3.3 Tunnel3 ← Spoke3
10.0.0.0/24 Direct 0 0 192.168.0.1 GE0/0/0 ← Hub 本地
4.2 Spoke PE 上查看
<SPOKE1-PE> display ip routing-table vpn-instance VRF-Enterprise
Routing Table : VRF-Enterprise
Destinations : modal Routes : 5
Destination/Mask Proto Pre Cost NextHop Interface
10.0.0.0/24 BGP 255 0 10.0.0.1 Tunnel100 ← Hub 的路由
10.2.2.0/24 BGP 255 0 10.0.0.1 Tunnel100 ← Spoke2 的路由(指向 Hub)
10.3.3.0/24 BGP 255 0 10.0.0.1 Tunnel100 ← Spoke3 的路由(指向 Hub)
↑ ↑
由 Hub 发布 下一跳全部指向 Hub
4.3 路由表对比
| 路由条目 | Hub 的表 | Spoke1 的表 |
|---|---|---|
| Spoke1(10.1.1.0/24) | 下一跳=PE1(直连) | 本地区域路由 |
| Spoke2(10.2.2.0/24) | 下一跳=PE2(直连) | 下一跳=Hub(中转) |
| Spoke3(10.3.3.0/24) | 下一跳=PE3(直连) | 下一跳=Hub(中转) |
| Hub(10.0.0.0/24) | 直连 | 下一跳=Hub |
Spoke1 看到其他 Spoke 的路由,但下一跳都是 Hub,因此流量必然经过 Hub。
五、Hub 的 NAT 与防火墙集成
5.1 防火墙部署
在实际部署中,Hub 侧通常会串联防火墙来审计流量:
┌──────────┐
Spoke ── PE ───┤ 防火墙 ├─── Hub CE
│ 审计/过滤│
└──────────┘
所有 Spoke→Spoke 和 Spoke→Internet 的流量
都会经过防火墙检查
5.2 Hub 侧 NAT 场景
场景:Spoke 使用 RFC 1918 私有地址,需要访问 Internet
Spoke1 ── PE1 ── Hub-PE ── 防火墙 ── Hub CE ── Internet
│
Hub 上做 NAT
将 Spoke 的私有 IP 转换为公网 IP
5.3 安全隔离增强
# Hub PE 上配置 ACL,限制 Spoke 之间的访问
#
acl number 3000
rule 5 deny ip source 10.1.0.0 0.0.255.255 destination 10.2.0.0 0.0.255.255
rule 10 permit ip
#
traffic-filter inbound acl 3000 # 在 Hub VRF 接口应用
六、Hub & Spoke 中的防环
6.1 可能出现的环路
由于 Hub 同时导入和导出路由,需要防环措施:
Spoke1 发布 10.1.1.0/24(RT=100:1) │ Hub 导入(import RT=100:1) │ Hub 自己的 VRF 中有一条 Spoke1 的路由 │ Hub 导出 all 路由(export RT=100:2) │
┌─ Spoke2 导入:正常(下一跳=Hub) └─ Spoke1 也导入!→ 环路风险 Spoke1 看到 Spoke1 的路由,下一跳=Hub 如果 Spoke1 选了这个路由 → 发到 Hub → 又发回 Spoke1 → 环路
6.2 解决方案
方案 1:使用 SoO(Site of Origin)属性
# Spoke1 PE 配置 SoO
ip vpn-instance VRF-Enterprise
route-distinguisher 100:1
vpn-target 100:1 export-extcommunity
vpn-target 100:2 import-extcommunity
#
bgp 100
ipv4-family vpn-instance VRF-Enterprise
peer 192.168.1.2 as-number 65001
peer 192.168.1.2 soo 100:1 # 设置 SoO
SoO 属性会附加到 Spoke1 发布的每条 VPNv4 路由上。当 Hub 路由反射器将路由反射回 Spoke1 时,Spoke1 发现 SoO = 100:1 匹配自己,拒绝导入该路由。
方案 2:使用 AS Path 防环
如果每个 Spoke 使用不同的 AS,AS Path 会自然防环。
方案 3:精确 RT 控制(推荐)
不采用"全量导出/全量导入"
而是每个 Spoke 只精确导入 Hub 直接发布的路由类型
七、Hub 的高可用设计
7.1 双 Hub 部署
Spoke1
/ \
Spoke2 ── Hub-A ── Hub-B ── Spoke3
\ /
Spoke4
Hub-A 和 Hub-B 互为备份,使用相同的 VRF 配置
7.2 通过 Local Preference 控制优先级
# Spoke PE 配置,优先走 Hub-A
ip vpn-instance VRF-Enterprise
route-distinguisher 100:1
vpn-target 100:1 export-extcommunity
vpn-target 100:2 import-extcommunity
#
route-policy PREFER_HUB_A permit node 10
if-match extcommunity rt 100:2
apply local-preference 200 # Hub-A 的路由优先级更高
#
bgp 100
ipv4-family vpn-instance VRF-Enterprise
peer 192.168.1.2 as-number 65001
import-route direct
route-policy PREFER_HUB_A import
八、Hub & Spoke 的扩展性问题
| 问题 | 说明 | 解决方案 |
|---|---|---|
| Hub 带宽瓶颈 | 所有流量经过 Hub | 负载均衡、链路扩容 |
| Hub 单点故障 | Hub 故障导致全网中断 | 双 Hub 冗余 |
| 延迟增加 | Spoke-Spoke 多一跳 | 关键业务用 Full Mesh 补充 |
| 路由表膨胀 | Hub 存储所有 Spoke 路由 | 路由汇总 |
九、总结
| 知识点 | 核心要点 |
|---|---|
| Hub & Spoke 拓扑 | Spoke 间流量必须经过 Hub |
| RT 策略 | Spoke: export=Hub-import, import=Hub-export |
| 路由流向 | Spoke 看到的其他 Spoke 路由下一跳指向 Hub |
| 防环 | SoO 属性或精确 RT 控制 |
| 安全集成 | Hub 侧可串联防火墙做审计 |
| 高可用 | 双 Hub + Local Preference 控制 |
十、思考
- Hub & Spoke 拓扑中,如何通过 RT 实现"Spoke 之间不能直连"?
- Spoke PE 上看到其他 Spoke 的路由时,下一跳指向哪里?为什么?
- Hub & Spoke 拓扑中可能出现的路由环路是什么?如何防止?
- 双 Hub 部署时,如何控制 Spoke 优先使用某个 Hub?
- Hub & Spoke 拓扑的扩展性短板是什么?如何缓解?
下篇预告:第168篇《跨域 L3VPN Option A/B/C 方案对比》——当 VPN 跨不同运营商自治域时,如何实现端到端连通?三种跨域方案的原理和选型对比。