文章总结: 本文详细介绍了在EVE-NG环境中解决Ubuntu镜像MAC地址冲突的根本方法。问题根源在于Ubuntu系统会根据相同的Machine-ID生成相同的MAC地址。解决方案是在打包镜像前,通过重置/etc/machine-id和/var/lib/dbus/machine-id来彻底清理Machine-ID,使每个克隆节点启动时都能生成唯一的ID。此外,文章还分享了定制轻量化Ubuntu镜像的完整步骤,包括虚拟机创建、网络配置优化、磁盘压缩等实战经验。 综合评分: 85 文章分类: 实战经验,网络安全,技术标准,解决方案,安全运营
万物皆可EVE-NG!一招解决Ubuntu镜像MAC冲突
原创
衡水铁头哥 衡水铁头哥
铁军哥
2026年3月21日 07:37 北京
千淘万漉虽辛苦,吹尽狂沙始到金。
在上次实验中(丢包之谜:为什么你的ESI实验总是不通?EVE-NG虚拟化环境避坑指南),我们虽然通过手工修改MAC地址的方式,临时规避了Ubuntu系统镜像MAC地址相同的问题。但说实话,这就像给破船贴创可贴——能挡一时,挡不了一世。
但咱们得打破砂锅问到底——问题根源在哪?
经过一番抽丝剥茧,终于找到了罪魁祸首:在Ubuntu使用Netplan配置IP地址时,默认使用networkd作为渲染器,对于Bond或Bridge这种虚拟接口,systemd-networkd会根据系统的Machine-ID经过哈希运算生成一个私有MAC地址。也就是说,如果Machine-ID相同,经过哈希运算生成的MAC地址基本上也会相同。有时候,即使我们在配置文件中显式指定了MAC地址,也会被自动生成的MAC地址覆盖,不要怀疑,我已经替大家踩过这个坑了。
知道了问题原因,那解决方案就简单了,在打包镜像前,彻底清理Machine-ID,让系统下次启动时重新随机生成即可。
当然,实际配置时会遇到的问题不止这一个,接下来我们就一点点展开,一步步的从零开始制作一个Ubuntu系统镜像。
首先,配置流程整体上跟我们之前制作EVE-NG镜像的步骤大差不差(没想到啊,竟然万物皆可EVE-NG!),本次制作的镜像主要侧重轻量化和网络问题优化。
老办法,我们先通过VirtualBox创建一台虚拟机(如何在VirtualBox上装一台CentOS虚拟机),因为我已经做好了Ubuntu 24.04的镜像,本次就用Ubuntu 22.04进行演示。
创建虚拟硬盘的两个注意事项:一是虚拟硬盘文件类型选择【QCOW(QEMU写入时复制)】,二是存储方式选择【动态分配】。
虚拟机创建完成之后,开机进入系统安装流程。
在选择安装类型时,如果想追求极致的存储占用,建议选择最小化安装【Ubuntu Server(minimized)】,相比标准安装能节省大约一半的存储空间。
然后就是分区,将所有磁盘空间全部划分给/路径。
剩下的,正常配置即可,等到系统安装完成(Ubuntu 22.04 LTS服务器版本安装演示)。
哎哟喂,翻车了!这22.04装完怎么比24.04还胖?人家24.04才3950 MB,这货直接超标21 %!不过咱先别慌,好戏还在后头,看看最后压缩完能瘦身多少。
进入系统,先配置好root账户和SSH服务器(Ubuntu开启SSH远程登录)。这个时候我们会发现,很多基础命令都是没有的,需要先安装一下。
apt updateapt install -y nano iputils-ping iproute2 net-tools traceroute
此外,在KVM环境下,Ubuntu系统默认开启了预测式网络命名。因为EVE-NG中的网口通常挂在虚拟PCI总线的特定插槽上,所以第一个网口通常被命名为ens3,我们可以通过修改GRUB引导参数,禁用这种命名机制,让它从eth0开始排列。
同时,为了让新的Ubuntu系统能够支持telnet连接终端,我们启用ttyS0,让系统在启动时将输出同时发送到VGA和串口。
nano /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0 console=tty0 console=ttyS0,115200n8"GRUB_TERMINAL="console serial"GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
修改之后,更新引导配置,并开启串口登录守护进程。
update-grubsystemctl enable [email protected] start [email protected]
接下来,我们解决MAC地址冲突问题,重置Machine-ID和DUID。这样,镜像克隆到EVE-NG后,每个节点在启动时都会重新随机生成一个唯一的ID。
truncate -s 0 /etc/machine-idrm /var/lib/dbus/machine-idln -s /etc/machine-id /var/lib/dbus/machine-id
如果担心软件源有冲突,可以捎带清理一下安装包缓存。
apt autoremove --purge -yapt cleanrm -rf /var/lib/apt/lists/*
接下来,我们执行qcow2磁盘压缩的核心步骤:全盘置零。这一步会把磁盘没用的地方全填成0,方便压缩算法认得出来。
dd if=/dev/zero of=/zero bs=1M || truesyncrm /zero
这次操作,我们已经敲了几十次命令,如果不想后面每台虚拟机都看到这些命令,可以清空历史记录。
history -c && history -w
接下来,我们直接将虚拟机关机就行了。
那现在的磁盘文件有多大呢?4783 MB,相比刚安装完系统时也只增加了4 MB。
接下来,我们将这个qcow磁盘文件上传到EVE-NG后台,用qemu-img命令的-c参数(Compress/压缩)压缩磁盘到最小(qemu-img命令手册)。
qemu-img convert -c -O qcow2 ub2204.qcow virtioa.qcow2
最终大小还能接受,相比Ubuntu 24.04的1333MB,又小了18 %,真魔幻啊。
最后,我们创建两台Linux虚拟机验证一下。
两台虚拟机使用相同的配置,看看MAC地址是否一样。
可以看到,第一台主机bond0接口的MAC地址为da:0a:90:25:19:39。
没有问题,第二台主机bond0接口的MAC地址为32:cc:3a:ed:d7:ac,完全不一样,问题完美解决。
本次定制的镜像我已经打包好了,在公众号【金失三石】后台回复【ub22eve】即可自取。
至此,一个轻量化、无冲突的Ubuntu定制镜像就大功告成了!回顾整个过程,从发现问题到抽丝剥茧,再到对症下药,是不是有种拨云见日的爽快感?你在制作系统镜像时还遇到过哪些奇葩问题呢?
***推荐阅读***
我们的WireGuard管理系统支持手机电脑了!全平台终端配置,支持扫码连接,一键搞定
保姆级教程:一条命令部署OpenVPN管理系统V4版,支持Win/Mac/安卓/iOS全平台接入
成本省下99.7%!用40元的腾讯云服务器自建IPsecVPN,成功对接企业级飞塔防火墙
原生支持真的好用吗?Ubuntu 24.04桌面共享vs远程登录全解析
告别OSPF!EVE-NG专业版+BGP Unnumbered打通Underlay的完整实战
从180秒到0.01秒:智算中心Underlay路由优化的速度与激情
告别VLAN限制!EVPN + VXLAN实现跨Leaf二层互通,打造千万级隔离网络
跨VLAN通信过五关斩六将都不够,我的数据包创造了8跳的新纪录
从8跳到3跳:EVPN 分布式网关让时延降低67%的完整实战
从M-LAG到ESI:打造不用心跳线的神交式双活智算中心架构
手机也能跑DeepSeek-R1/Qwen3了:零成本搭建AI推理平台
2048卡昇腾910C集群算力集群交付工程手册
2048卡H100算力中心100G无阻塞存储网建设方案
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:铁军哥 衡水铁头哥 衡水铁头哥《万物皆可EVE-NG!一招解决Ubuntu镜像MAC冲突》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论