第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 控制

十、思考

  1. Hub & Spoke 拓扑中,如何通过 RT 实现"Spoke 之间不能直连"?
  2. Spoke PE 上看到其他 Spoke 的路由时,下一跳指向哪里?为什么?
  3. Hub & Spoke 拓扑中可能出现的路由环路是什么?如何防止?
  4. 双 Hub 部署时,如何控制 Spoke 优先使用某个 Hub?
  5. Hub & Spoke 拓扑的扩展性短板是什么?如何缓解?

下篇预告:第168篇《跨域 L3VPN Option A/B/C 方案对比》——当 VPN 跨不同运营商自治域时,如何实现端到端连通?三种跨域方案的原理和选型对比。