1. 网络拓扑与需求背景

本实验模拟典型的 Hub-and-Spoke 组网架构。
-
物理连接:HUB、Spoke2、Spoke3 均接入二层交换机 S1。
-
通信需求:
- OSPF 运行在 NBMA(Non-Broadcast Multi-Access)模式,并采用手工指定邻居。
- 利用交换机 Hybrid 接口特性实现二层隔离(Spoke 之间无法直接进行二层交换,必须通过 HUB 中转)。
- 最终实现全网路由互通及数据转发。
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 不是自己,直接丢弃报文。
转发流程重溯
- 路由匹配:Spoke2 匹配到 3.3.3.3/32 路由,下一跳为 10.0.0.3。
- ARP 缺失:Spoke2 无法通过广播获取 10.0.0.3 的 MAC。
- 封装失败:由于没有目的 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 环境中,必须注意以下两点:
- 控制 DR 选举:必须保证 HUB 始终为 DR,否则会导致区域内拓扑信息不一致。
- 解决二层连通性 :若物理层或交换层存在隔离(如 Hybrid 隔离或 FR/ATM 虚电路),需手动配置 静态 ARP ,将流量引向 HUB 进行三层中转。