使用说明
ContainerLab MCP服务器
此MCP(模型上下文协议)服务器提供了与充当网络客户端的ContainerLab Linux容器交互的工具。它支持实验室环境中网络客户端的网络配置、连接测试和路由管理。 此MCP服务器仅限于在Linux类型的clab节点上发现和自动化任务。
Docker构建
标准构建
docker build . -t clab-mcp-server
使用代理构建(如果在公司代理之后)
docker build . --build-arg HTTP_PROXY=<proxy server> --build-arg HTTPS_PROXY=<proxy server> --build-arg NO_PROXY=<subnets to skip> -t clab-mcp-server
配置
Docker主机配置
MCP服务器需要连接到Docker守护进程来管理ContainerLab容器。您可以通过多种方式配置Docker主机IP地址:
-
环境变量 (推荐用于Docker运行):
export DOCKER_HOST_IP=your.docker.host.ip -
命令行参数 (用于直接执行Python):
python clab_mcp_server.py --docker-host-ip your.docker.host.ip -
默认行为:如果两者都没有指定,则默认为
localhost
可用命令行选项
python clab_mcp_server.py --help
--docker-host-ip:Docker主机IP地址(默认值:localhost,或设置Docker_host_IP环境变量)--docker-port:Docker守护程序端口(默认值:2375)--docker-tls:使用TLS进行Docker连接(默认值:False)--mcp-host:MCP服务器主机(默认值:0.0.0.0)--mcp-port:MCP服务器端口(默认值:8989)
Docker运行
重要提示: 此MCP服务器使用Docker TCP传输连接到CLAB服务器。必须启用CLAB Docker服务才能通过基于Docker TCP的命令进行管理。
基本运行(本地主机上的Docker主机)
docker run -d -p 8989:8989 clab-mcp-server
使用自定义Docker主机IP运行
docker run -d --name clab-mcp-server -p 8989:8989 -e DOCKER_HOST_IP=<docker-host-ip> clab-mcp-server
使用多个环境变量运行
docker run -d -p 8989:8989 \
-e DOCKER_HOST_IP=<docker-host-ip> \
-e DOCKER_PORT=2375 \
--name clab-mcp-server \
clab-mcp-server
端口8989 因为容器内的MCP服务器监听端口8989。端口映射 -p 8989:8989 使服务器可从主机访问。
可用工具
网络发现
- get_cab_linux_nodes -发现并清点所有ContainerLab Linux节点及其网络接口详细信息
接口配置
- set_ip -通过创建VLAN接口和分配IP地址来配置网络连接
- delete_vlan_interface -删除VLAN接口并清理网络配置
债券接口管理
- create_bond_interface -创建用于网络冗余和负载平衡的绑定接口
- delete_bond_接口 -删除绑定接口并将从属接口恢复到其原始状态
接口检查和故障排除
- get_interface_info -检索网络接口的全面配置和状态信息(支持物理、VLAN和绑定接口)
- test_connectivity -使用ping验证容器之间的网络连接
- lldp_neighbor_discovery -发现容器周围的LLDP邻居和网络拓扑
路由配置
- add_static_route -为L3域测试向容器路由表添加静态路由
- check_routes -检索和分析集装箱路由表以进行故障排除
- route_delete -从容器路由表中删除静态路由
工具详细信息
网络发现工具
get_clab_linux_nodes
发现所有正在运行的ContainerLab容器 clab-node-kind 标签设置为“linux”,并检索详细的网络接口信息,包括IP地址、MAC地址和接口状态。
使用案例:
- 网络拓扑发现
- 接口配置验证
- MAC地址学习
- 连接故障排除
界面配置工具
set_ip
创建VLAN接口,并使用可选的网关配置分配IP地址。
参数:
container_name:目标容器名称interface_name:基本接口名称(例如“eth1”)ip_with_mask:带有CIDR符号的IP地址(例如“192.168.1.10/24”)vlan_id:VLAN ID号(1-4094)gateway_ip:可选默认网关IP地址
操作:
- 创建VLAN接口(例如,VLAN 100的eth1.100)
- 打开界面
- 分配IP地址
- 可选配置默认网关
delete_vlan_interface
删除VLAN接口并清理相关配置。
参数:
container_name:目标容器名称interface_name:基本接口名称vlan_id:要删除的VLAN ID
Bond接口管理工具
create_bond_interface
创建绑定网络接口以实现冗余和负载平衡。
参数:
container_name:目标容器名称bond_name:Bond接口名称(例如“bond0”)slave_interfaces:要绑定的接口列表(例如['eth1'、'eth2'])bond_mode:绑定模式(默认:“活动备份”)miimon:MII监控间隔(毫秒)(默认值:100)
支持的绑定模式:
active-backup:一个接口处于活动状态,其他接口处于待机状态balance-rr:循环负载平衡balance-xor:XOR哈希负载平衡broadcast:在所有接口上传输802.3ad:IEEE 802.3ad动态链路聚合(LACP)balance-tlb:自适应传输负载平衡balance-alb:自适应负载平衡
delete_bond_interface
删除绑定接口并将从属接口恢复为独立操作。
参数:
container_name:目标容器名称bond_name:要删除的绑定接口名称slave_interfaces:要还原的从属接口列表
操作:
- 降低债券接口
- 从绑定中删除从属接口
- 删除绑定接口
- 将从属接口恢复为独立接口
接口检查和故障排除工具
get_interface_info
提供对网络接口的全面检查,并为不同接口类型提供专门支持。
参数:
container_name:目标容器名称interface_name:要分析的接口(例如,“eth1”、“bond0”、“eth1.100”)
返回以下详细信息:
- 基本属性: 状态(向上/向下)、MAC地址、MTU
- IP配置: 所有分配的IP地址均采用CIDR表示法
- 债券详细信息 (用于粘合接口):
- 粘合模式和配置参数
- 从属接口状态和活动/备份状态
- MII监控状态和链路状态
- 当前活动的从属标识
- VLAN详细信息 (适用于VLAN接口):
- VLAN ID和父接口
- VLAN特定配置
- 统计数据: RX/TX数据包、字节、错误、丢包
使用案例:
- 配置后验证
set_ip或create_bond_interface - 网络故障排除和诊断
- Bond接口健康监测
- 接口性能分析
test_connectivity
使用ICMP ping测试容器之间的网络可达性。
参数:
container_name:源容器名称destination_ip:要测试的目标IP地址
特征:
- 发送3个ping数据包,超时2秒
- 提供详细的连接诊断
- 包括常见故障场景的故障排除指南
lldp_neighbor_discovery
发现连接到容器网络接口的链路层发现协议(LLDP)邻居,提供对网络拓扑和直接连接设备的可见性。
参数:
container_name:目标容器名称
自动设置(Idempotent):
- 尝试奔跑
lldpcli show neighbors - 如果未找到lldpcli,则自动安装lldpd软件包
- 如果守护进程未运行,则自动启动lldpd守护进程
- 安装完成后检索邻居发现
提供的LLDP信息:
- 邻居设备机箱ID和系统名称
- 连接端口标识符和描述
- 设备功能(路由器、交换机、网桥等)
- 管理IP地址
- VLAN信息
- 系统描述和版本详细信息
退货:
status:“成功”或“错误”neighbors_output:显示邻居信息的原始LLDP输出neighbors_found:布尔值,指示是否发现邻居messages:执行的操作列表(安装、守护进程启动等)lldpd_installed:布尔值,指示此运行期间是否安装了lldpddaemon_started:布尔值,指示在此运行期间是否启动了lldpd守护进程error:如果操作失败,则显示错误消息
使用案例:
- 网络拓扑发现和映射
- 电缆追踪和端口识别
- 验证与网络设备的物理/逻辑连接
- 识别容器连接到哪些交换机端口
- 网络故障排除和验证
- 实验室环境验证
- 网络设备清单和文档
重要提示:
- 完全幂等-可以安全地运行多次而不会出错
- 如果包安装失败,容器可能需要配置代理设置
- 检查
/etc/environment如果发生安装错误,请进行代理配置
路由配置工具
add_static_route
为自定义网络拓扑向容器路由表添加静态路由。
参数:
container_name:目标容器名称destination_network:CIDR表示法中的目标网络gateway_ip:下一跳网关IP地址interface_name:用于路线的接口
使用案例:
- ContainerLab中的L3域测试
- 自定义路由策略
- 多宿主网络配置
- 网络分段和隔离
check_routes
从容器中检索并分析路由表以进行网络故障排除。
参数:
container_name:目标容器名称destination_filter:特定目的地的可选过滤器(例如,“默认”、“192.168.10.0/24”)
退货:
- 结构化路线数据: 解析的路由条目,包括目的地、网关、接口、度量、协议和范围
- 原始输出: 完成
ip route show命令输出 - 路线统计: 找到的路线总数
- 筛选器信息: 应用的目标筛选器详细信息
使用案例:
- VLAN间测试: 验证不同VLAN和子网之间的路由
- 路线验证: 确认添加了静态路由
add_static_route - 连接故障排除: 了解复杂拓扑中的交通流路径
- 网络诊断: 调试路由问题并验证配置
- 拓扑分析: 分析路由路径以优化网络
- 网关验证: 确认默认网关和特定路由配置
route_delete
从容器的路由表中删除静态路由,以便进行清理和重新配置。
参数:
container_name:目标容器名称destination_network:CIDR表示法中的目标网络,用于删除路由gateway_ip:用于路由删除的可选网关IP(如果未指定,则匹配任何网关)interface_name:可选接口名称,用于匹配路由删除(如果未指定,则匹配任何接口)
灵活的删除选项:
- 仅限目的地: 删除到特定目的地的所有路线(
route_delete("container1", "192.168.10.0/24")) - 目的地+网关: 通过特定网关删除路由(
route_delete("container1", "192.168.10.0/24", "10.0.0.1")) - 目的地+接口: 通过特定接口删除路由(
route_delete("container1", "192.168.10.0/24", None, "eth1.100")) - 完整规格: 删除精确路线匹配(
route_delete("container1", "192.168.10.0/24", "10.0.0.1", "eth1.100"))
使用案例:
- 路线清理: 测试后删除过时或不正确的静态路由
- 配置更改: 在添加新路由进行重新配置之前,请先删除旧路由
- 故障排除: 删除导致连接问题的冲突路由
- 网络重置: 通过删除自定义路由恢复默认路由行为
- 实验室管理: 清理不同测试场景之间的路由表
- 错误恢复: 删除添加不正确或导致问题的路由
安全特性
- eth0保护: 所有接口修改工具都可以防止意外更改eth0(管理接口)
- 输入验证: 全面的参数验证和错误处理
- 安全操作: 妥善处理缺失的接口和现有配置
