
简介网络工程师缺少真机时可借助锐捷RG-NSE模拟器在EVE-NG平台搭建虚拟仿真环境开展路由、交换和防火墙实验。这份PDF围绕镜像导入这一关键环节从EVE-NG后台登录、模板与图标配置、配置文件上传到路由器/交换机镜像存放及权限修复逐步说明操作流程并区分Intel与AMD芯片的模板路径便于按实际环境部署。文档还附带config导出脚本说明可将配置固化在设备上方便拓扑分享与复用同时点明当前支持通用路由、通用交换与通用防火墙实验暂不支持WLAN、数据中心等高级功能帮助读者提前规划学习范围。资源包共1个文件为PDF格式大小约994KB已有1490人学习下载适合网络初学者及需要部署锐捷模拟器的工程师参考。掌握该流程后可快速搭建锐捷设备虚拟实验环境提升命令实操与网络排障能力。1. 锐捷模拟器镜像导入不是复制粘贴就能跑通先说结论锐捷模拟器 RG-NSERG-Network Simulation Environment并不是一个独立的安装包它的运行载体是 EVE-NG 这类第三方虚拟化平台核心是一套 QEMU 镜像加模板文件的组合。很多人在网上找到锐捷的 route 和 switch 镜像后直接拖进 EVE-NG 发现节点起不来或者起来了 console 口敲不了命令问题基本都出在模板没放对位置、镜像文件名不是 hda.qcow2、权限没修复这三件事上。这份 2024 版镜像导入流程 PDF 的价值在于它把从 SSH 登录后台、上传模板、传图标、放镜像脚本到修权限的完整链路写清楚了。适合手里已经有 EVE-NG 环境、想跑锐捷命令实验或者需要把锐捷拓扑打包发给同事的工程师。接下来按实际执行顺序拆解每一步并标出容易翻车的位置。2. 锐捷模拟器的运行底座EVE-NG 目录结构与模板分工2.1 模板文件为什么按 intel 和 amd 分目录EVE-NG 的 QEMU 模板机制决定了模板文件必须放在指定路径下路径错误直接导致设备列表里找不到锐捷节点。锐捷的模板文件有两个Ruijieroute.yml 和 Ruijieswitch.yml分别负责路由器和交换机的节点定义。这两个文件在 EVE-NG 中属于 template 层里面声明了设备名称、默认内存、网卡数量、控制台类型、关联的 qemu 镜像路径等信息。模板存放位置按宿主机的 CPU 架构区分Intel 芯片/opt/unetlab/html/templates/intelAMD 芯片/opt/unetlab/html/templates/amd这个区分逻辑是 EVE-NG 的固定机制不是锐捷特有的。EVE-NG 在 Web 界面渲染设备图标时会根据宿主机的 CPU 类型去对应目录下扫描模板文件。如果你在 Intel 宿主机上把模板放到了 amd 目录刷新左侧设备栏时看不到锐捷设备。2.2 图标、脚本、镜像的分工除了模板这套流程里需要上传的还有三类文件图标文件ruijieroute.png / ruijieswitch.png放到 /opt/unetlab/html/images/icons负责在 Web 拓扑画布上显示设备图形。如果没有图标节点会显示为默认的灰色问号块不影响启动但拓扑里很难区分设备类型。配置文件导出脚本config_ruijie.py放到 /opt/unetlab/scripts作用是把设备配置固化到镜像内部。这样你用锐捷设备搭好一个带完整配置的拓扑后可以导出整个拓扑发给别人对方导入后直接就是配好状态的设备不用重新敲命令。脚本依赖设备账号密码为 ruijie/ruijie这是个硬性前提。镜像文件hda.qcow2是核心必须放到对应设备类型的文件夹下而且文件名必须叫 hda.qcow2。EVE-NG 的 QEMU 启动逻辑是固定读取设备目录下的 hda.qcow2 作为第一块系统盘改成别的名字比如 Ruijieroute.qcow2会导致节点创建失败。模板、图标、脚本、镜像四类文件的关系可以用下面这个表概括文件类型目标路径作用缺失后果模板 yml/opt/unetlab/html/templates/intel 或 amd在设备栏注册锐捷节点类型设备列表无锐捷图标 png/opt/unetlab/html/images/icons拓扑画布显示设备图形设备显示为默认图标配置脚本 py/opt/unetlab/scripts固化设备配置到镜像拓扑无法携带配置镜像 qcow2/opt/unetlab/addons/qemu/Ruijieroute-1.0/ 或 Ruijieswitch-1.0/QEMU 系统盘节点启动失败2.3 权限修复的理解为什么最后一步是 unl_wrapper -a fixpermissions整个导入流程的收尾命令是 /opt/unetlab/wrapper 脚本体系中的 unl_wrapper -a fixpermissions。这一步的作用是把 /opt/unetlab 目录下的文件属主统一修正为 www-data 用户因为 EVE-NG 的 Web 界面Apache PHP以 www-data 身份运行而 scp 上传的文件属主是你 SSH 登录的 root。如果属主不对Web 界面创建节点时无法读取镜像文件会出现“Permission denied”或节点状态变成 stopped 且无法启动。常见做法是所有文件上传完后在后台执行这条命令然后再去 Web 界面操作。如果先建节点再修权限已经创建的节点可能因为 qemu 进程权限问题直接闪退需要删除重建。3. 镜像导入流程从模板到镜像的逐项落盘操作3.1 准备本地文件与登录后台的规范做法本地需要准备的文件一共是 6 个两个模板 yml、两个图标 png、一个 config_ruijie.py、两个 hda.qcow2路由器一个、交换机一个。这些文件从锐捷官方或渠道获取后建议放在同一个目录下比如 C:\RG-NSE避免后续 scp 命令里写分散路径导致找不到文件。登录 EVE-NG 后台用 putty 或 SecureCRT 都可以SSH 端口默认 22用户名 root密码默认 eve。登录后的界面是 Debian Linux 命令行。第一次登录建议先确认 EVE-NG 版本和 CPU 架构用 uname -m 查看架构输出确认是 x86_64 还是 AMD 架构再决定模板往哪个目录传。确认命令uname -m cat /etc/issueuname -m 输出 x86_64 表示 Intel/AMD 通用 64 位架构此时模板放在 intel 目录即可如果是 arm64 或其他架构需要确认 EVE-NG 版本是否支持。cat /etc/issue 可以查看当前系统版本用于确认平台是社区版还是专业版两者在模板扫描机制上没有差异。3.2 上传模板和图标scp 命令的路径检查Windows 下用 scp 命令上传文件时左下角运行框WinR直接执行即可。关键是 scp 的源路径要写完整目标路径不能多打空格。以 Intel 芯片为例scp -r C:/Ruijieroute.yml root192.168.6.101:/opt/unetlab/html/templates/intel scp -r C:/Ruijieswitch.yml root192.168.6.101:/opt/unetlab/html/templates/intel scp -r C:/ruijieroute.png root192.168.6.101:/opt/unetlab/html/images/icons scp -r C:/ruijieswitch.png root192.168.6.101:/opt/unetlab/html/images/icons这里 -r 参数对单文件其实没有意义但保留也无害。需要重点检查的是 C:/ 后面是否跟了完整的文件名原文档里红色标注的“文件在本地电脑上的路径”提醒的就是这个位置。很多人把 C:/Ruijieroute.yml 写成 C:/结果整个目录被传过去或提示 No such file or directory。上传完成后登录后台检查文件存在性不要直接去 Web 界面刷新ls -l /opt/unetlab/html/templates/intel/Ruijieroute.yml ls -l /opt/unetlab/html/images/icons/ruijieroute.png3.3 创建镜像目录并上传 qcow2锐捷镜像的上传路径有点特殊EVE-NG 的默认 qemu 镜像目录下可能已经有一些其他厂商的镜像文件夹但锐捷要求新建两个特定文件夹。原文档特别提到删除原始镜像文件夹这里的 rm -rf /opt/unetlab/addons/qemu/ 操作需要谨慎理解它的目的是清空 qemu 目录下可能存在的残留文件避免同名文件夹冲突但这条命令会连其他厂商的镜像一起删掉。如果环境里有其他厂商镜像建议改为只删除锐捷相关的两个文件夹rm -rf /opt/unetlab/addons/qemu/Ruijieroute-1.0 rm -rf /opt/unetlab/addons/qemu/Ruijieswitch-1.0然后新建目录并上传mkdir -p /opt/unetlab/addons/qemu/Ruijieroute-1.0 mkdir -p /opt/unetlab/addons/qemu/Ruijieswitch-1.0scp -r C:/hda.qcow2 root192.168.6.101:/opt/unetlab/addons/qemu/Ruijieroute-1.0 scp -r C:/hda.qcow2 root192.168.6.101:/opt/unetlab/addons/qemu/Ruijieswitch-1.0上传完成后检查目录内容确认 hda.qcow2 的属主和权限ls -lh /opt/unetlab/addons/qemu/Ruijieroute-1.0/ ls -lh /opt/unetlab/addons/qemu/Ruijieswitch-1.0/这个时候先不要急着建节点执行权限修复/opt/unetlab/wrapper/unl_wrapper -a fixpermissions3.4 上传配置导出脚本scp -r C:/config_ruijie.py root192.168.6.101:/opt/unetlab/scripts脚本放到 scripts 目录后同样需要执行权限修复因为脚本可能需要在 qemu 启动时被调用执行权限不正确时配置文件导出的功能会静默失效。配置脚本在锐捷设备里的表现是设备启动后自动把 running-config 导到一个固定的存储分区。需要确认锐捷设备镜像内置的账号是 ruijie密码也是 ruijie脚本通过 SSH 登录设备执行命令。如果修改过设备密码脚本会登录失败配置无法固化。4. 避坑与常见问题五个高频翻车点及处理记录4.1 设备列表不显示锐捷节点现象模板和图标都上传了Web 界面左侧设备栏仍然只有默认的那些厂商设备锐捷节点完全看不到。原因模板放错了目录。Intel 宿主机上模板放到了 amd 目录或者反过来。第二种常见原因是模板文件内容格式错误EVE-NG 在扫描模板时解析失败自动跳过。解决先确认 CPU 架构再把模板文件放到对应目录。然后用命令行手动验证模板能否被读取grep -i ruijie /opt/unetlab/html/templates/intel/Ruijieroute.yml如果输出为空说明模板内容有问题需要重新获取模板文件。4.2 节点创建成功但启动秒退现象拓扑里拖入锐捷路由器或交换机节点点启动节点状态从 stopped 变成 starting几秒后又回到 stoppedconsole 口完全无输出。原因最常见的是 qemu 镜像目录里的文件名不是 hda.qcow2。EVE-NG 启动节点时固定读取 /opt/unetlab/addons/qemu/设备名/hda.qcow2如果文件叫别的名字qemu 进程直接报错退出。解决进入设备目录重命名镜像文件为 hda.qcow2mv /opt/unetlab/addons/qemu/Ruijieroute-1.0/xxx.qcow2 /opt/unetlab/addons/qemu/Ruijieroute-1.0/hda.qcow2还有一种情况是镜像文件权限不对启动节点时 Web 界面提示 Permission denied。执行 unl_wrapper -a fixpermissions 后重试。4.3 节点卡在启动中Console 口黑屏现象节点状态显示 running但点 Console 打开终端窗口一片黑回车无反应Access 端口连不通。原因模板中的 console 类型与 EVE-NG 的终端协议不匹配。锐捷模板默认配置了 console 为 vnc 或 telnet如果 EVE-NG 版本不支持对应协议或者浏览器禁用了 Web 终端插件就会出现黑屏。解决手工编辑模板文件把 console 类型改为 telnetvi /opt/unetlab/html/templates/intel/Ruijieroute.yml检查文件里 console 字段的值如果是 vnc改成 telnet保存后重试启动节点。另外建议直接用 putty 连接节点telnet 到 192.168.6.101 的节点映射端口比如 32769看是否有输出。4.4 导入别人的拓扑后设备配置为空现象同事发来一个锐捷拓扑文件导入后节点能启动但设备全部是出厂默认配置之前配好的 VLAN、接口 IP 全没了。原因配置脚本没有生效或者对方导出拓扑前没有执行配置固化操作。config_ruijie.py 脚本依赖两个前提目录位置在 /opt/unetlab/scripts且设备账号密码为 ruijie/ruijie。两个条件有一个不满足配置就写不进镜像。解决确认脚本位置和权限登录设备修改账号密码为 ruijie/ruijie重新执行配置保存再导出拓扑。4.5 fixpermissions 命令执行后 Web 界面白屏现象执行 unl_wrapper -a fixpermissions 后Web 界面无法访问或者页面直接显示 502。原因fixpermissions 会把 /opt/unetlab 下的文件全部改为 www-data 属主但有时也会把 /opt/unetlab/html 下某些需要 root 权限的缓存文件属主改乱导致 PHP-FPM 无法读取会话缓存。解决不要频繁执行 fixpermissions只在文件上传完成后执行一次。如果白屏重启 EVE-NG 相关服务systemctl restart apache2 systemctl restart php7.x-fpm具体版本号以你环境为准查看 /etc/init.d 下的服务列表确认。5. 实测验证与配置固化让拓扑带配置活起来5.1 导入完成后的逐层验证清单全部文件上传完毕并修复权限后不要直接在 Web 界面拉设备就完事。按下面的顺序逐层验证每一层通过了再进下一层第一层验证设备能否创建节点Web 界面左侧设备列表中能看到 Ruijieroute 和 Ruijieswitch 两类设备。拖一个路由器到拓扑配置 512MB 内存一个网卡启动。第二层验证 console 连通用 putty telnet 到节点控制台等待设备完成启动出现 Ruijie 设备的登录提示符输入用户名 ruijie、密码 ruijie进入 CLI 界面执行 enable 进入特权模式。第三层验证接口连通性在拓扑里加一台 EVE-NG 自带的 VPC 或 Linux 节点与锐捷路由器用网线相连配置接口 IP 后互 ping。这一步能确认镜像的接口驱动和 EVE-NG 虚拟网络链路是通的否则后面所有实验都建立在不可靠的虚拟链路上。第四层验证配置固化在锐捷设备上配置一组接口和 VLAN执行 write 保存配置然后从这个拓扑导出 .unl 文件再新建一个拓扑导入这个文件启动设备后检查配置是否还在。5.2 配置固化脚本的正确使用方式配置脚本的正确使用方式比较隐蔽。脚本上传后它在设备启动时自动运行但前提是设备的登录凭据是初始的 ruijie/ruijie。如果你在实验过程中改了 enable 密码或者登录密码脚本就会卡在认证环节配置固化失败。实际操作时我一般是设备启动完成后先不要做任何配置修改用 ruijie/ruijie 登录一次确认能进系统然后再开始配置实验。实验做完后把密码改回 ruijie/ruijie再执行 write最后导出拓扑。这个顺序看起来很麻烦但能避免很多次“配置没固化”的返工。验证配置是否固化成功可以查看镜像文件的时间戳和大小变化ls -l --time-stylefull-iso /opt/unetlab/addons/qemu/Ruijieroute-1.0/hda.qcow2如果配置固化成功hda.qcow2 的文件大小会增大时间戳也会更新到最近一次保存配置的时间。5.3 常见参数调整参考锐捷路由器和交换机模板里比较重要的参数有几个内存推荐 512MB过低会导致设备启动时 OOMprompt 卡住网卡数量默认 4 个实际实验用 2 个就够多了会拖慢启动速度console 协议按 4.3 节处理为 telnet。参数推荐值说明内存512MB低于 256MB 设备启动极慢或失败网卡数量2-4 个按实验需要调整不影响启动consoletelnetvnc 可能黑屏镜像目录Ruijieroute-1.0 / Ruijieswitch-1.0固定命名不可省略版本号6. 进阶把导入流程工程化而不是每次手敲命令这套流程最大的浪费在于每次换一台 EVE-NG 机器都要重新执行一遍 scp 和 mkdir 操作。我现在的做法是把整个导入流程整合成一个脚本在本地 Windows 上用 PowerShell 执行把本地的文件路径和目标 IP 作为参数传入一键完成上传和远程命令执行。核心是 plink 配合 scp。先用 scp 上传四个文件类再用 plink 远程执行 mkdir 和 mv 以及 fixpermissionsparam( [string]$TargetIP 192.168.6.101, [string]$LocalPath C:\RG-NSE, [string]$Password eve ) $env:PLINK_PROTOCOL ssh plink -ssh root$TargetIP -pw $Password ls /opt/unetlab/html/templates/intel/ scp -r $LocalPath\Ruijieroute.yml root${TargetIP}:/opt/unetlab/html/templates/intel/ scp -r $LocalPath\Ruijieswitch.yml root${TargetIP}:/opt/unetlab/html/templates/intel/ scp -r $LocalPath\ruijieroute.png root${TargetIP}:/opt/unetlab/html/images/icons/ scp -r $LocalPath\ruijieswitch.png root${TargetIP}:/opt/unetlab/html/images/icons/ scp -r $LocalPath\config_ruijie.py root${TargetIP}:/opt/unetlab/scripts/ plink -ssh root$TargetIP -pw $Password mkdir -p /opt/unetlab/addons/qemu/Ruijieroute-1.0 plink -ssh root$TargetIP -pw $Password mkdir -p /opt/unetlab/addons/qemu/Ruijieswitch-1.0 scp -r $LocalPath\route-hda.qcow2 root${TargetIP}:/opt/unetlab/addons/qemu/Ruijieroute-1.0/hda.qcow2 scp -r $LocalPath\switch-hda.qcow2 root${TargetIP}:/opt/unetlab/addons/qemu/Ruijieswitch-1.0/hda.qcow2 plink -ssh root$TargetIP -pw $Password /opt/unetlab/wrapper/unl_wrapper -a fixpermissions这段脚本把本地文件名做了区分处理本地镜像叫 route-hda.qcow2 和 switch-hda.qcow2传上去后目标文件名直接改名为 hda.qcow2。省去了登录后台 mv 重命名的步骤。密码明文出现在脚本里只建议在个人实验环境里使用如果目标机器在共享环境改用 SSH 密钥认证。从那以后我每次拿到新版本的锐捷镜像都强制走一遍这个脚本流程确认四层验证全部通过后再开始搭实验。这套流程跑完大概五分钟比起手工操作至少省一半时间关键是步骤不会遗漏。希望帮到你。本文还有配套的精品资源点击获取