Ubuntu 16.04部署OpenDaylight与Mininet后交换机未显示问题
排查OpenDaylight与Mininet连接后GUI不显示交换机的问题
我来帮你一步步拆解这个问题——毕竟在物理机上搭SDN环境,ODL和Mininet的连接经常会遇到各种细节坑。下面是我整理的排查步骤,从基础到进阶:
1. 先确认ODL的OpenFlow插件状态
首先得确保你装的OpenFlow插件真的在运行:
- 打开ODL的Karaf控制台,执行命令:
进入后输入:./bin/client
检查feature:list | grep openflowodl-openflowplugin-all这一项的状态是不是Started。如果是Installed但未启动,手动执行:feature:install odl-openflowplugin-all - 再检查ODL是否在默认的OpenFlow端口(6633)监听:
输出里要能看到sudo netstat -tulpn | grep 6633java进程绑定了这个端口,而且监听的是0.0.0.0或者你的物理机IP,别只局限于127.0.0.1——物理机环境下通常需要绑定所有网卡。
2. 验证Mininet的连接参数是否正确
你用的127.0.0.1在物理机上可能有局限,试试这些调整:
- 换成物理机的实际IP(比如
192.168.1.100)启动Mininet:
因为如果ODL绑定的是物理网卡而非lo接口,用sudo mn --controller=remote,ip=你的物理机实际IP,port=6633127.0.0.1可能连不上控制器。 - 启动Mininet后,在控制台输入:
看输出里有没有dpctl showcontroller connection相关的信息,如果显示connection refused,说明网络连通性有问题;如果显示connected,那说明交换机已经连上控制器,问题可能出在GUI层面。
3. 用RESTCONF验证控制器是否收到交换机信息
有时候GUI会有缓存,但RESTCONF能直接反映控制器的真实状态:
- 执行curl命令(默认用户名密码都是admin):
如果返回的JSON里包含curl -u admin:admin http://localhost:8181/restconf/config/opendaylight-inventory:nodesnode节点信息,说明控制器已经识别到交换机,只是GUI没更新——这时候清空浏览器缓存,或者在Karaf里重启dlux特性:
如果返回的是空的,那说明交换机根本没连上控制器,回到前面的网络排查步骤。feature:restart odl-dlux-all
4. 物理机环境的特殊检查
Ubuntu 16.04的物理机可能有防火墙或者网络命名空间的限制:
- 检查ufw防火墙是否开启,若开启则放行6633端口:
sudo ufw allow 6633/tcp - 验证Mininet的网络命名空间能否访问控制器:进入交换机的命名空间测试连通性:
如果ping不通,说明网络命名空间和主机之间的路由有问题,可能需要调整Mininet的网络配置。sudo ip netns exec s0 ping 你的物理机IP
5. 日志排查定位深层问题
如果前面的步骤都没解决,看日志找线索:
- 查看ODL的Karaf日志:
找有没有cat ./data/log/karaf.log | grep -i "openflow\|connection"handshake failed、connection reset这类报错,这些能直接告诉你连接失败的原因(比如版本不兼容、认证问题)。 - 启动Mininet时加
--verbose参数看详细日志:
观察交换机发送的OpenFlow消息是否被控制器接收,有没有报错信息。sudo mn --controller=remote,ip=你的物理机IP --verbose
内容的提问来源于stack exchange,提问作者Chen Xu




