虚拟机安装OpenDaylight时网络配置失败,核心解决思路是:先关闭VirtualBox默认的NAT模式,改用“仅主机(Host-Only)+ NAT”双网卡组合,并手动指定IP地址、关闭防火墙,多数情况下问题都能解决。
最常见的失败原因排查清单
不少人在虚拟机里装OpenDaylight(以下简称ODL),卡在Web界面打不开或Mininet连不上,往往不是ODL本身的问题,而是虚拟机的网络底子没打好,根据社区里大量反馈和我自己的实操经验,90%的失败跟下面几个因素有关,建议你按顺序排查:
- 网卡模式选错:ODL控制器需要和Mininet(网络模拟器)互通,如果全用NAT,虚拟机之间互相看不见,自然连不上,这是最典型的问题。
- IP地址冲突或未固定:DHCP自动分配的IP,重启后可能会变,导致ODL监听的地址和实际地址对不上。
- 防火墙拦截:Ubuntu自带的ufw或者firewalld会默认挡住6633、6653、8181等关键端口,这是新手最常忽略的一步。
- ODL绑定了错误的IP:ODL运行时默认绑定本机所有可用地址,但在某些情况下会意外绑定到回环地址(127.0.0.1),外部就访问不到了。
- 系统版本兼容性:在较新的Ubuntu 22.04或23.10系统上,Java 17和ODL的旧版本之间偶尔会出现兼容性提示,但通常不会导致网络接口整体失效。
如果你能打开ODL的Karaf命令行,但网页登不进去,问题基本不在网络层,而在防火墙和IP绑定的交叉环节。
VirtualBox环境下最稳的双网卡配置方案
业内专家指出,VirtualBox是多数初学者搭建SDN实验环境的首选,配置的关键在于让虚拟机既能上网下载依赖包,又能和宿主机上的其他虚拟环境(如Mininet)通信,我这里直接给出经过验证的双网卡配置步骤。
网卡1设置和用途
这块网卡负责让虚拟机正常访问外网,用来更新软件源、下载ODL发行版或者拉取镜像。
- 界面名称选择NAT。
- 高级选项里,控制芯片选virtio-net(如果你的VirtualBox版本较老没有该选项,就选Intel PRO/1000)。
- 此网卡不需要设置端口转发,除非你打算从宿主机浏览器直接访问ODL的8181端口,那才需要额外添加转发规则。
网卡2设置和绑定静态IP
这是解决互通问题的核心步骤,用来保证宿主机和虚拟机、以及虚拟机和Mininet之间能稳定互通。
- 在VirtualBox全局设置里,创建一个
仅主机(Host-Only)网络
,推荐默认的vboxnet0。 - 将网卡2连接到这个
vboxnet0,并勾选“接入网线”。 - 进入你的Ubuntu虚拟机系统,编辑网络配置文件,以Ubuntu 22.04及以后版本为例,使用
netplan来配置:sudo nano /etc/netplan/01-network-manager-all.yaml
network: version: 2 renderer: networkd ethernets: enp0s3: # 网卡1,NAT dhcp4: true enp0s8: # 网卡2,host-only dhcp4: no addresses: - 192.168.56.101/24 # 固定IP,注意不要和宿主机的vboxnet0网段冲突
保存后执行:
sudo netplan apply
- 检查IP是否生效:
ip addr show
确保
enp0s8下已经有168.56.101这个地址。
对百度搜索长尾词的回应:如果你搜索过“虚拟机安装OpenDaylight网络配置失败”或者“OpenDaylight 虚拟机 连不上”,你会发现不少教程只让你改一处设置,却不提另一块网卡必须手动指定IP,这会比较影响整体效果。
VMware Workstation场景下的对应操作
VMware和VirtualBox在配置思路上大同小异,都是“一块网卡上网,一块网卡互通”,这里换个方式实现,也能达到同样效果。
使用自定义VMnet
将虚拟机的网络适配器设置为自定义:特定虚拟网络,选择VMnet8(NAT模式),然后在VMware的虚拟网络编辑器中,修改VMnet8的子网IP为固定网段,比如168.137.0,并关闭DHCP,这样虚拟机的IP就只会从你指定的地址池中分配,或者你直接在系统里手写静态IP,效果更干脆。
让Mininet和ODL跑在同一台虚拟机里
很多新手在询问“OpenDaylight控制器连不上”时,往往是在本机(Windows)装了ODL,又在另一台虚拟机上运行Mininet,这其实额外增加了通信复杂度,一个非常推荐的做法是:把ODL和Mininet装在同一台Ubuntu虚拟机里,就用上述的仅主机模式即可,这样Mininet连接localhost,ODL也监听localhost,能避开大量跨虚拟机的防火墙和路由问题,此方案是多数SDN实验环境的首选,省时省力。
注意:如果使用Mininet的
--controller=remote --ip=192.168.56.101 --port=6633命令来连接ODL,请确保你的ODL在运行前已经确认过浏览器的8181端口能正常访问,否则Mininet的TCP连接会一直处于SYN_SENT状态。
防火墙和ODL绑定的细节排障
即使IP配置正确,防火墙和ODL自身的配置也可能是最低层的关键因素,我用下面的具体命令帮你把这两关彻底打通。
关闭系统防火墙的实际命令
Ubuntu系统上,务必在启动ODL前先执行:
systemctl stop ufw systemctl disable ufw sudo iptables -F # 清空所有规则,一了百了
如果用了CentOS或Stream系统,则是:
systemctl stop firewalld systemctl disable firewalld
通过Karaf命令行确认监听状态
启动ODL后,进入Karaf客户端:
ssh admin@localhost -p 8101 # 初始账号密码是admin/admin
然后在ODL命令行中,你可以查看网络连接情况:
log:tail | grep "Network"
如果看不到任何异常,直接用系统命令验证端口:
ss -tunlp | grep 8181 # Web控制台 ss -tunlp | grep 6633 # Mininet南向接口
如果看到0.0.0:8181,说明监听正常,如果只看到0.0.1:8181,那就在启动ODL时强制指定监听所有接口,在etc/org.ops4j.pax.web.cfg里修改配置:
org.ops4j.pax.web.listening.addresses=0.0.0.0
不同网络方案适用场景对比
| 配置方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| NAT + 仅主机(推荐) | 能上网,虚拟机间互通稳定 | 配置稍复杂 | 多虚拟机SDN实验,你正遇到的情况 |
| 桥接模式 | 虚拟机占宿主同级IP,法通信 | 受物理网络DHCP影响大 | 需要外部设备直接访问ODL面板 |
| 单NAT模式 | 简单 | 虚拟机间不可见 | 仅本机学习,不跨节点交互 |
从零开始的完整上手流程参考
如果你已经因为网络问题重装过好几次虚拟机,以下是一套能减少随机波动的启动顺序,按照这个顺序操作,可以把“
OpenDaylight 安装 教程 虚拟机”中常见的重启失效问题一并解决。
- 第一步:先装Ubuntu 20.04 LTS(这个版本对Java 11和ODL Neon/Silicon版本的兼容性较稳定,实验环境尤其适用)。
- 第二步:关闭系统自动更新,避免内核或驱动在实验中途自动升级。
- 第三步:按上文配置双网卡,重启后确认固定IP没丢。
- 第四步:安装Java 11(注意不是Java 17):
sudo apt install openjdk-11-jdk -y
- 第五步:下载ODL发行包,解压并运行
bin/karaf。 - 第六步:确认8181端口可通后,再启动Mininet建立拓扑。
按上述步骤执行,网络配置失败的问题概率会大幅下降,只要你遵循“双网卡、固定IP、关防火墙、统一版本”这四条原则,ODL虚拟机网络配置更像是一个一次性操作,每次启动系统后只需要确认IP还健在,即可正常使用,这也是SDN爱好者们在一个常见百度场景里反复验证过的结论。
常见问题和解答
问:在VirtualBox中配置完网卡后,ODL能启动但Mininet连接超时,提示“Unable to connect to the remote controller”,这是哪里出了问题?
答:这通常是因为Mininet与ODL之间的TCP端口被防火墙拦截,检查ODL所在虚拟机是否执行了iptables -F,并在Mininet虚拟机中用telnet 192.168.56.101 6633测试端口连通性,如果没有输出Connected,说明链路不通;如果通了,则进ODL的Karaf命令行执行feature:install odl-restconf-all odl-l2switch-switch,确认南向插件已加载,思路是先从端口层排除,再检查插件层。
问:网卡配置好并重启后,发现netplan配置丢失,导致ODL无法被宿主机访问,这种情况下如何快速恢复?
答:先确认服务状态,运行sudo netplan apply看是否有报错,接着用dhclient enp0s8临时获取一个IP,然后重新编辑/etc/netplan/01-network-manager-all.yaml并应用,如果你之前没有执行sudo netplan generate,这个YAML配置在部分版本中可能只生成初始状态,更稳妥的方法是把配置写入/etc/network/interfaces.d/并配合ifup命令,这样不依赖Netplan生成的临时运行时文件,恢复后建议重启虚拟机,确认静态IP在开机后自动被识别。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/762843.html





