迁移到PNET以及相关问题解决
背景
EVE NG的订阅费又涨了,记得2021年还在犹豫要不要在黑五下单1年的pro版本(如果没记错,应该是600多),现在已经1000多了,我就很无语……1000多为啥不买思科的VIRL……,对于我们这种个人付费的用户来说,着实有些贵了。之前朋友一直安利PNET,这回正好尝试下。
区别
其实我到现在也没弄明白PNET和EVE NG的关系,对于使用感受来说,PNET ≈ EVE NG Pro + 一些新功能(比如支持不关闭仿真设备直接变更连线,类似VIRL2),但PNET又不具备一些EVE的高级功能,如集群部署。可是为什么EVE 可以允许PNET免费开放这么多pro的功能?暂时就没有追述原因了;
EVE NG Community的使用问题
- 我的使用环境是隔离的Lab环境,无法连接外网,访问EVE NG Comunity的GUI,感觉会非常慢,开始我一直觉得是跳板机性能不行,但后来发现不是,就像有些进程一直在尝试联网但导致了超时,从而影响了体验;
- 现在新增仿真设备时,图标总是启动状态,导致无法编辑,必须连续启动好几个,找没有启动的图标……这个真的很烦人,跟朋友讨论后,应该是一个EVE 的Bug……
- EVE NG有很多好用的功能是不包含在Community中的,比如配置保存(有些仿真设备是不支持的)等,这些其实挺影响使用的;
PNET的使用感受
- 明确的offline mode和online模式,让我在离线状态下使用时没有EVE NG那种很慢的感觉,好评;
- 对于上面谈到的Bug,据说PNET应该已经修复了;
- 默认支持配置导出导入,还是免费~;
虽然PNET的使用体验要比EVE NG Community好很多!但毕竟PNET是免费的,所以在支持力度上基本等于无,文档也要比EVE少很多(但EVE的文档可以适用PNET),真遇到问题,只能靠自己解决,这样给使用者提出了一定的使用门槛。不过在国内,有相关的论坛,小问题也是可以解决的:https://www.pnetlab.cn;
安装部署
我最开始是在Host上部署ESXI,在ESXI上部署PNET,发现有很多问题,比如xrv9k起不来,ne40e启动也有异常,跟EVE NG类似,应该就是嵌套虚拟化的锅,所以还是老老实实裸机部署PNET。对于裸机部署, 需要分成两个部分:
- 安装ubuntu 18.04;
- 在线安装PNET;
所以安装环境必须具备联网功能,这里直接参考官网文档即可:https://pnetlab.com/pages/documentation?slug=install-bare-metal ;
安装好后使用GUI登录会选择模式(Online/Offline),这个模式后面也可以改的,另外模式也可以使用命令行进行切换(防止改成Online后又连不到网上,导致被锁在里面了),具体看此link:https://pnetlab.com/pages/documentation?slug=system-mode-in-pnetlab;
$ mode default online|offline # change default mode
$ mode reset offline # reset offline password
$ mode reset all # reset system mode to original
数据迁移
在安装好的PNET服务器上使用下面命令来进行数据迁移(从EVE NG -> PNET,另外注意:如果PNET已经更新到比较新的版本,那么本地目录就会发生一些变化,比如原来PNET不区分Intel还是AMD,新版本有了区分,同EVE NG):
scp -r [email protected]:/opt/unetlab/addons/qemu/ /opt/unetlab/addons/qemu/
scp [email protected]:/opt/unetlab/html/templates/intel/huaweice12800.yml /opt/unetlab/html/templates/
scp [email protected]:/opt/unetlab/html/templates/intel/huaweine40e.yml /opt/unetlab/html/templates/
scp [email protected]:/opt/unetlab/html/templates/intel/h3c* /opt/unetlab/html/templates/
scp [email protected]:/opt/unetlab/html/images/icons/ne40e.png /opt/unetlab/html/images/icons/
scp [email protected]:/opt/unetlab/html/images/icons/ce.png /opt/unetlab/html/images/icons/
迁移完数据后,进入PNET的GUI页面 – > System -> System Seting,选择“Fix Permission”即可,这个要比EVE NG好用多了。
相关问题及解决
NE40E 在html的terminal中无法使用退格键
这个问题主要针对NE40E,在EVE NG上,通过CRT访问有同样的问题,可以通过更改Telnet Client的模式解决此问题,详细可以参考之前的文章:http://www.zhaocs.info/refer-to-telnet-mode.html;切到PNET后,想尝试使用HTML模式下自带的Terminal,发现同样有无法退格的问题,由于PNET的Terminal使用的是Guacamole,不知道如何更改Telnet模式……
在pnetlab.cn上得到了回应,这种情况下可以使用快捷键:Alt+Shift+H,验证后确实可行;
NE40E 无法正常重启
NE40E第一次启动过程都很顺利,但如果通过reboot或者PNET控制关闭重启,那么设备就无法正常启动,并报下面错误:
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
ERROR: ld.so: object 'libpreload.so' from /etc/ld.so.preload cannot be preloaded (wrong ELF class: ELFCLASS32):.
create /opt/svrp/startlog/svrp_start_0302_14:29:57.log
chmod: cannot access 鈥mnt/tmpfs/*鈥 No such file or directory
chmod: cannot access 鈥dev/shm/*鈥 No such file or directory
[14:29:57] Step01: CHK-USERRIGHT .........................Finish
[14:29:57] Step02: CHK-OS-KERNEL .........................Finish
[14:29:57] Step03: CHK-IOMLIB ............................Finish
[14:29:57] Step04: SET-G-ENV .............................Finish
CC_PKG_NAME = VRPV800R011C00SPC607B607D0213_ne40e.cc
[14:29:57] Step05: CHK-SYSTYPE ...........................Finish
[14:29:57] Step06: CHK-MULTICAST .........................Error
[14:29:57] Step07: START-ROUTER ..........................Error
[main]: the script exit, reason=246.
[main]: analyse svrp start up log file: /opt/svrp/startlog/svrp_start_0302_14:29:57.log
2023/03/02 14:30:02 socat[1282] E connect(5, AF=2 127.0.0.1:20001, 16): Connection refused
root@debian:/opt/svrp/startlog# more svrp_start_0302_14\:29\:57.log
0[2023-03-02 14:29:57] [info ] 0: checking systime
[2023-03-02 14:29:57] [info ] 0: Init_path_type enter SVRP_ROOT_RELATIVE_PATH=
[2023-03-02 14:29:57] [info ] 0: Init_path_type end SVRP_ROOT_RELATIVE_PATH=../../../
[2023-03-02 14:29:57] Step01: CHK-USERRIGHT ..............Finish
[2023-03-02 14:29:57] [warn ] chk_OSversion: OS kernel version is not recommended.
[2023-03-02 14:29:57] Step02: CHK-OS-KERNEL ..............Finish
[2023-03-02 14:29:57] Step03: CHK-IOMLIB .................Finish
[2023-03-02 14:29:57] [info ] set-env-mtu: export env:global MAX_MTU_RAW=1500
[2023-03-02 14:29:57] [info ] set-env-mtu: export env:global MAX_MTU_UDP=9600
[2023-03-02 14:29:57] [info ] set_mac_offset: set env:global netAddr='', ipAddr= ''
[2023-03-02 14:29:57] [info ] set_mac_offset: set env:global g_offset='104.200'
[2023-03-02 14:29:57] Step04: SET-G-ENV ..................Finish
[2023-03-02 14:29:57] [info ] startRouterX: board path=router1
[2023-03-02 14:29:57] [info ] parse_systype: export env:global systype=1
[2023-03-02 14:29:57] [info ] parse_systype: export env:global systype=1
[2023-03-02 14:29:57] [info ] parse_systype: systype info, FlexcardmodeId=!
[2023-03-02 14:29:57] [info ] parse_systype: export env:global systype=
[2023-03-02 14:29:57] [info ] parse_systype: export env:global DEV_COLLECT_ENABLE=
[2023-03-02 14:29:57] [info ] parse_systype: export env:global systype=1
[2023-03-02 14:29:57] [info ] parse_productType: export env:global PRODUCTTYPE=10
[2023-03-02 14:29:57] Step05: CHK-SYSTYPE ................Finish
[2023-03-02 14:29:57] [info ] createMultiCast: export env: global Local_Ip=127.0.0.1
[2023-03-02 14:29:57] [info ] createMultiCast: set env: global mcip=225.1.0.1
[2023-03-02 14:29:57] [info ] createMultiCast: export env: global MULTICAST_DOMAIN=225.1.0.1
[2023-03-02 14:29:57] [warn ] addMutiCastRoute: route add 225.1.0.1 dev eth1 failed, reason code=7
[2023-03-02 14:29:57] Step06: CHK-MULTICAST ..............Error
[2023-03-02 14:29:57] Step07: START-ROUTER ...............Error
[main]: the script exit, reason=246.
[main]: analyse svrp start up log file: /opt/svrp/startlog/svrp_start_0302_14:29:57.log
根据告警,看上去跟组播路由无法添加相关,为了找到原因,我分别对比了EVE NG和PNET前后两次的Qemu启动变量,发现PNET每次启动Qemu Image都会变更接口Mac地址,这可能导致NE40E第二次启动后找不到原有MAC地址,因此协议启动失败从而导致设备启动失败;对比EVE NG则是固定的,下面是PNET的两次启动参数对比:
root@pnetlab:~# ps -ef|grep NE40E
root 25443 1 58 02:43 ? 00:01:41 /opt/qemu-2.12.0/bin/qemu-system-x86_64 -device e1000,netdev=net0,mac=50:50:4f:00:05:00
root 25508 1 0 02:43 ? 00:00:00 /opt/unetlab/wrappers/qemu_wrapper_telnet -P 30005 -t NE40E -- nc -U /opt/unetlab/tmp/1/
root 25510 25508 0 02:43 ? 00:00:00 /opt/unetlab/wrappers/qemu_wrapper_telnet -P 30005 -t NE40E -- nc -U /opt/unetlab/tmp/1/
root 26988 25863 0 02:46 pts/1 00:00:00 grep --color=auto NE40E
root@pnetlab:~# ps -ef|grep NE40E
root 28822 1 15 02:47 ? 00:00:20 /opt/qemu-2.12.0/bin/qemu-system-x86_64 -device e1000,netdev=net0,mac=50:6c:65:00:05:00
root 28845 1 0 02:47 ? 00:00:00 /opt/unetlab/wrappers/qemu_wrapper_telnet -P 30005 -t NE40E -- nc -U /opt/unetlab/tmp/1
root 28847 28845 0 02:47 ? 00:00:00 /opt/unetlab/wrappers/qemu_wrapper_telnet -P 30005 -t NE40E -- nc -U /opt/unetlab/tmp/1
root 30013 25863 0 02:49 pts/1 00:00:00 grep --color=auto NE40E
发现问题后,就可以尝试解决了。经过查找,发现EVE NG有一个指定First mac的功能,通过这个指定后,其他的mac都会从这个mac地址开始延续分配,只是每次都要编辑自定义的mac有些繁琐……不过后来才发现,PNET新版本已经fix了这个问题,用的方法也是一样的,只是做到系统里面了,每次增加新设备,First Mac都会自动填充:
Fix random generated mac address for nodes <<< 5.2.7
PNET每次更新小版本后,不会自动迭代到主版本中(也许要等到一定迭代后再集成),所以即使你是新下在的PNET安装包,它也是老版本(目前是4.2.10),需要手动更新到5.3.11,更新方法可以参考:https://pnetlab.com/pages/documentation?slug=how-to-upgrade-pnetlab,虽然上面说可以Offline更新,但在更新5.3.11时,仍然需要联公网……
NE40E 频繁报 “exception Emask”
目前在使用PNET(5.3.11)时,发现所有NE40E的仿真设备均会报下面告警,然后就会发现有的设备自动关闭并跳到Kernel环境,如NE40E的系统崩溃后直接跳到 root@debian:/opt/svrp# ,重启才能临时恢复,然后再次循环:
[~router]
[~router][70854.050036] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[70854.051598] ata1.00: failed command: FLUSH CACHE
[70854.052599] ata1.00: cmd e7/00:00:00:00:00/00:00:00:00:00/a0 tag 18
[70854.052599] res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[70854.055276] ata1.00: status: { DRDY }
使用Google查找后发现不是硬盘问题,就是硬盘驱动问题,还有的跟Kernel版本相关,那我需要怎么处理?要更换Host的Kernel么?还是更新驱动?毕竟出问题的是Qemu的仿真设备,不是物理设备,所以需要把注意力放到Qemu上,跟Kernel相关,那是不是跟Qemu版本相关?之前在嵌套虚拟化(ESXI + PNET)的场景中使用Qemu 4.1.0启动NE40E会直接失败,现在试试?!没想到更改4.1.0后,启动非常顺利,而且硬盘的告警也彻底消失了!真是意外惊喜~
PNET/EVE NG如何集成抓包
在EVE NG环境中,要实现抓包需要使用sshdump,详细看我之前的文章:http://www.zhaocs.info/install-eve-ng-in-esxi.html#ftoc-heading-14;其实EVE NG有一些小工具,可以直接集成到Native Console模式(如果需要使用HTML Console模式,那么需要在GUI中的Device内在线安装wireshark docker才可以),当选择要抓包的link后会自动调用程序,程序自动调用sshdump以及自动填充相应的参数,这样大大简化了抓包的操作流程,只是之前没有部署这些小工具。此次PNET部署后,EVE NG的小工具同样适用,小工具可以从这里下载:https://pnetlab.com/pages/documentation?slug=how-to-console-to-devices;具体方法可以看这里:http://www.vietstocknews.com/pages/documentation?slug=fix-the-wireshark-default-console-error;也可以参考这个:https://zhuanlan.zhihu.com/p/326426365;