镜像存储结构
EVE-NG 对不同类型镜像采用不同的存储路径和文件组织方式,理解存储结构是镜像管理的基础。PRO 7.0.1-21 沿用与 v6 相同的目录结构,所有路径保持兼容。
目录规范
| 镜像类型 | 存储路径 | 文件格式 | 组织方式 |
|---|---|---|---|
| IOL(二进制可执行文件) | /opt/unetlab/addons/iol/bin/ | .bin | 直接存放,一个镜像一个文件 |
| QEMU(虚拟磁盘) | /opt/unetlab/addons/qemu/ | .qcow2 / .img | 按设备名称建立文件夹,每个设备一个目录 |
| 设备模板(节点定义) | /opt/unetlab/html/templates/ | .yml | 按 CPU 架构分 intel/amd 子目录 |
| 设备图标 | /opt/unetlab/html/images/icons/ | .png / .svg | 扁平存放,按文件名引用 |
| 配置脚本 | /opt/unetlab/config_scripts/ | .sh / .py | 按模板中 config_script 字段引用 |
QEMU 镜像目录命名规则
QEMU 镜像的目录名称决定了 EVE-NG 识别镜像的模板前缀。例如:
/opt/unetlab/addons/qemu/├── huawei-ar/│ └── huaweiar.vmdk # 镜像文件├── fortinet-fgt/│ └── fgt.qcow2 # 镜像文件├── windows-server-2019/│ └── disk.qcow2 # 镜像文件目录名 huawei-ar 必须与模板文件 huawei-ar.yml 的名称前缀一致,EVE-NG 才能正确匹配。
CPU 架构适配
模板文件按 CPU 架构分为两个子目录:
/opt/unetlab/html/templates/intel/— Intel 系列 CPU 使用/opt/unetlab/html/templates/amd/— AMD 系列 CPU 使用
EVE-NG 会根据宿主机 CPU 品牌自动选择对应目录下的模板,无需手动指定。
镜像下载
EVE-NG 所有支持镜像均可在 EmulatedLab 论坛的镜像分享区获取。论坛汇聚了社区用户贡献的各类厂商设备镜像,覆盖 Cisco、华为、Juniper、Fortinet、深信服、H3C、锐捷等主流厂商。
镜像分享区保持最新版本更新,建议定期查看:https://www.emulatedlab.com/forum.php?mod=forumdisplay&fid=46
镜像下载需要消耗论坛积分,积分通过发帖、回帖、分享资源等方式获取。具体积分攻略:https://www.emulatedlab.com/thread-1371-1-1.html
v7 起,模板(yml)、图标(png/svg)、配置脚本(sh)可通过 GIT 仓库独立更新,无需升级整个 EVE-NG 系统:
新增设备镜像支持时,官方通常会单独推送模板更新,更新频率约每月一次。
支持的镜像列表
手工导入镜像
手工导入适用于手动管理镜像文件的场景,需要使用 WinSCP 等 SFTP 工具连接到 EVE-NG 进行文件传输。
操作步骤
第一步:传输镜像文件
使用 WinSCP 连接到 EVE-NG 服务器,根据镜像类型上传到对应目录:
-
IOL 镜像上传
将
.bin文件上传至/opt/unetlab/addons/iol/bin/目录。IOL 镜像通常为 Cisco 二层/三层交换机镜像,文件体积较小(几十 MB)。
/opt/unetlab/addons/iol/bin/├── i86bi_LinuxL2-AdvEnterpriseK9-M_152_May_2018.bin└── i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin-
QEMU 镜像上传
QEMU 镜像通常为压缩包格式(如
.zip、.tar.gz),需先在本地解压为文件夹,再将整个文件夹上传至/opt/unetlab/addons/qemu/目录。
/opt/unetlab/addons/qemu/├── huawei-ar/│ └── huaweiar.qcow2├── fortinet-fgt/│ └── disk.qcow2└── windows-server-2019/ └── disk.qcow2-
模板文件上传(如需要)
若下载的镜像包含自定义模板(
.yml文件),需上传至/opt/unetlab/html/templates/intel/或/opt/unetlab/html/templates/amd/,根据宿主机 CPU 选择对应目录。 -
图标文件上传(如需要)
若需自定义设备图标,将
.png或.svg文件上传至/opt/unetlab/html/images/icons/目录。
第二步:修复文件权限
镜像文件上传完成后,必须执行权限修复命令,否则节点可能无法正常启动:
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions该命令会自动设置正确的文件所有者、权限和 ACL 策略。
第三步:验证导入结果
在 EVE-NG Web 界面中创建新实验室,尝试添加节点。若镜像已正确导入,对应设备类型将出现在节点选择列表中。
常见问题处理
EID 工具导入镜像
EID 是由 @Guangran 开发的 EVE-NG 镜像管理工具,支持从云端仓库自动下载并导入镜像到 EVE-NG,大幅简化了手工上传的繁琐流程。
详情查看:https://eid.grbj.cn
自定义制作镜像
当官方镜像库中没有特定设备镜像时,可以自行制作。制作过程包括获取原始固件、转换格式、调整参数、测试验证。
制作 QEMU 镜像
第一步:获取设备固件
从设备厂商官网或授权渠道获取适用于虚拟化平台的固件文件。常见格式:
.img— 磁盘镜像格式.qcow2— QEMU 动态增长格式.vmdk— VMware 虚拟磁盘格式.tar.gz/.zip— 压缩包(可能包含多个文件)
第二步:转换镜像格式
使用 qemu-img 工具将原始格式转换为 EVE-NG 兼容的 qcow2 格式:
# IMG 转 QCOW2qemu-img convert -O qcow2 input.img output.qcow2# VMDK 转 QCOW2qemu-img convert -O qcow2 input.vmdk output.qcow2# 压缩并转换(节省存储空间)qemu-img convert -O qcow2 -c input.img output.qcow2第三步:创建镜像目录
在 QEMU 存储路径下为新设备创建目录:
mkdir -p /opt/unetlab/addons/qemu/my-device-name第四步:放置镜像文件
将转换后的 qcow2 文件放入目录,注意文件名约定:
- 单磁盘:
disk.qcow2 - 多磁盘:
disk0.qcow2、disk1.qcow2
mv output.qcow2 /opt/unetlab/addons/qemu/my-device-name/disk.qcow2第五步:创建模板文件
在 /opt/unetlab/html/templates/intel/ 创建模板文件 my-device-name.yml:
---name: My Devicedirectory: my-device-nametype: qemucpu: 2ram: 4096eth: 4console: vncmgmt: someqemu_version: "8.0"第六步:测试验证
重启 EVE-NG 相关服务后,在 Web 界面创建实验室测试节点启动:
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions镜像格式转换参数说明
| 参数 | 说明 |
|---|---|
-O qcow2 | 输出格式为 QCOW2 |
-c | 启用压缩,会降低性能但节省存储 |
-p | 显示转换进度 |
-m 8192 | 指定转换时内存缓冲区大小(MB) |
常见设备镜像制作示例
华为 AR 路由器镜像制作
# 假设原始文件为 ar_images.zip,解压后得到:# - ar2220.tar (可能包含多个组件)# 创建目录并解压mkdir -p /opt/unetlab/addons/qemu/huawei-ar2220tar -xzf ar_images.tar -C /opt/unetlab/addons/qemu/huawei-ar2220/# 转换并压缩(节省约 60% 空间)qemu-img convert -O qcow2 -c huawei-ar2220.img huawei-ar2220/disk.qcow2# 设置权限/opt/unetlab/wrappers/unl_wrapper -a fixpermissionsFortinet FortiGate 防火墙镜像制作
# FortiGate 官方提供 qcow2 格式镜像,可直接使用# 下载 fortios.qcow2 后:mkdir -p /opt/unetlab/addons/qemu/fortinet-fgt60emv fortios.qcow2 /opt/unetlab/addons/qemu/fortinet-fgt60e/disk.qcow2# 创建模板cat > /opt/unetlab/html/templates/intel/fortinet-fgt60e.yml << 'EOF'---name: FortiGate 60Edirectory: fortinet-fgt60etype: qemucpu: 2ram: 2048eth: 6console: vncmgmt: someqemu_version: "8.0"EOF/opt/unetlab/wrappers/unl_wrapper -a fixpermissions修改和创建镜像模板
模板文件(.yml)定义了 EVE-NG 如何启动和管理某个设备节点,包括分配 CPU 核心数、内存大小、网卡数量、コンソール类型等参数。
模板文件结构
EVE-NG 模板文件采用 YAML 格式,每个模板包含以下核心字段:
| 字段 | 类型 | 说明 | 示例 |
|---|---|---|---|
name | 字符串 | Web 界面中显示的设备名称 | "Cisco vIOS Router" |
directory | 字符串 | 对应 QEMU 镜像目录名 | "vios-router" |
type | 字符串 | 引擎类型 | qemu / iol / dynamips |
cpu | 整数 | 分配 CPU 核心数 | 2 |
ram | 整数 | 分配内存大小(MB) | 2048 |
eth | 整数 | 虚拟网卡数量 | 4 |
console | 字符串 | 控制台连接方式 | vnc / telnet / serial |
mgmt | 字符串 | 管理网络接口模式 | nat / bridge / e1000 |
icon | 字符串 | 设备图标文件名 | router.png |
cpu_limit | 整数 | CPU 使用上限百分比 | 100 |
delay | 整数 | 启动延迟(秒) | 10 |
qemu_version | 字符串 | QEMU 版本要求(v7 默认 8.x) | "8.0" |
config_script | 字符串 | 配置脚本文件名 | huawei-startup.sh |
创建自定义模板
场景:你已上传了一个自定义的华为 AR 路由器镜像,目录为 /opt/unetlab/addons/qemu/huawei-ar2220,现在需要创建模板使 EVE-NG 能够正确识别和启动它。
第一步:创建模板文件
在 /opt/unetlab/html/templates/intel/ 目录下创建 huawei-ar2220.yml:
---name: Huawei AR2220directory: huawei-ar2220type: qemucpu: 2ram: 4096eth: 4console: vncmgmt: naticon: huawei-router.pngcpu_limit: 80delay: 15第二步:创建配置脚本(可选)
若需要在节点启动时自动执行配置,可创建脚本文件 /opt/unetlab/config_scripts/huawei-ar2220-init.sh:
#!/bin/bash# 华为 AR 启动配置脚本# 功能:设置管理接口 IP、加载预设配置echo "Running Huawei AR2220 init script..."# 配置管理接口cat > /tmp/huawei_init.txt << 'EOF'interface GigabitEthernet0/0/0 ip address 192.168.1.100 255.255.255.0 undo shutdownEOF# 将配置推送给节点(通过 serial 或 expect)EOF在模板中添加 config_script: huawei-ar2220-init.sh 字段引用此脚本。
第三步:上传自定义图标(可选)
若需使用自定义图标,将图标文件(如 huawei-router.png)上传至 /opt/unetlab/html/images/icons/,并在模板中指定 icon 字段。
第四步:验证模板
# 重启 EVE-NG Web 服务systemctl restart apache2# 检查模板语法/opt/unetlab/wrappers/unl_wrapper -a check在 Web 界面创建新实验室,若模板正确加载,你创建的设备类型将出现在”添加节点”列表中。
模板字段详解
cpu(CPU 核心数)
分配给虚拟节点的 CPU 核心数量。增加 CPU 可提升多核路由协议(如 OSPF、BGP)的计算性能,但会占用更多宿主机资源。
建议单个节点 CPU 不超过 4 核,总节点 CPU 总和不超过宿主机物理核心数,避免调度竞争导致所有节点性能下降。
ram(内存 MB)
分配给虚拟节点的内存大小。网络设备镜像通常需要:
- Cisco vIOS/IOL:512MB~2048MB
- 华为 AR:1024MB~4096MB
- FortiGate:2048MB~4096MB
- Windows 虚拟机:4096MB+
eth(网卡数量)
虚拟节点的前置网卡数量。注意:某些设备第一个接口预留给管理,后续接口才是实验可用接口。
| 设备类型 | 管理接口 | 实验接口 |
|---|---|---|
| Cisco vIOS | Management0/0 | GigabitEthernet0/0 起 |
| 华为 AR | GE0/0/0 | GE0/0/1 起 |
| FortiGate | port1 | port2 起 |
console(控制台类型)
| 值 | 说明 |
|---|---|
vnc | VNC 图形控制台,Web 界面直接访问 |
telnet | 通过 TCP 5999+ 端口连接,需外部终端 |
serial | 串行控制台,用于特殊设备 |
mgmt(管理网络模式)
| 值 | 说明 |
|---|---|
nat | NAT 模式,节点通过宿主机转发访问外网 |
bridge | 桥接模式,节点直接连接到宿主机网桥 |
e1000 | 指定网卡驱动类型 |
cpu_limit(CPU 上限百分比)
限制该节点可使用的宿主 CPU 资源上限,默认 100%(无限制)。设置较低值可以防止单一节点耗尽所有资源。
cpu_limit: 50 # 该节点最多使用宿主 CPU 的 50%delay(启动延迟秒数)
节点启动指令发出后,延迟指定秒数再执行下一步。某些设备(如 FortiGate)启动较慢,适当增加延迟可避免拓扑启动时序问题。
qemu_version(QEMU 版本要求)
指定该模板需要使用的 QEMU 模拟器版本,确保镜像兼容性。EVE-NG PRO 7.0.1-21 默认内置 QEMU 8.x,部分较老的镜像需要显式指定低版本:
qemu_version: "8.0" # v7 默认qemu_version: "7.0" # 部分老镜像需要qemu_version: "6.0" # 兼容性场景镜像兼容性判断
当你获取到一个镜像但不确定其模板参数时,可通过以下方法判断:
方法一:检查镜像文件头
# 查看 QCOW2 镜像信息qemu-img info /opt/unetlab/addons/qemu/my-device/disk.qcow2# 输出示例:image: disk.qcow2file format: qcow2virtual size: 10G (10737418240 bytes)disk size: 8.5Gcluster_size: 65536Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false方法二:查看镜像内的操作系统
# 挂载镜像查看分区(需安装 qemu-utils)modprobe nbd max_part=8qemu-nbd --connect=/dev/nbd0 /opt/unetlab/addons/qemu/my-device/disk.qcow2partprobe /dev/nbd0fdisk -l /dev/nbd0# 完成后断开qemu-nbd --disconnect=/dev/nbd0方法三:参考社区模板库
EmulatedLab 论坛提供了大量预定义模板,可对照设备型号搜索参考模板参数。
模板调试技巧
| 问题 | 检查项 | 解决方法 |
|---|---|---|
| 节点启动后立即退出 | cpu / ram 配置过低 | 增加 CPU 和内存分配 |
| 节点启动但无网络 | eth 数量不足 | 检查模板 eth 值是否匹配实际需求 |
| 控制台显示黑屏 | console 类型错误 | 尝试改为 telnet 或 vnc |
| 启动卡在 BIOS | 镜像格式问题 | 重新转换镜像格式 |
| 性能异常低 | cpu_limit 设置过低 | 检查模板中 cpu_limit 值 |