基础设施 · 2026年5月24日 · VirtLab

Cisco Modeling Labs (CML) 实战:从入门到精通

深入介绍 Cisco Modeling Labs 企业级网络仿真平台的功能、架构和使用技巧,帮助企业网络工程师提升实验效率。

Cisco Modeling Labs 界面

Cisco Modeling Labs(CML)是思科官方发布的企业级网络仿真平台,提供高可靠性、高可扩展性的网络实验环境。本文将全面介绍 CML 的使用方法和最佳实践。

CML 概述

CML 是 Cisco Modeling Labs 的缩写,是思科官方企业级网络建模和仿真解决方案。

版本对比

版本节点限制使用场景价格
CML Personal20 节点个人学习免费
CML Lab100 节点小型团队订阅制
CML Enterprise无限制企业部署定制报价

核心优势

  • 官方支持:思科官方产品,技术支持有保障
  • 真实 IOS-XE:运行真实的思科操作系统
  • 图形化界面:直观的拓扑设计和管理
  • REST API:支持自动化和集成

架构解析

系统架构

┌─────────────────────────────────────────────────┐
│              CML Web UI (浏览器)                 │
├─────────────────────────────────────────────────┤
│              CML Controller (控制器)              │
│  ┌─────────┐ ┌─────────┐ ┌─────────────────┐   │
│  │ 节点管理 │ │ 拓扑管理 │ │  实验管理       │   │
│  └─────────┘ └─────────┘ └─────────────────┘   │
├─────────────────────────────────────────────────┤
│           Libvirt/KVM 虚拟化层                   │
├─────────────────────────────────────────────────┤
│           虚拟网络设备(路由器、交换机等)          │
└─────────────────────────────────────────────────┘

设备支持

CML 支持丰富的虚拟设备:

设备类型示例用途
路由器ISR 4000, CSR1000v, IOS-XE路由实验
交换机Catalyst 9000, NX-OS交换实验
防火墙ASA, FTD安全实验
无线AIR-AP, WLC无线实验
其他Linux VM, Server综合实验

安装部署

硬件要求(虚拟机版)

资源最小配置推荐配置
CPU8 核16 核
内存16 GB32 GB
存储200 GB500 GB SSD
网络1 Gbps10 Gbps

安装步骤

  1. 下载 CML 镜像

    • 访问 Cisco Software Central
    • 下载 CML ISO 或 OVA 文件
  2. 导入虚拟机

    # VMware vSphere 导入
    govc import.ova cml-vm-2.4.0.ova
    
    # VirtualBox 导入
    VBoxManage import cml-vm-2.4.0.ova
  3. 初始化配置

    # 访问 Web 界面
    https://<cml-ip-address>
    
    # 默认登录信息
    Username: admin
    Password: admin

实验室创建

创建第一个实验

  1. 登录 CML Web 界面

  2. 创建新实验室

    • 点击 ”+ New Lab”
    • 输入实验室名称
    • 选择拓扑模板(可选)
  3. 添加设备

    • 从左侧面板拖拽设备到画布
    • 双击启动设备 Console

典型实验拓扑

                    ┌─────────┐
                    │   ISP   │
                    └────┬────┘

                    ┌────┴────┐
                    │   GW    │
                    │ Router  │
                    └────┬────┘

           ┌─────────────┴─────────────┐
           │                           │
      ┌────┴────┐                ┌────┴────┐
      │   Core  │                │  Dist   │
      │ Switch  │                │ Switch  │
      └────┬────┘                └────┬────┘
           │                           │
     ┌─────┴─────┐              ┌─────┴─────┐
     │           │              │           │
  ┌──┴──┐    ┌──┴──┐        ┌──┴──┐    ┌──┴──┐
  │ Vlan │    │ Vlan │        │ Vlan │    │ Vlan │
  │  10  │    │  20  │        │  30  │    │  40  │
  └──┬──┘    └──┬──┘        └──┬──┘    └──┬──┘

设备配置示例

核心路由器配置

! 进入全局配置模式
configure terminal

! 配置主机名
hostname GW-Router

! 配置接口
interface GigabitEthernet0/0/0
description WAN Interface
ip address 203.0.113.1 255.255.255.252
no shutdown

interface GigabitEthernet0/0/1
description LAN Interface
ip address 192.168.0.1 255.255.255.0
no shutdown

! 配置 DHCP
ip dhcp pool LAN-POOL
network 192.168.0.0 255.255.255.0
default-router 192.168.0.1
dns-server 8.8.8.8

! 配置 NAT
ip nat inside source list 1 interface GigabitEthernet0/0/0 overload
access-list 1 permit 192.168.0.0 0.0.0.255

! 保存配置
end
write memory

核心交换机配置

configure terminal
hostname Core-SW

! 创建 VLAN
vlan 10
name DATA
vlan 20
name VOICE
vlan 30
name MGMT

! 配置 VLAN 接口
interface Vlan10
ip address 192.168.10.1 255.255.255.0
no shutdown

! 配置端口
interface GigabitEthernet0/0/1
switchport mode trunk
switchport trunk allowed vlan 10,20,30

! 配置 STP
spanning-tree mode rapid-pvst

end
write memory

高级功能

1. 拓扑即代码

CML 支持 YAML 格式的拓扑定义:

# topology.yaml
topology:
  nodes:
    router1:
      type: iosv
      connections:
        - router2:0/0

    router2:
      type: iosv
      connections:
        - router1:0/0
        - router3:0/0

  links:
    - router1:0/0
    - router2:0/0

2. REST API 集成

import requests
import json

# CML API 基本使用
CML_HOST = "https://cml.example.com"
AUTH = ("admin", "password")

def get_labs():
    response = requests.get(
        f"{CML_HOST}/api/v0/labs",
        auth=AUTH,
        verify=False
    )
    return response.json()

def create_node(lab_id, node_type):
    payload = {
        "label": "New Router",
        "node_type": node_type,
        "template": "iosv"
    }
    response = requests.post(
        f"{CML_HOST}/api/v0/labs/{lab_id}/nodes",
        json=payload,
        auth=AUTH
    )
    return response.json()

3. 场景和故障模拟

# 模拟链路故障
def simulate_link_failure(lab_id, link_id):
    payload = {
        "action": "down",
        "link_id": link_id
    }
    response = requests.post(
        f"{CML_HOST}/api/v0/labs/{lab_id}/links/{link_id}",
        json=payload,
        auth=AUTH
    )
    return response.status_code == 200

最佳实践

实验管理

  1. 使用标签组织实验

    标签格式:年份-课程-实验号
    示例:2026-CCNP-001
  2. 配置版本控制

    # 导出配置
    curl -k -u admin:pass https://cml/api/v0/labs/{id}/export
    
    # 备份到 Git
    git add configs/
    git commit -m "Update lab configs"
  3. 定期快照

    • 实验前创建快照
    • 关键步骤保存快照

性能优化

优化项方法效果
内存限制设置合理的 RAM 分配降低资源占用
CPU 亲和性绑定 CPU 核心提高性能
磁盘 I/O使用 SSD 存储加快启动
网络类型使用 virtio提升网络性能

适用场景

CML 适用于以下场景:

场景说明
CCIE/CCNP 备考模拟真实考试环境
企业培训团队网络技能培训
方案验证新方案上线前测试
原型验证网络架构概念验证
故障演练模拟网络故障场景

总结

Cisco Modeling Labs 是企业级网络仿真的首选平台,虽然需要付费授权,但其稳定性、官方支持和丰富的设备支持使其成为专业网络工程师的利器。配合 EVE-NG 和 GNS3 使用,可以构建完整的网络学习和工作环境。

#CML #Cisco #建模 #仿真 #企业网络