OpenFlow交换机未推送MPLS标签问题排查(基于OpenDayLight)
排查ZodiacFX+ODL MPLS转发Ping异常的步骤
我之前在搭建类似的ZodiacFX线性SDN架构时也碰到过MPLS转发失败的问题,结合你的场景,咱们从几个核心维度逐一排查:
1. 先确认ZodiacFX2的流表配置是否完整
你只提到了ZodiacFX1的MPLS推送流表,但ZodiacFX2必须配置对应的MPLS标签弹出流表,这是最容易遗漏的点:
- 登录ODL的操作数据存储,检查ZodiacFX2是否存在激活的流表项:
- 匹配条件:
mpls_label=你在Z1设置的标签值(比如100) - 动作:
pop_mpls+output:Host2所在的端口号
- 匹配条件:
- 要确保这个流表的优先级足够高,不会被其他默认流表覆盖。
2. 验证MPLS标签的一致性
ZodiacFX1推送的标签值,必须和ZodiacFX2流表中匹配的标签值完全一致——比如Z1推的是100,Z2就不能写成200,这个细节很容易手抖输错。
3. 检查交换机互联端口的MPLS转发能力
ZodiacFX的端口默认可能没有开启MPLS帧转发的权限,需要确认:
- 在ODL中,Z1和Z2互联的两个端口,是否存在允许MPLS报文转发的流表(或者有没有把端口配置为支持MPLS的模式)
- 可以通过
ovs-ofctl dump-flows <交换机端口>(如果用命令行管理ZodiacFX的话)查看,确保MPLS帧能在互联链路中正常传输。
4. 主机侧的路由与网关配置
两台笔记本主机的网络配置必须正确:
- Host1的默认网关要指向ZodiacFX1的连接端口IP,或者手动添加静态路由:
ip route add Host2的IP段 via ZodiacFX1的端口IP - Host2的默认网关要指向ZodiacFX2的连接端口IP,同理添加对应静态路由
- 先单独测试Host1到Z1、Z2到Host2的连通性,排除主机到交换机的链路问题。
5. ODL的MPLS组件是否正确安装
ODL默认不会预装所有MPLS相关组件,需要确认你已经安装了对应的特性包:
- 比如在Karaf控制台执行
feature:list | grep mpls,检查odl-mpls、odl-mpls-forwarding等特性是否处于Started状态 - 如果没有安装,执行
feature:install odl-mpls odl-mpls-forwarding重启控制器后再测试。
6. OpenFlow版本兼容性验证
ZodiacFX支持的OpenFlow版本(比如OF13)必须和ODL控制器配置的版本一致:
- MPLS的
push_mpls和pop_mpls动作在OpenFlow 1.3及以上版本才得到完善支持,低版本OF可能无法识别这些动作 - 可以在ODL中查看交换机的协商版本,或者在ZodiacFX的配置中强制指定OF版本。
7. 抓包定位故障点
如果以上步骤都没问题,用抓包工具(比如Wireshark)在关键节点抓包:
- 在Z1到Z2的互联端口抓包,确认是否有带MPLS标签的帧发出
- 在Z2的互联端口抓包,确认是否收到了MPLS帧
- 在Z2到Host2的端口抓包,确认是否有弹出MPLS标签后的IP帧发出
通过抓包能快速定位是“Z1没推标签”、“链路没传MPLS帧”还是“Z2没弹出转发”的问题。
内容的提问来源于stack exchange,提问作者Juan Andrés Martinez
相关产品推荐
相关产品推荐

