☰
PNET模拟器导入锐捷RGOS镜像全流程与排障指南
2026/10/1 4:29:28 网站建设 项目流程

这两年做网络实验,越来越多人从GNS3、HCL转到PNET上。原因很简单:网页点开就能用,多台设备同时跑,拓扑想拉多大拉多大,尤其适合模拟学校或者项目里常见的锐捷设备。这篇文章就围绕“PNET模拟器导入锐捷镜像”这条主线,把镜像从哪来、怎么传进PNET、怎么建模板启动设备、启动失败怎么排查,一直到导入后能跑哪些锐捷配置练习,一次说透。不管你是刚接触模拟器的新手,还是想给PNET补一套锐捷环境的老手,照着做基本都能跑起来。

1. PNET为什么值得折腾锐捷镜像

1.1 PNET和EVE-NG、GNS3到底是什么关系

很多读者第一次听说PNET是在搜EVE-NG的时候,因为两者界面几乎一模一样。实际上PNET可以理解成EVE-NG的社区维护分支,保留了EVE-NG那种“网页管理-底层QEMU虚拟化”的架构,同时修了不少原版的老毛病,安装包也更轻量。它的工作模式是:你在浏览器里拖设备、连线,底层用QEMU启动真实的设备镜像,设备之间通过虚拟网桥互相通信。和GNS3相比,PNET对批量启动和长期挂机更友好;和HCL比,它不锁厂商,放宽到所有能转成QEMU格式的网络操作系统都能跑。

锐捷设备在国内项目里的存量很大,但官方模拟器的普及度不如思科、华为那么高。这种情况下,把锐捷镜像塞进PNET就成了很实际的方案:一套实验环境里既能有思科、华为,也能有锐捷,拓扑统一管理,不用来回切换模拟器。

1.2 锐捷镜像的类别与选型逻辑

网上流通的锐捷镜像大致分三类。第一类是锐捷早期模拟器自带的IOU/IOL镜像,体积小、启动快,但功能和真实设备差距大,很多新命令不支持。第二类是社区转换的QEMU格式镜像,通常以qcow2格式封装了完整的RGOS系统,这类最适合放进PNET,启动后能进入Ruijie>命令行,路由、交换、NAT基本都能练。第三类是真实设备的固件包,这种不建议碰,因为固件需要特定硬件平台驱动,强行转换成模拟器镜像往往启动不了,没必要浪费时间。

选型时优先找qcow2格式的锐捷RGOS镜像。注意看镜像对应的软件版本,如果手里的镜像太老,很多新特性比如VXLAN、MSTP增强功能就练不了;如果版本太新,PNET自带的QEMU版本可能带不动。一般社区流传的10.x版本RGOS镜像在PNET上都比较稳。

2. 导入前的准备工作与镜像来源分析

2.1 环境准备清单

导入之前先确认三件事:PNET服务器磁盘空间、内存、以及上传通道。

锐捷的qcow2镜像通常在200MB到1GB不等,启动后占用的内存建议给到1GB到2GB。如果你打算一台PNET上同时跑锐捷路由器、交换机加防火墙,物理机的内存最好16GB起步,否则多开几个节点就直接卡死。磁盘方面,镜像文件本身加上启动后的快照,预留至少20GB比较稳妥。

上传通道方面,PNET最常见的做法是通过SSH/SFTP传文件,我习惯用Xshell自带的XFTP或者WinSCP,直接把镜像拖到服务器指定目录。也可以用PNET网页自带的文件管理功能,但大文件传一半断线的话,还得回服务器重新搞,所以我更推荐SFTP。

如果你在网上找到的PNET是“懒人版”“一键版”之类的打包镜像,请注意:这类版本通常已经预置了一堆常用设备和镜像,省去不少上传时间,但目录结构和原版有差异。用过几次之后我还是建议自己手动走一遍标准导入流程,因为只有理解背后的目录规则,设备启动失败时才知道去哪里查日志。

2.2 锐捷镜像从哪里来

锐捷官方为学习用途提供过模拟器相关的学习镜像,这是最正规的渠道。另外不少网络技术论坛、学习社区里也有玩家自己转换好的RGOS镜像,可以自行搜索“锐捷 RGOS 模拟器 镜像”之类的关键词。这里有个原则:优先选择带有原作者使用说明、版本号清晰的资源,不要下载来路不明的二手包,避免镜像被人动过手脚,也避免下到损坏文件浪费时间。

拿到镜像后先本地验证一下:用7-Zip或者WinRAR打开压缩包,确认里面有qcow2文件,再看看文件大小是否和发布说明一致。如果压缩包只有几十KB,那大概率不是完整镜像。

2.3 镜像格式与目录命名规则

PNET底层沿用了EVE-NG的QEMU镜像管理方式。所有QEMU类型的镜像都放在服务器的这个目录下:

/opt/unetlab/addons/qemu/

关键规则是:每个镜像必须单独建一个子目录,子目录名字有一定讲究。PNET在创建节点时,模板文件会引用一个固定的镜像目录名,如果你把目录建得和模板不一致,节点就启动不了。社区里常见的做法是建一个类似“ruijie-10.4”的目录,然后把qcow2文件命名为“hda.qcow2”放进去。

举个例子,假设你下载的镜像解压后叫“ruijie-10.4.qcow2”,标准的放法是这样:

mkdir -p /opt/unetlab/addons/qemu/ruijie-10.4 mv ruijie-10.4.qcow2 /opt/unetlab/addons/qemu/ruijie-10.4/hda.qcow2

这样做的原因是PNET的模板里默认会去找hda.qcow2这个文件名,如果你保留原来的文件名,后面就要额外改模板,凭空多一个出错点。我第一次导入时图省事没改名,结果启动时一直报找不到镜像,后来老老实实按这个规范就一次通过了。

3. 锐捷镜像导入PNET的完整实操流程

3.1 上传镜像文件到服务器

先用SSH登录PNET服务器,然后用SFTP工具连接,把镜像传到临时目录,比如/root/或者/tmp/。不建议直接传到最终目录,因为上传过程中文件不完整,如果上传线程被打断,残留的半成品文件会影响判断。

上传完成后检查一下文件大小:

ls -lh /tmp/ruijie-10.4.qcow2

如果大小和本地一致,再进行下一步。如果发现服务器上的文件比本地小几十MB,大概率是传输中断了,重新传一遍最省事。

3.2 创建QEMU镜像目录并解压

在/opt/unetlab/addons/qemu/下创建镜像目录,并把镜像移动过去改名:

mkdir -p /opt/unetlab/addons/qemu/ruijie-10.4 mv /tmp/ruijie-10.4.qcow2 /opt/unetlab/addons/qemu/ruijie-10.4/hda.qcow2

注意目录名不要带空格,不要用中文,也不要包含特殊符号。PNET后端用的是Linux路径,空格和中文都会让模板解析出问题。镜像路径里我建议按照“厂商-主版本号”的方式命名,比如ruijie-10.4,这样以后镜像多了也好管理。

3.3 修复权限并让PNET识别设备

这是整个导入流程里最容易被忽视的一步。PNET里的QEMU进程以unl用户运行,如果你用root把镜像放进去,镜像文件的属主是root,unl用户读不了,设备就启动失败。修复权限的命令是:

/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

执行完以后,再确认镜像文件的属主已经变成unl或者www-data:

ls -l /opt/unetlab/addons/qemu/ruijie-10.4/

输出里应该能看到类似“-rw-r--r-- 1 unl unl”这样的信息。如果属主不对,别急着往后走,先重新执行一次权限修复命令。

3.4 在Web界面创建锐捷节点

权限修好之后,打开PNET的Web界面,新建一个实验,然后点“Add New Node”添加节点。在设备类型里选QEMU,此时PNET会列出所有qemu目录下可用的镜像目录,一般能看到刚刚创建的ruijie-10.4。

为了让CPU型号、内存、网卡数量等参数符合锐捷设备的运行要求,更稳妥的方式是给PNET加一个设备模板。以我用的PNET版本为例,模板文件放在:

/opt/unetlab/html/templates/

参考目录里已有的PHP模板写法,可以新建一个ruijie.php,内容类似这样:

<?php $p['type'] = "qemu"; $p['name'] = "Ruijie RGOS"; $p['icon'] = "Router.png"; $p['qemu_arch'] = "x86_64"; $p['qemu_version'] = "2.12.0"; $p['qemu_nic'] = "e1000"; $p['qemu_img'] = "ruijie-10.4/hda.qcow2"; $p['qemu_cpu'] = "qemu64"; $p['qemu_mem'] = "1024"; $p['qemu_num'] = 1; $p['qemu_nics'] = 4; $p['qemu_console'] = "telnet"; ?>

不同版本的PNET对模板字段支持略有差异,如果你看到模板目录里没有类似文件,直接参考里面已有的Linux桥接模板改也行。关键就是把qemu_img指向你创建的镜像目录,并且确保qemu_console的值和后续打开终端的方式一致。

3.5 启动设备与进入命令行验证

添加完节点以后,选中节点点击启动,然后再双击节点打开控制台,正常会看到虚拟设备自检过程,最后出现“Ruijie>”提示符。如果没出现命令行,别急着判断镜像坏了,先往下看排查章节。

能进入“Ruijie>”之后,输入enable进入特权模式,再输入configure terminal进入全局配置模式,确认一下系统版本:

Ruijie>enable Ruijie#show version Ruijie#configure terminal Ruijie(config)#hostname R1

这几条命令跑通,就说明锐捷镜像导入PNET成功了。接下来就可以正常做链路聚合、VLAN、路由协议等配置练习。

4. 导入后能练什么:四个高频锐捷配置场景

4.1 锐捷交换机基础命令与VLAN配置

锐捷交换机的命令行风格和思科比较接近,在PNET里练手时,可以从VLAN划分开始。比如在交换机上创建VLAN 10和VLAN 20,把两个接口划分到不同VLAN:

Ruijie>enable Ruijie#configure terminal Ruijie(config)#vlan 10 Ruijie(config-vlan)#name Office Ruijie(config-vlan)#exit Ruijie(config)#vlan 20 Ruijie(config-vlan)#name Lab Ruijie(config-vlan)#exit Ruijie(config)#interface GigabitEthernet 0/1 Ruijie(config-if-GigabitEthernet 0/1)#switchport access vlan 10 Ruijie(config-if-GigabitEthernet 0/1)#exit Ruijie(config)#interface GigabitEthernet 0/2 Ruijie(config-if-GigabitEthernet 0/2)#switchport access vlan 20 Ruijie(config-if-GigabitEthernet 0/2)#exit

这里有个锐捷和思科不太一样的地方:锐捷的部分设备接口命名会带上槽位号,比如GigabitEthernet 0/1,如果敲错提示符会不识别,输入“?”就能看到当前设备支持的接口列表,这是最快的学习方式。我在模拟器里搭VLAN时,习惯把两个VLAN的网关配在核心交换机上,挂上VLAN虚接口,再用两台PC互ping验证,确保广播域被正确隔离。

4.2 利用镜像练DHCP:全网自动获取地址

锐捷设备上配置DHCP服务,是高频场景。在PNET里可以用一台锐捷路由器或三层交换机当DHCP服务器,给下游PC自动分配地址。基本配置如下:

Ruijie(config)#service dhcp Ruijie(config)#ip dhcp pool vlan10_pool Ruijie(dhcp-config)#network 192.168.10.0 255.255.255.0 Ruijie(dhcp-config)#default-router 192.168.10.1 Ruijie(dhcp-config)#dns-server 114.114.114.114 Ruijie(dhcp-config)#lease 1 0 0 Ruijie(dhcp-config)#exit Ruijie(config)#interface VLAN 10 Ruijie(config-if-VLAN 10)#ip address 192.168.10.1 255.255.255.0 Ruijie(config-if-VLAN 10)#no shutdown

敲完以后,在PC节点上使用IP配置命令或DHCP客户端,就能看到从锐捷设备获取到的地址。模拟器里验证DHCP有个好处:你可以故意把地址池写错、把网关漏配,然后观察客户端取不到地址或网关不通的现象,这种排障练习在真机上很难放开了折腾。

4.3 无线AC与AP的模拟思路

锐捷的无线AC和AP也是搜索热词,很多读者希望模拟无线组网。实际上在PNET里模拟AC+AP要注意:锐捷AC和AP之间走的是CAPWAP隧道,如果模拟器里没有对应的无线控制器镜像,纯靠交换机镜像无法完整模拟AP注册过程。比较务实的做法是先用锐捷交换机镜像做有线侧组网,划分管理VLAN、业务VLAN,配置DHCP,再把AC的IP和管理VLAN搭好,模拟控制器的基础网络环境。至于CAPWAP注册过程是否能在PNET里跑通,取决于你手里的镜像是否包含AC功能,这个得具体版本具体试,不要想当然。

如果你找到了支持AC功能的RGOS镜像,配置思路上一般是:给AC配置管理接口地址,设置VLAN和DHCP,再创建AP组和SSID模板,把SSID下发到AP。具体命令在不同版本里差异较大,拿到镜像后先看“show version”和“show capability”,确认支持哪些无线功能再动手。

4.4 防火墙接口与安全策略配置

锐捷防火墙的配置思路是“先建区域,再放安全策略”。如果PNET里只有锐捷交换机和路由器镜像,没有防火墙镜像,可以先用路由器加ACL模拟域间隔离;如果有防火墙镜像,则按防火墙的逻辑来。以常见的区域划分为例:

Ruijie-FW>enable Ruijie-FW#configure terminal Ruijie-FW(config)#interface GigabitEthernet 0/0 Ruijie-FW(config-if-GigabitEthernet 0/0)#zone untrust Ruijie-FW(config-if-GigabitEthernet 0/0)#ip address 203.0.113.1 255.255.255.0 Ruijie-FW(config-if-GigabitEthernet 0/0)#exit Ruijie-FW(config)#interface GigabitEthernet 0/1 Ruijie-FW(config-if-GigabitEthernet 0/1)#zone trust Ruijie-FW(config-if-GigabitEthernet 0/1)#ip address 192.168.1.1 255.255.255.0

然后配置安全策略,允许内网访问外网,再写一条拒绝外网主动访问内网的规则。模拟器里验证防火墙策略最直观的方法,就是用PNET内部的PC节点分别ping不同区域的地址,观察通断是否符合预期。

5. 启动失败、灰屏、卡死的排查实录

5.1 节点状态异常与权限修复

现象是节点添加了,启动后一直处于灰色或者红色状态,双击控制台没反应。这个大概率是镜像文件权限不对。我在给PNET导入锐捷镜像时,因为用root上传后没有执行权限修复命令,节点就一直起不来。解决方法是回到SSH终端执行:

/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

然后回到网页,把节点停止后再启动。这里要特别注意:修复权限后,当前实验里正在运行的其他节点也可能受影响,最好在实验开始前统一修好权限,不要跑了一堆设备再临时插入新镜像。

5.2 镜像目录名与模板不匹配

设备节点可以添加,但启动瞬间日志里报找不到磁盘文件。这种情况十有八九是模板里qemu_img的路径和实际创建目录不一致。比如模板写的是“ruijie/hda.qcow2”,但实际目录叫“ruijie-10.4”,那就得改成一致的。可以直接在PHP模板里修改qemu_img字段,也可以把镜像目录统一改成模板里的名字,二选一。改完记得清理PNET的临时文件:

rm -rf /opt/unetlab/tmp/0/*

这里的0是实验ID,如果你有多个实验,对应数字会不同。清掉之后再启动节点,让PNET重新加载配置。

5.3 控制台黑屏的常见原因

节点显示已启动,但双击打开控制台,黑屏或者只有光标闪烁。这个分两种情况。一种是指纹模板里配置的启动参数有问题,锐捷RGOS镜像的启动输出默认会走串口,而PNET的Web终端默认连的是Telnet,如果模板没把串口重定向到Telnet,就会黑屏。模板里需要保留类似这样的参数:

$p['qemu_extra'] = "-serial telnet:127.0.0.1:4000,server,nowait -nographic";

另一种情况是设备确实在启动,只是RGOS引导过程比较慢,特别是老版本镜像加qemu64 CPU模拟时,可能需要一两分钟。这时不要反复开关控制台,反而打断启动流程,等一会儿观察日志变化更靠谱。

5.4 CPU型号和内存分配不当导致反复重启

锐捷镜像在PNET里频繁重启或启动到一半崩溃,除了镜像本身损坏外,最常见的原因是模板里qemu_cpu设置成了host,而宿主机的CPU型号和QEMU模拟的CPU不兼容。解决办法是改成qemu64或者kvm64,牺牲一点性能换稳定:

$p['qemu_cpu'] = "qemu64";

内存方面,如果给节点分配的内存小于512MB,部分RGOS版本会因为内存不足启动失败,建议至少1024MB。如果同时跑多个节点导致物理内存耗尽,系统会触发OOM,表现也是节点随机崩溃,这种时候先停掉不用的节点,别硬撑。

5.5 通用日志排查路径

碰到设备起不来的情况,最快的方法是看PNET生成的运行日志。日志在实验目录下,比如:

ls /opt/unetlab/tmp/0/1/

里面的wrapper日志和qemu日志会记录启动命令和报错原因。比如报“Permission denied”就是权限问题,报“Failed to lock byte 100”多半是镜像文件被占用,报“invalid accelerator”就是CPU配置问题。养成看日志的习惯,比盲目改参数高效得多。我把常见问题和排查手段整理成一张速查表,方便你对照着处理。

现象可能原因处理手段
节点启动不了镜像文件权限不对执行fixpermissions后重启节点
启动后黑屏模板缺串口重定向参数补充qemu_extra串口映射
启动后黑屏且CPU高镜像首次引导较慢等待1~2分钟,不要频繁开关终端
设备反复重启CPU型号不兼容将qemu_cpu改为qemu64
节点能开但网不通网卡类型或数量设置不当检查模板qemu_nic和qemu_nics配置
日志报磁盘找不到镜像目录名与模板不一致统一目录名,清理tmp缓存

6. 用PNET跑锐捷镜像的几点心得

整套流程走下来,我个人最大的感受是:PNET本身只是个壳,真正值钱的是你手里的镜像和拓扑设计。锐捷镜像导入成功后,不要只停留在打开命令行、敲几条命令看看效果的阶段,可以把它当成一个小型的项目环境,比如模拟一台出口路由器拨号、一台核心交换机做DHCP和VLAN、两台接入交换机下挂PC,再夹一台防火墙做内外网策略。这种组合拓扑和你在真实机房里见过的架构基本一致,练完以后再去接触真机,心态会从容很多。

另外有几个小习惯我一直保持:每次导入新镜像后,先在添加节点界面确认设备类型和下划线命名是否正常;启动多台设备前,看一眼服务器内存和CPU负载;做任何会改变模板文件的操作前,先备份原文件。这些习惯看起来不起眼,但能省掉很多重复排查时间。

最后再分享一个不算技巧的技巧:如果你要在PNET里长期维护锐捷实验环境,建议把镜像、模板、常用拓扑分别归档。镜像按版本放,模板按用途命名,拓扑文件导出备份。这样哪怕哪天PNET服务器重装,整套环境也能在半小时内恢复。先把第一台锐捷设备跑起来,剩下的就都是熟练活了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询