OSPF NBMA 网络环境下的 Hub-and-Spoke

1. 网络拓扑与需求背景

本实验模拟典型的 Hub-and-Spoke 组网架构。

  • 物理连接:HUB、Spoke2、Spoke3 均接入二层交换机 S1。

  • 通信需求

    1. OSPF 运行在 NBMA(Non-Broadcast Multi-Access)模式,并采用手工指定邻居。
    2. 利用交换机 Hybrid 接口特性实现二层隔离(Spoke 之间无法直接进行二层交换,必须通过 HUB 中转)。
    3. 最终实现全网路由互通及数据转发。

2. 初始基础配置

2.1 HUB 路由器配置

在 NBMA 网络中,HUB 端需通过 peer 命令主动触发邻居建立。

python 复制代码
ospf 1 router-id 1.1.1.1
 peer 10.0.0.2               # 手工指定 Spoke2 邻居
 peer 10.0.0.3               # 手工指定 Spoke3 邻居

interface LoopBack0
 ip address 1.1.1.1 32
 ospf 1 area 0.0.0.0

interface GigabitEthernet0/1
 ip address 10.0.0.1 24
 ospf 1 area 0.0.0.0
 ospf network-type nbma      # 强制指定网络类型为 NBMA

2.2 S1 交换机配置(二层隔离)

利用 Hybrid 端口控制 VLAN 标签的剥离,实现 Spoke2 与 Spoke3 在二层的单向隔离(仅能与 HUB 通信)。

go 复制代码
vlan 10 20 30

# 连接 HUB
interface GigabitEthernet1/0/1
 port link-type hybrid
 port hybrid vlan 10 20 30 untagged
 port hybrid pvid vlan 10

# 连接 Spoke2
interface GigabitEthernet1/0/2
 port link-type hybrid
 port hybrid vlan 10 20 untagged
 port hybrid pvid vlan 20

# 连接 Spoke3
interface GigabitEthernet1/0/3
 port link-type hybrid
 port hybrid vlan 10 30 untagged
 port hybrid pvid vlan 30

2.3 Spoke 路由器基础配置

python 复制代码
# Spoke2
ospf 1 router-id 2.2.2.2
interface GigabitEthernet0/0
 ip address 10.0.0.2 24
 ospf network-type nbma

# Spoke3
ospf 1 router-id 3.3.3.3
 peer 10.0.0.1               # 建议双向手工指定邻居
interface GigabitEthernet0/0
 ip address 10.0.0.3 24
 ospf network-type nbma

3. 问题一:DR 选举异常导致路由计算失败

现象描述

虽然邻居状态显示为 Full,但在 HUB 查看 OSPF 路由表时,发现缺少部分 Spoke 节点的路由。

通过 display ospf peer verbose 发现,Spoke 节点(如 3.3.3.3)成为了 DR。

原因分析:

在 NBMA 这种"伪广播"环境中,Spoke 之间二层不通。如果 Spoke 成为 DR,它生成的 Network-LSA (Type-2) 将无法涵盖所有节点,且其他节点无法通过该 DR 构建完整的拓扑图。由于 OSPF 区域内依赖拓扑计算路由,DR 选举错误会导致 SPF 算法无法得出正确的路由条目。

解决方案

强制 HUB 成为 DR,Spoke 节点放弃选举。

csharp 复制代码
# Spoke2/Spoke3 均执行
interface GigabitEthernet0/0
 ospf dr-priority 0

结果验证

所有设备成功学习到所有路由条目:

python 复制代码
Destination    Cost   Type    NextHop      AdvRouter    Area
3.3.3.3/32     1      Stub    10.0.0.3     3.3.3.3      0.0.0.0
10.0.0.0/24    1      Transit 0.0.0.0      1.1.1.1      0.0.0.0
1.1.1.1/32     0      Stub    0.0.0.0      1.1.1.1      0.0.0.0
2.2.2.2/32     1      Stub    10.0.0.2     2.2.2.2      0.0.0.0

4. 问题二:二层隔离导致三层不可达(ARP 局限)

现象描述

路由表显示正常,但在 Spoke2 上 Ping Spoke3 的业务地址(或物理接口地址)失败。

  • 现象:Request time out。
  • 抓包分析:Spoke2 发起 ARP 请求 10.0.0.3 的 MAC,由于 S1 的隔离,Spoke3 收不到该请求;HUB 虽然能收到,但发现目标 IP 不是自己,直接丢弃报文。

转发流程重溯

  1. 路由匹配:Spoke2 匹配到 3.3.3.3/32 路由,下一跳为 10.0.0.3。
  2. ARP 缺失:Spoke2 无法通过广播获取 10.0.0.3 的 MAC。
  3. 封装失败:由于没有目的 MAC,二层帧无法封装。

解决方案:静态 ARP 映射(重定向至 HUB)

由于 Hub-and-Spoke 物理架构限制,Spoke 间的通信必须经过 HUB。我们需要"欺骗"路由器,让其在访问 Spoke 节点时,将数据包发往 HUB 的 MAC 地址。

csharp 复制代码
# Spoke2 配置:访问 Spoke3 的地址映射到 HUB 的 MAC (2ab4-ad07-0106)
arp static 3.3.3.3 2ab4-ad07-0106
arp static 10.0.0.3 2ab4-ad07-0106

# Spoke3 配置:访问 Spoke2 的地址映射到 HUB 的 MAC
arp static 2.2.2.2 2ab4-ad07-0106
arp static 10.0.0.2 2ab4-ad07-0106

最终验证

配置静态 ARP 后,Spoke2 成功 Ping 通 Spoke3:

css 复制代码
[SPOKE2]ping 3.3.3.3
56 bytes from 3.3.3.3: icmp_seq=0 ttl=254 time=1.310 ms
...
--- Ping statistics for 3.3.3.3 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss

5. 总结

在 OSPF NBMA 的 Hub-and-Spoke 环境中,必须注意以下两点:

  1. 控制 DR 选举:必须保证 HUB 始终为 DR,否则会导致区域内拓扑信息不一致。
  2. 解决二层连通性 :若物理层或交换层存在隔离(如 Hybrid 隔离或 FR/ATM 虚电路),需手动配置 静态 ARP ,将流量引向 HUB 进行三层中转。
相关推荐
卖萌的斜阳39 分钟前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
用户8334423966141 小时前
Qt6 实现 TCP/UDP/组播 透明中继抓包工具 | 流量录制回放 | 工业设备调试
网络协议
CryptoPP3 小时前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议
ITxiaobing20233 小时前
程序化广告RTB场景下IP地理定位服务的精度与工程架构选型
网络协议·tcp/ip·架构
阿米亚波6 小时前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发
tiantianuser7 小时前
NVME-oF IP 设计2 :设计之前的调研!
网络·网络协议·rdma·roce v2·nvme of
2401_873479408 小时前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip
STDD8 小时前
Traefik 中间件深度配置:限流、认证、IP 白名单与错误页面定制
网络协议·tcp/ip·中间件
曾令胜9 小时前
HTTP协议基础总结
网络·网络协议·http
sdghterhd19 小时前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议