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 进行三层中转。
相关推荐
IT大白鼠1 小时前
RSTP协议原理与配置详解:快速生成树技术的深度解析
网络·网络协议
笨鸟飞不快5 小时前
从一次网络请求出发,彻底搞懂事件循环、I/O 多路复用与响应式编程
网络协议
缪懿9 小时前
网络层和数据链路层中的常见协议解析
网络·网络协议·java-ee
田里的水稻10 小时前
OE_永久配置网络_linux系统终端命令行ip_setting
人工智能·网络协议·机器人·运维开发
辣椒思密达10 小时前
住宅IP与机房IP的区别及技术选型指南
网络·网络协议·tcp/ip
阿文的代码库11 小时前
用于事件驱动系统的WebSocket
网络·websocket·网络协议
不只会拍照的程序猿12 小时前
深入理解AFDX(ARINC 664 Part7):从原理到实现(上篇)
网络协议·航空总线·afdx·arinc 664
AIwenIPgeolocation12 小时前
IP+设备双维监控,让黑产的“秒拨”和“云手机”无所遁形
网络协议·tcp/ip·智能手机
TechWayfarer12 小时前
IP数据接口调用示例:社交软件如何做同城匹配与用户画像分析
python·网络协议·tcp/ip·社交电子