ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

VirtualBox里openEuler无法联网?一文搞定网络模式与nmcli配置

VirtualBox里openEuler无法联网?一文搞定网络模式与nmcli配置 1. 先说结论为什么“VirtualBox里装openEuler后连不上网”这么普遍这两年国产操作系统的讨论热度越来越高openEuler作为其中技术底子很扎实的一个发行版被很多做服务器运维、云计算、信创适配的朋友拿来当主力环境。而VirtualBox又是个人电脑上最方便的虚拟机工具免费、跨平台、轻量几乎人手一份。两个东西凑一块儿听起来是顺理成章的事但真跑起来之后网络上踩的坑那叫一个五花八门。我最早是用VMware做openEuler测试的后来换到VirtualBox结果开机第一件事就卡住了ping www.baidu.com直接超时ip a看一下网卡连个IP都没有。更让人头疼的是同一个VirtualBox版本装Ubuntu一点事没有装上openEuler就是死活不通。这种问题不解决后面什么都干不了装Docker、配SSH、做集群测试全得往后推。这篇文章就是把这几个月我在VirtualBox里折腾openEuler遇到的“无法联网”及相关的一连串问题做一个完整的实战记录。内容包括VirtualBox四种网络模式到底怎么选、openEuler里用nmcli配静态IP的完整流程、为什么有时候“网卡明明起来了但就是不通”、以及虚拟机之间互通、宿主机访问虚拟机、SSH连不上这一类高频故障的具体排查思路。不管你是刚接触Linux虚拟机的小白还是被openEuler网络折腾到头疼的老手按照这篇文章里的步骤去检查大部分问题都能在十几分钟内定位清楚。2. 先搞清楚VirtualBox的四种网络模式不然你连排查方向都没有很多刚上手VirtualBox的朋友遇到虚拟机没网第一反应是“openEuler系统有问题”其实大半是宿主机的网络设置不对。VirtualBox的网络模式说白了就是四道门你走错了门后面再怎么配置系统都没用。2.1 NAT模式默认能上网但别人找不到你安装VirtualBox的虚拟机时默认就是NAT模式。NAT做的事情是把虚拟机的网络流量“翻译”成宿主机IP的流量发出去所以虚拟机里能正常上网但外部网络包括宿主机在内没法主动连接虚拟机。举个例子你在虚拟机里跑了一个nginx宿主机浏览器打开http://localhost:8080是看不到的因为流量没有做端口转发。NAT模式适合“我只想装好系统、更新软件包、装Docker、拉镜像”这种纯出网场景。2.2 桥接模式虚拟机像楼下小卖部可以自己开门做生意桥接模式的逻辑是让虚拟机直接“插”到宿主机所在的局域网里虚拟机和宿主机就像两台独立的电脑各拿各的IP谁都能访问谁。这种模式最适合openEuler这种要当服务器用的系统。你做测试、搭集群、让同事连进来看看效果都选桥接。但前提是你的路由器/局域网分配IP比较宽松而且宿主机不能连着那种需要认证的Wi-Fi比如酒店的Wi-Fi、校园网强制认证的那种否则虚拟机拿到IP也可能上不了网。2.3 仅主机模式Host-Only虚拟机跟宿主机玩网络里看不见仅主机模式是开一条“内部线路”宿主机和虚拟机之间可以互相访问但虚拟机出不了网。在没有路由器、纯本机测试的场景下很好用而且很安全。它的典型用途是宿主机通过Host-Only网络SSH登录虚拟机同时在虚拟机里跑数据库服务宿主机里的开发工具直接连库。2.4 内部网络Internal Network虚拟机之间组私聊群如果创建了多台openEuler虚拟机想让他们彼此互通但不让宿主机参与也不让外网访问就用内部网络模式。多节点集群测试、K8s环境模拟都可以选这个。但注意这种模式下宿主机访问不到虚拟机必须有其他中转通道比如加一块Host-Only网卡。下面是这四种模式的速查对比建议截图保存网络模式虚拟机访外网宿主机访问虚拟机虚拟机之间互访典型用途NAT可以需端口转发通常隔离装系统、更新软件桥接可以可以可以对外提供服务的测试环境Host-Only不可以可以可以本地开发调试、SSH内部网络不可以不可以可以多节点集群实验我实际用过一段时间以后个人最推荐的组合是一张NAT网卡用于出网更新一张Host-Only网卡用于宿主机SSH维护。这样既保证了系统能用yum装东西又不影响外部直接连虚拟机端口安全性高很多。3. openEuler网络配置实操从nmcli到配置文件一步步手动搭好光把VirtualBox网络模式选对还不够openEuler里面的网络配置同样有很多细节。尤其是openEuler本身基于openEuler kernel网络管理工具链和CentOS有一些差异如果不熟悉很容易在“系统看起来正常运行但网卡没接管”这种状态里卡住。3.1 先用ip a和nmcli确认网卡状态装好openEuler之后第一步不是急着改配置文件而是先看状态。打开终端依次执行ip a你会看到类似下面的输出1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN ... 2: enp0s3: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP ... inet6 fe80::a00:27ff:fe8c:1d2b/64 scope link ...注意看有没有inet开头的IPv4地址。如果没有只有inet6说明网卡虽然UP了但没有拿到IP。接着看网络管理服务的情况systemctl status NetworkManager如果结果是active (running)那就继续用nmcli来操作。如果显示inactive (dead)说明NetworkManager服务没启动或者被禁用这种情况下改配置文件往往不生效或者重启后丢失。3.2 用nmcli连接Wi-Fi之外的有线网络在服务器环境或虚拟化环境里nmcli是最标准的网络配置工具。连接一个有线网卡、用DHCP获取IP只需要nmcli device status这个命令会列出所有网络设备以及它们的连接状态。比如设备 类型 状态 连接 enp0s3 ethernet 已连接 enp0s3如果状态是“未连接”先手动激活一下nmcli device connect enp0s3然后再看一下ip a很多时候DHCP的IP就直接拿到了。3.3 配置静态IP的完整流程实测可用DHCP能通只是第一步真实的生产环境里你还是得用静态IP不然虚拟机重启一次IP就变了所有依赖IP的配置全得跟着改。下面是一套完整、经过验证的静态IP配置步骤。第一步查看当前网卡对应的连接名。注意连接名不一定是网卡名可能是一个UUID或者自定义的名字。nmcli connection show假设输出里有一个连接名是enp0s3你要修改它nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 114.114.114.114然后重新加载并激活nmcli connection down enp0s3 nmcli connection up enp0s3这里的IP地址要根据你的实际网段调整。如果宿主机用的是VirtualBox默认的NAT网段网关一般是10.0.2.2IP可以选择10.0.2.15之类不冲突的地址。如果是Host-Only模式网关一般可以留空或不设置。3.4 直接改配置文件的方式不依赖NetworkManager时有些场景下openEuler被配置成不用NetworkManager而是直接用传统的network服务。这种情况老旧教程比较多见但openEuler 22.03之后默认已经倾向使用NetworkManager所以普通用户不建议再走这条老路。不过如果你发现系统里确实没有NetworkManager或者你想手动把关那就直接编辑网卡配置文件。配置文件在/etc/sysconfig/network-scripts/目录下文件名通常是ifcfg-enp0s3。vi /etc/sysconfig/network-scripts/ifcfg-enp0s3一个标准的静态IP配置示例TYPEEthernet BOOTPROTOstatic NAMEenp0s3 DEVICEenp0s3 ONBOOTyes IPADDR192.168.1.100 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS18.8.8.8 DNS2114.114.114.114然后重启网络服务systemctl restart network3.5 DNS解析不通网络通了但打不开网页的隐藏元凶有一种很经典的“假故障”虚拟机ping网关通、ping公网IP也通但ping www.baidu.com就是报Name or service not known。问题出在DNS配置。openEuler的DNS解析配置常见有三处网卡配置文件里的DNS参数、/etc/resolv.conf文件、以及NetworkManager自己管理的DNS配置。如果三者不一致就很容易出现上面这种诡异现象。最简单的修复方式是直接用nmcli设置全局DNSnmcli connection modify enp0s3 ipv4.ignore-auto-dns yes nmcli connection modify enp0s3 ipv4.dns 8.8.8.8 114.114.114.114 nmcli connection up enp0s3然后在sudo下检查/etc/resolv.conf正常情况下应该能看到nameserver已经更新。如果这个文件被某些软件写死而不自动更新删掉后重启NetworkManager是最后的手段。注意/etc/resolv.conf在openEuler里经常被NetworkManager动态管理手动改它有时候重启后会被还原所以尽量用nmcli来改。4. VirtualBox与openEuler联动时最容易踩的坑从SSH到共享文件夹网络通不通其实不只是“虚拟机里能打开网页”这一个维度。很多时候我们装openEuler虚拟机最终目的是测试服务、远程管理、共享文件。这些场景下VirtualBox的附加功能Guest Additions、端口映射、SSH配置都可能成为新的瓶颈。4.1 SSH连接不上虚拟机先检查sshd是不是没开、防火墙是不是没放行openEuler装好之后默认不一定启用sshd服务。如果你用MobaXterm、Xshell、或者Windows Terminal自带的ssh去连虚拟机IP发现通不了按下面步骤排查systemctl status sshd如果显示没运行启动并设置开机自启systemctl start sshd systemctl enable sshd然后查防火墙firewall-cmd --state firewall-cmd --list-all如果开着把22端口加进去firewall-cmd --permanent --add-port22/tcp firewall-cmd --reload还有一个容易被忽略的地方openEuler默认的root账户能直接SSH登录吗很多发行版禁止root远程登录openEuler也有类似策略。如果想用root身份远程连编辑/etc/ssh/sshd_config确认里面有这样一行没有就补上PermitRootLogin yes改完重启sshdsystemctl restart sshd4.2 VirtualBox增强功能装不上网络适配置后无法共享文件夹和自适应分辨率网上很多教程在VirtualBox里装完Ubuntu和Windows之后增强功能Guest Additions一点就装上了。但openEuler是RPM系、且内核较新如果直接用“设备 → 安装增强功能”经常会遇到编译失败或者挂载不上。这是因为增强功能的安装包是一个ISO文件需要先挂载到虚拟机里然后手动执行脚本。在openEuler里通常还要先装好编译环境和内核开发包yum install -y gcc make kernel-devel kernel-headers bzip2然后挂载ISOmount /dev/cdrom /mnt cd /mnt sh ./VBoxLinuxAdditions.run如果一切顺利重启之后就能正常用共享文件夹、自动调整分辨率了。如果执行过程中报Kernel headers not found多半是内核开发包版本和当前内核不一致。用uname -r对比一下yum list installed | grep kernel-devel的版本不匹配就先升级内核包再重启。4.3 固定IP后宿主机仍然无法访问虚拟机端口转发或Host-Only必须二选一虚拟机的网络通了、sshd也开了但宿主机用Xshell连不上这种情况十有八九是网络模式与访问路径不匹配。如果你用的是NAT模式宿主机访问虚拟机必须配置端口转发。在VirtualBox的“网络 → 高级 → 端口转发”里添加一条规则宿主机的某个端口比如2222转发到虚拟机的22端口。然后用ssh root127.0.0.1 -p 2222来连接。如果你想直接用真IP连那就得给虚拟机加一块Host-Only网卡并让虚拟机的static IP落在Host-Only网段里。在VirtualBox的“全局设置 → 网络 → 仅主机网络”里先建好一个网卡比如vboxnet0默认网段通常是192.168.56.0/24。然后给虚拟机添加这块网卡系统里把IP设为192.168.56.x宿主机就能直接访问了。我实际用的组合就是NAT Host-Only双网卡NAT负责yum下载和pip拉包Host-Only负责固定IP的SSH管理。哪怕虚拟机重启SSH连接也稳如老狗。4.4 文件夹权限问题openEuler共享目录时提示Permission deniedVirtualBox的共享文件夹功能用起来很方便但openEuler下经常出现挂载成功但ls提示Permission denied的问题。原因很直接挂载时没有指定正确的权限参数。手动挂载时加参数mount -t vboxsf shared_folder_name /mnt/shared -o rw,uid0,gid0如果希望普通用户也可读写加上自己的uid和gidid把输出的uid和gid填进挂载参数里。如果要开机自动挂载编辑/etc/fstab加一行shared_folder_name /mnt/shared vboxsf rw,uid0,gid0,dmode0777,fmode0666 0 0这样就不用每次重启都手动挂一次。5. 常见问题与排查技巧实录我把踩过的坑全部整理成速查表前面这些坑我全是实际踩过之后才一点点摸清的。下面把这些经验整合成两个速查方向方便你遇到问题时快速定位。5.1 虚拟机无法联网问题排查清单现象可能原因验证命令解决方案ip a无IPVirtualBox网卡未启用DHCPnmcli device statusnmcli device connect 网卡名有IP但ping不通网关网络模式配置错误/宿主机防火墙拦截ip route检查VirtualBox网络模式临时关闭宿主机防火墙测试ping网关通、公网不通NAT网关错误 / 路由缺失ip route确认默认路由存在或重新设置gateway公网IP通、域名不通DNS配置错误cat /etc/resolv.conf用nmcli重新设置DNSNetworkManager未运行服务被禁用或未启动systemctl status NetworkManagersystemctl enable --now NetworkManageropenEuler eth0重命名导致脚本失效udev规则冲突dmesggrep eth5.2 网络重启后配置丢失openEuler里如果你通过ifconfig临时设置IP重启后必然失效这不算bug。真正让人困惑的是用nmcli改完静态IP重启后却变回DHCP。这种情况建议检查一下nmcli connection show 连接名重点关注ipv4.method是否为manual。有时候你在VirtualBox里“取消勾选启用DHCP”只是改了网卡属性并没有真正改到nmcli连接配置里必须两边统一。再有就是确认有没有多个连接同时绑定同一张网卡。nmcli connection show输出里如果出现两个名字都对应同一个网卡名比如enp0s3和System enp0s3就很容易出现配置打架的情况。把多余的那个连接删掉只保留最干净的一个。5.3 增强功能安装失败后的自救办法增强功能装不上最典型的就是内核头文件缺失。我用日志定位一个多小时后总结出最快解决方案yum install -y kernel-devel-$(uname -r)注意版本号一定要跟上当前内核版本不要直接yum install kernel-devel那样装的可能是最新内核的头文件跟当前运行的还是对不上。如果命令提示找不到对应的kernel-devel包就先yum update kernel -y更新完重启系统进入新内核再安装相同版本的kernel-devel。实测这种方式成功率最高。5.4 VirtualBox和VMware来回切换时的“继承坑”不少朋友电脑上同时装了VirtualBox和VMware。同一个openEuler镜像文件在VMware里能正常上网导入VirtualBox后死活不行。这是因为VirtualBox生成的网卡MAC地址与VMware不同而openEuler的网卡绑定规则还在以旧MAC为准。排查方法对比ip a里的MAC地址和/etc/sysconfig/network-scripts/ifcfg-*里HWADDR的值不一致就删掉HWADDR这一行或者改成新值。另外如果VMware里用的SCSI磁盘类型导入VirtualBox后无法启动也不要慌新建一个VirtualBox虚拟机磁盘选SATA接口把原有VMDK挂上去即可。6. 一些比解决联网更值得养成的习惯处理VirtualBox和openEuler的网络问题越到后面越发现大部分坑都是有共性的。总结三个我在实践中确认比较重要、也建议你刻意养成的习惯。第一虚拟机“快照”功能一定要用。每次配好网络、装好增强功能、或者完成某个阶段配置以后打一个快照。后续万一配置改坏了直接快照回退节省的是大把的恢复时间。第二把openEuler的官方文档和man nmcli当作第一手资料。网上很多教程写的都是CentOS的老路子在openEuler上不一定完全适用尤其是NetworkManager相关的配置一旦命令输错排查成本远高于之前的收益。第三记录每次修改。我在本地维护了一个纯文本的“变更日志”每次执行完和网络相关的命令哪怕只是nmcli connection down再up也会记录一条。短时间内看起来多此一举但当你同时维护3台以上openEuler虚拟机时就知道了这个习惯能救命。以后再有人说“VirtualBox里装openEuler根本没法用”你就知道问题不在VirtualBox也不在openEuler而在于网络模式的选择和系统内部的配置是否匹配。把这两部分打通这套组合用起来真的很顺手。
返回列表