使用Claude AI、MCP服务器和SONiC的网络自动化
使用VXLAN EVPN配置对运行SONiC的骨干和叶子拓扑进行自动化网络管理。该项目利用Claude AI和模型上下文协议(MCP)通过GNS3提供智能的会话网络自动化。
🚀 概述
该项目结合了 GNS3 随着 博通SONiC路由器, 克劳德·艾,以及 模型上下文协议(MCP) 实现智能网络自动化。查询您的网络拓扑,执行show命令,并通过自然语言推送配置——所有这些都由Claude提供支持。
主要特点
- 人工智能驱动的自动化:使用Claude AI智能查询和管理网络配置
- MCP服务器集成:通过MCP与Claude无缝集成,实现实时网络操作
- 脊椎叶拓扑:具有自动管理功能的预配置多路由器架构
- BGP基础配置:用于可扩展网络设计的基于BGP的路由
- VXLAN EVPN覆盖:支持第2层和第3层VNI的自动覆盖网络
- 基于SSH的设备管理:通过Netmiko直接连接到所有网络设备
- Alpine Linux端点:具有轻量级服务器端点的多VLAN支持
📋 先决条件
- GNS3 带有Broadcom SONiC路由器映像
- Python 3.8 或更高
- API克劳德 具有MCP服务器功能的访问
- Broadcom SONiC路由器图像 用于GNS3部署
- SSH访问 为网络设备配置
- Alpine Linux映像 用于GNS3中的端点部署
⚒️ 项目技术栈
- Claude AI(通过代码解释器)
- MCP服务器(FastMCP)
- GNS3(网络模拟器)
- Python 3.x
- Netmiko(网络设备连接)
- 博通SONiC操作系统
- 阿尔卑斯 Linux
- VS Code
🚀 入门指南
- 部署GNS3拓扑 带有SONiC图像
- 创建库存 包含路由器详细信息的JSON文件
- 配置SONiC设备 使用VXLAN EVPN和BGP
- 设置MCP服务器 使用提供的Python脚本
- 注册Claude 使用MCP add命令
- 开始自动化 通过自然语言查询!
🛠️ 项目步骤
1.️⃣ 库存配置
创建一个JSON清单文件,其中包含您的脊椎和叶子路由器及其各自的类型。
注: Netmiko识别两种SONiC类型:
- 戴尔SONiC:适用于Broadcom SONiC;直接连接到CLI界面
- 边缘SONiC:使用社区SONiC;连接到Linux接口
{
"Spine": { "host": "192.168.108.20", "device_type": "dell_sonic" },
"Leaf1": { "host": "192.168.108.30", "device_type": "dell_sonic" },
"Leaf2": { "host": "192.168.108.10", "device_type": "dell_sonic" }
}2.️⃣ 网络拓扑
拓扑结构由以下部分组成:
- 1台Broadcom SONiC骨干路由器
- 2个Broadcom SONiC叶子路由器
- 4台Alpine Linux服务器 (每个叶子路由器2个,在单独的VLAN中)
3.️⃣ SONiC配置
使用VXLAN EVPN和BGP底层配置骨干和叶子路由器:
- VLAN 10和11:第2层VNI(L2覆盖)
- VLAN 2000:第3层VNI(L3覆盖层)
- 边界网关协议:底层路由协议
完整的配置详细信息可在 sonic_vxlan.txt 文件。
4.️⃣ 将MCP服务器连接到Claude
步骤1:注册MCP服务器
claude mcp add mcpsonic_automation -s user -- "" "
"步骤2:配置MCP Python脚本
这 mcpserversonic.py 该脚本将Claude AI连接到GNS3拓扑。它包括:
- FastMCP集成:用于无缝MCP协议通信
run_show()函数:执行show命令以查询网络状态push_config()函数:将配置推送到设备
脚本使用 Netmiko 使用SSH连接到所有路由器。SONiC路由器默认启用SSH。
# Example structure:
from fastmcp import FastMCP
mcp = FastMCP("mcpsonic_automation")
@mcp.tool()
async def run_show(device: str, command: str) -> str:
"""Execute show commands on network devices"""
# Implementation using Netmiko
@mcp.tool()
async def push_config(device: str, commands: list) -> str:
"""Push configurations to network devices"""
# Implementation using Netmiko5.️⃣ 测试MCP服务器
示例查询1:检查Spine的连接和版本
将此命令发送给Claude:
Check if you can connect to Spine Router?克劳德将:
- 通过MCP服务器连接到拓扑
- 执行
show version以及相关命令 - 返回详细结果
示例查询2:检查VXLAN隧道状态
将此命令发送给Claude:
Can you check the VXLAN tunnel between Leaf1 and Leaf2 and the VRF configurations?克劳德将:
- 通过MCP服务器连接到拓扑
- 执行
show vxlan tunnel以及相关命令 - 返回详细结果
示例查询3:更新设备配置
将此命令发送给Claude:
Add description "future use" to interface Ethernet40 on Leaf2克劳德将:
- 使用
push_config()函数 - 连接到Leaf2
- 应用配置更改
- 确认完成
