把 Cisco IOS 跑进容器——用 IOL + vrnetlab 做一次端到端的 Containerlab 实验
| 📌 导读前七篇我们把 Containerlab 的基础能力(部署、cRPD、自动加载配置、抓包、Web 拓扑图、edgeshark)逐个拆开讲了。本篇作为系列终章,用 Cisco IOL 跑一次端到端实验——把 vrnetlab 构建、YAML 拓扑、Containerlab 部署、Web 拓扑图、edgeshark 抓包全部串起来。IOL 是 Cisco IOS 的 Linux 二进制版本,无需虚拟机就能在容器里跑,资源占用比 cRPD/Juniper vJunos 还低,特别适合做多节点、大规模组网实验。 |
📋 本文目录
|
一、背景:vrnetlab 与 cisco_iol
vrnetlab是一个将传统虚拟机(VM)打包进容器、使其能像容器一样运行的项目。Containerlab 通过集成 vrnetlab,实现了在同一个拓扑文件里定义和启动基于 VM 的网络操作系统。
cisco_iol是 Cisco IOS / IOS-XE 的 Linux 二进制版本,无需虚拟机即可运行。在 Containerlab 中,它被识别为cisco_iol类型,本质是把 IOL 二进制文件打包进 Docker 容器。
⚠️ 重要提示必须使用 Containerlab 官方指定的srl-labs/vrnetlab分支来构建镜像,而不是原版 vrnetlab 项目——分支里针对 Containerlab 做了适配。 |
二、准备工作:获取 IOL 镜像文件
IOL 镜像不是随便下载就能用的,需要从Cisco CML(Cisco Modeling Labs)的参考平台 .iso 文件中提取 IOL 二进制文件,文件通常以iol或ioll2为前缀:
▸IOL:用作 L3 路由器
▸IOL-L2:用作虚拟的 IOS-XE 交换机
| 💡 提示Cisco CML 是 Cisco 官方的虚拟化实验平台,订阅用户可以下载它的 .iso 镜像,从镜像里提取 IOL 二进制文件作为本实验的输入。 |
三、用 vrnetlab 构建 Docker 镜像
拿到 IOL 二进制后,下一步是把它打包成 Docker 镜像——这正是 vrnetlab 的工作。
① 克隆 vrnetlab 仓库
[root@jmz ~]# git clone https://github.com/srl-labs/vrnetlab.git
② 放置并重命名镜像文件
将 IOL 二进制文件复制到vrnetlab/cisco/iol目录下,查看 README.md 文件,按要求用如下格式重命名(版本号以实际文件为准):
▸ L3 镜像:cisco_iol-x.y.z.bin
▸ L2 镜像:cisco_iol-L2-x.y.z.bin
[root@jmz iol]# mv x86_64_crb_linux_l2-adventerprisek9-ms.iol cisco_iol-L2-17.16.01.bin [root@jmz iol]# mv x86_64_crb_linux-adventerprisek9-ms.iol cisco_iol-17.16.01.bin
③ 执行构建
进入vrnetlab/cisco/iol目录,运行 make 命令:
[root@jmz iol]# make docker-image
④ 验证镜像
使用docker images命令,你应该能看到新生成的镜像,例如vrnetlab/cisco_iol:17.16.01和vrnetlab/cisco_iol:L2-17.16.01。
四、编写并启动 Containerlab 拓扑
镜像有了,下一步就是写拓扑 YAML、deploy 起来。
① 编写拓扑文件(cisco.yaml)
参考 vrnetlabcisco/iol/README.md文件来定义网络拓扑。
② 关键参数说明
▸kind:必须设置为cisco_iol
▸type:对于 L2 镜像,需要显式设置为L2
▸links:定义节点间的物理连接,接口命名遵循Ethernet0/X(或e0/X)格式
⚠️ 注意IOL 的接口以4 个为一组。例如e0/3、e1/0、e1/1分别对应第四、第五、第六个数据接口——这和物理路由器编号习惯不一样,写拓扑时容易踩坑。 |
③ 部署实验
在拓扑文件所在目录下运行:
[root@jmz ciscolab]# containerlab deploy -t cisco.yaml
五、访问与配置
部署完,几条关键信息:
▸默认凭证:IOL 节点的默认用户名和密码均为admin
▸管理接口:Ethernet0/0是管理接口,被放置在独立的管理 VRF 中,其 IP 由 Containerlab 自动分配
▸数据接口:拓扑中定义的数据接口(如e0/1)需要你手动在 CLI 中配置 IP 地址才能转发流量
登录到设备:
[root@jmz ciscolab]# ssh admin@clab-cisco-iol-lab-router1
六、完整工作流回顾:Web 拓扑 + edgeshark 抓包
到这一步 IOL 已经跑起来了——但 Containerlab 真正的威力,是把以下能力一站式集成:
① 看 Web 拓扑图
用上一篇学的containerlab graph命令,浏览器直接看 IOL 节点的拓扑视图,能拖能点:
② 集成 edgeshark 抓包
在 Edgeshark Web 界面上单击 Wireshark鲨鱼鳍图标,就能调用本地 Wireshark 抓取 IOL 节点接口的实时流量——前一篇 edgeshark 集成的全部能力直接复用。
💡 一句话记忆「vrnetlab」做打包,「cisco_iol」是载体;本篇 = 系列前 7 篇能力的大综合。Web 拓扑 + edgeshark 在 IOL 上照常工作,证明 Containerlab 生态的一致性。 |
七、写在最后(系列完结)
Containerlab 实战系列从「介绍」写到「Cisco IOL」,共8 篇,基本覆盖了一个网络工程师用 Containerlab 调试环境的全流程:
▸基础:介绍、部署
▸实验:Juniper cRPD、Cisco IOL
▸配置:自动加载配置
▸调试:网络抓包、Web 拓扑图、edgeshark 集成
整个写下来最大的感受是:Containerlab 的生态一致性做得很好——不管你是用 cRPD、Cisco IOL 还是别的网络 OS 镜像,所有容器都跑在统一的拓扑描述、统一的 deploy 流程、统一的 Web 视图、统一的抓包接口下。
学习 Containerlab 的本质,是学一种「网络实验的统一抽象」——把厂商差异藏在 kind/type 后面,把通用能力(拖拓扑、点抓包、自动配置)暴露给工程师。
感谢一路读到这里 ❤️ 如果这篇系列对你有帮助,欢迎点赞 ·· 转发支持。
📮 如读者朋友有希望拆解的其他 Containerlab 实战案例,欢迎评论区留言或私信,如更多案例将继续更新本系列👇
— Containerlab 实战系列 · 之八(终章)· Z 的网络知多少 —