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 进行三层中转。
相关推荐
2501_915106329 分钟前
抓包抓到乱码或压缩字节怎么解析,TraceEagle五种查看模式和一键解码
网络协议·计算机网络·网络安全·ios·adb·https·udp
情 九16 分钟前
MCP 实战 06:把 HTTP 接口接成工具,让 AI 帮你查数据
人工智能·网络协议·http·mcp
Da Da 泓2 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
万联WANFLOW9 小时前
异地组网速度忽快忽慢到底怎么回事?直连与中继的判断方法和处理步骤
运维·网络·网络协议·p2p
步行cgn12 小时前
HTTP 请求报文结构详解:请求行、请求头、请求体各自的作用
网络·网络协议·http
OpenLoong 开源社区14 小时前
打破 NAT 限制,零侵入跨网络通信:基于 WebRTC 的透明 TCP 隧道跨网络通信方案
网络协议·tcp/ip·开源·webrtc·openloong开源社区
从琳开始98914 小时前
从Socket到UDP回显服务器:Java网络编程完整指南
java·网络·网络协议·udp·java-ee
明天也要努力学习1 天前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
Tel199253080041 天前
温度湿度信号转WiFi/MQTT/Modbus TCP采集模块 无线传输
网络·网络协议·tcp/ip·工业自动化·工控设备
lazy H1 天前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408