容器网络管理服务器

ContainerLab MCP服务器提供网络配置、连接测试和路由管理工具,用于管理实验室环境中的网络客户端容器。

  • by baijuw
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 baijuw/clab-mcp-server

使用说明

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地址:

  1. 环境变量 (推荐用于Docker运行):

    export DOCKER_HOST_IP=your.docker.host.ip
    
  2. 命令行参数 (用于直接执行Python):

    python clab_mcp_server.py --docker-host-ip your.docker.host.ip
    
  3. 默认行为:如果两者都没有指定,则默认为 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地址

操作:

  1. 创建VLAN接口(例如,VLAN 100的eth1.100)
  2. 打开界面
  3. 分配IP地址
  4. 可选配置默认网关

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:要还原的从属接口列表

操作:

  1. 降低债券接口
  2. 从绑定中删除从属接口
  3. 删除绑定接口
  4. 将从属接口恢复为独立接口

接口检查和故障排除工具

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):

  1. 尝试奔跑 lldpcli show neighbors
  2. 如果未找到lldpcli,则自动安装lldpd软件包
  3. 如果守护进程未运行,则自动启动lldpd守护进程
  4. 安装完成后检索邻居发现

提供的LLDP信息:

  • 邻居设备机箱ID和系统名称
  • 连接端口标识符和描述
  • 设备功能(路由器、交换机、网桥等)
  • 管理IP地址
  • VLAN信息
  • 系统描述和版本详细信息

退货:

  • status:“成功”或“错误”
  • neighbors_output:显示邻居信息的原始LLDP输出
  • neighbors_found:布尔值,指示是否发现邻居
  • messages:执行的操作列表(安装、守护进程启动等)
  • lldpd_installed:布尔值,指示此运行期间是否安装了lldpd
  • daemon_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(管理接口)
  • 输入验证: 全面的参数验证和错误处理
  • 安全操作: 妥善处理缺失的接口和现有配置