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 进行三层中转。
相关推荐
从零开始学习人工智能3 小时前
同文件同网络,curl 上传飞快,浏览器 HTTP/1.1 却慢到离谱?终于找到元凶!
网络·网络协议·http
程序员小白条3 小时前
别盲目卷算法!2026 程序员\&大学生,最稳的 AI 技术进阶路线全梳理
java·网络·人工智能·网络协议·http·面试
嵌入式×边缘AI:打怪升级日志6 小时前
[特殊字符] 摄像头模块(七):编写 V4L2 设备框架
网络·网络协议
里晓山6 小时前
SOME/IP协议(上)
网络·网络协议·tcp/ip·车载系统
顶点多余7 小时前
Socket编程实现UDP通信
linux·网络协议·udp
minji...7 小时前
Linux 网络基础(二)HTTP协议,域名,URL,URI,认识HTTP的请求和响应
linux·服务器·网络·网络协议·http·tcp
05候补工程师7 小时前
[408考研笔记] 传输层与网络层核心辨析:从逻辑通信到滑动窗口计算
网络·经验分享·笔记·网络协议·tcp/ip·考研·ip
落羽的落羽10 小时前
【网络】TCP与UDP协议使用指南,Socket编程实现Echo服务
linux·服务器·网络·c++·网络协议·tcp/ip·机器学习
S1998_1997111609•X21 小时前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则