只要5秒?AI画出整个公司网络!这不再是科幻!

基于MCP协议的AIOps实践:大语言模型与FortiGate防火墙的深度整合

随着大语言模型(LLM)在各个领域的渗透,将其强大的认知与推理能力应用于传统的网络运维(NetOps)领域,即 AIOps,已成为业界探索的前沿方向。

本文将提供一份详尽的技术实践报告,记录如何利用模型上下文协议(Model Context Protocol, MCP),将本地部署的 AI 模型(以 O1-mini 为例)与一台 FortiGate 防火墙通过 SSH 进行整合,从而实现从自然语言指令到精确网络操作的端到端自动化。

只要5秒?AI画出整个公司网络!这不再是科幻!

告别逐行敲打show命令与手动绘图的低效时代。现在,只需一句自然语言指令,大模型便能深入设备,将错综复杂的网络配置瞬间转化为一张清晰直观的可视化拓扑图。

下图,便是AI的杰作。请看它如何一眼看穿我们的网络世界。

防火墙下的网络拓扑图

图注: 此拓扑图由 AI 分析 FortiGate 的接口配置、路由表和防火墙策略后自动生成。

目录

  1. MCP协议:连接AI智能与物理世界的桥梁
  2. MCP生态资源
  3. SSH MCP服务器部署
  4. 提示词工程与模型调优
  5. 成果展示

1. MCP协议:连接AI智能与物理世界的桥梁

模型上下文协议(MCP)是一种为解决大语言模型与外部世界交互而设计的开放标准。其核心价值在于定义了一套统一的规范,使得 AI 模型能够发现、理解并调用外部的”工具”(Tools)。这些工具可以是任何形式的 API、本地脚本或硬件接口。

在网络运维场景下,MCP 的作用尤为关键:

  • 指令解析: 将运维人员的自然语言需求(如”检查内网到外网的策略”)转换为结构化的工具调用请求。
  • 任务执行: 触发本地的 MCP 服务器执行具体操作(如通过 SSH 连接防火墙并运行命令)。
  • 结果反馈: 读取工具返回的原始 CLI 输出,并将其传递给 AI 模型,供其分析、总结并以人类可读的形式呈现。

MCP 协议生态的成熟,是推动 AIOps 从概念走向实践的关键一步,它为实现真正智能的、可交互的网络自动化提供了基础。

2. MCP生态资源

在深入实践之前,了解当前 MCP 的生态系统有助于发现更多可能性。以下资源提供了丰富的工具和平台:

  • MCP Hub (higress.ai) - 一个社区驱动的 MCP 工具注册中心。
  • MCP.so - 提供 MCP 相关协议文档和工具示例。
  • GitHub - 在 GitHub 上通过 mcp 标签可以找到大量相关的开源项目和工具。

3. SSH MCP服务器部署:实践ssh-mcp-server

本次实践,我选用了一个提供通用 SSH 控制能力的开源 MCP 服务器项目:vilasone455/ssh-mcp-server。该项目旨在使 LLM 能够通过 SSH 安全地执行 Shell 命令。尽管其 README 提及的是 Linux 和 Windows 系统,但其底层 SSH 协议的通用性使其完全适用于 FortiGate 防火墙等网络设备。

3.1 部署安装过程中的挑战与解决

按照项目 README 的指引,我开始了标准的安装流程:

1
2
3
4
5
6
7
8
9
# 克隆项目仓库
git clone https://github.com/vilasone455/ssh-mcp-server.git
cd ssh-mcp-server

# 安装项目依赖
npm install

# 构建项目
npm run build

然而,在执行 npm run build 时,我遇到了一个编译错误:

1
2
src/index.ts:422:19 - error TS2339: Property 'trim' does not exist on type 'unknown'.
422 if (!command?.trim()) throw new Error("Command cannot be empty.");

问题分析:这是一个 TypeScript 编译时错误,编译器无法确认 command 变量的类型是字符串,因此不允许调用 trim() 方法。

解决方案:我通过在代码中添加一个类型断言,明确告诉编译器 command 是一个字符串。

操作步骤

  1. 用文本编辑器打开 C:\xxx\xxx\ssh-mcp-server\src\index.ts 文件
  2. 定位到第 422 行
  3. 将原代码 if (!command?.trim()) throw new Error("Command cannot be empty.");
  4. 修改为 if (!(command as string)?.trim()) throw new Error("Command cannot be empty.");
  5. 保存文件

修复此问题后,再次执行 npm run build,项目成功编译,生成了 dist 目录。

3.2 配置 machines.json:定义你的防火墙

ssh-mcp-server 通过 machines.json 文件来管理所有可连接的设备信息。我们需要创建这个文件并填入 FortiGate 防火墙的连接凭据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"machine_id": "mypc",
"label": "My FortiGate Firewall",
"os": "fortios",
"source": "network-segment",
"ssh": {
"host": "192.168.x.x",
"port": 22,
"username": "your_fortigate_username",
"password": "your_fortigate_password"
}
}
]
  • machine_id: 这是一个唯一的字符串,作为 AI 识别设备的”代号”。例如 Fortigate
  • host: FortiGate 防火墙的 IP 地址
  • username: 登录 FortiGate 的 SSH 用户名
  • password: 登录密码

3.3 在 Cherry Studio 中注册 MCP 服务器

最后一步是将 ssh-mcp-server 注册到 Cherry Studio,使其能够被 AI 模型调用。

配置参数

  • 名称 (Name): ssh-mcp-server
  • 类型 (Type): 标准输入输出 (stdio)
  • 命令 (Command): node
  • 参数 (Arguments): C:/xxx/xxx/ssh-mcp-server/dist/index.js
  • 环境变量 (Environment Variables): MACHINES_PATH=C:/xxx/xxx/ssh-mcp-server/machines.json
  • 超时 (Timeout): 180 (秒)

![ssh mcp部署](/images/ssh mcp部署.png)

4. 提示词工程与模型调优:铸就你的AI防火墙专家

工具部署成功只是开始。如果没有经过精心设计的提示词和严格的参数控制,大语言模型在专业领域的表现往往是不可靠甚至危险的。在本次实践的初期,我们尝试使用通用提示词,结果发现 AI 的行为非常不稳定,时常误解指令,甚至在面对不确定的情况时,会“创造”出虚假的配置信息,这在生产环境中是绝对无法接受的。

正是通过下面一系列精细化的提示词工程与模型参数调优,我们才成功地将一个“充满想象力”的通用模型,改造为了一个“严谨、精确、可靠”的AI防火墙专家。

4.1 模型选择与参数设置

我选用 O1-mini 模型,并对其参数进行了关键调整:

参数 设置值 作用
模型温度 (Temperature) 0 将模型的创造性降至最低,强制其生成最确定、最符合事实的回答
Top-p 0.05 收窄模型词汇选择范围,确保回答的高度一致性和精确性
上下文数 (Context Length) 15 确保 AI 在复杂场景下不会”失忆”,能记住之前的命令和结果

AI模型设置

将“模型温度”与“Top-p”设置为极低值,是抑制模型“幻觉”现象的关键所在。 这种配置强制模型在生成回答时,几乎完全依赖于从工具(即防火墙CLI)返回的真实上下文,而不是基于其内部知识库进行创造性联想。如果AI在防火墙上没有查询到信息,它会如实报告“未找到”,而不会为了“完成任务”而编造一个看似合理的答案。这确保了所有输出的高度事实性和可靠性。

4.2 系统级基础提示词

为 AI 设定一个明确、专业的行为框架至关重要。我编写了一份系统级的”基础提示词”,作为每次对话的”宪法”。

AI提示词设置

注意:提示词中需要提醒大模型你拥有只读权限,无法修改实际内容,防止对防火墙内容进行破坏。本连接目前只推荐用来获取信息与分析。

4.3 应对长输出:分段扫描与处理策略

在与网络设备交互时,一个常见的挑战是处理长命令输出,例如 show full-configurationget router info routing-table all。这类命令的返回内容往往会因为终端屏幕的限制而被分页,显示 --More-- 提示符,等待用户输入(如空格键)才能继续显示。

如果让 AI 一次性拉取全部内容,不仅容易导致超时,还可能因为缓冲区溢出而使整个任务失败。为了解决这个问题,我们设计了一套分段扫描策略

  1. 识别分页符:在提示词中明确指示 AI,当它在命令输出的末尾看到 --More-- 标志时,应暂停执行。
  2. 分块处理:AI 会先将当前收到的部分数据进行分析和整理。
  3. 发送继续指令:处理完当前数据块后,AI 会主动发起一个新的工具调用,其命令就是一个“发送空指令”(等效于敲击空格键),以获取下一页的内容。
  4. 循环直至结束:重复步骤1-3,直到命令输出不再出现 --More-- 标志,代表所有内容已获取完毕。

通过这种“走走停停”的分段处理方式,AI 能够稳定、可靠地处理任意长度的配置信息,避免了因单次数据量过大而导致的程序崩溃,大大增强了方案的稳定性。

5. 成果展示:AI驱动的FortiGate防火墙管理

经过上述所有配置和调优,我的 AI 助手已经能够稳定、准确地执行任务。以下是一些真实的交互案例:

5.1 基础信息获取与命令执行验证

我的提问:

“好的,我们开始。请在 Fortigate 上执行 get system status 命令,让我看看防火墙的系统信息。”

AI 执行与返回:
AI 成功连接并执行命令。尽管首次连接尝试中出现了”无法找到连接 ID”的短暂错误,但 AI 随即进行了自我修正,成功创建了连接并执行了命令。

查看防火墙基础信息1

AI 返回了防火墙的型号、固件版本、序列号、正常运行时间等关键信息,并进行了专业的结构化总结与分析。

防火墙信息原始输出
防火墙信息的结构化总结
分析与建议

5.2 精确的地址对象查询与专业分析

任务: 查询地址对象 wz-office 的详细信息。

我的提问:

“请在 Fortigate 上,精确地查询并显示地址对象 wz-office 的详细配置。不要使用 grep,直接查询这个对象。”

AI 执行与返回:
AI 成功执行 show firewall address wz-office,返回了与我手动查询完全一致的真实数据。更重要的是,它对结果进行了专业解读,包括子网换算和实际 IP 范围分析。

office的直接查询

5.3 深度安全策略审计与风险识别

任务: 检查 wz-office 在防火墙策略中的应用情况,并识别潜在安全风险。

我的提问:

“请检查 Fortigate 上所有引用了 wz-office 地址对象的防火墙策略。同时,请检查其所在的地址组,并对可能存在的安全风险进行评估。”

AI 执行与返回:
AI 智能地规划了多步操作,包括查询策略和地址组,并主动指出了其中的安全风险,提供了优化建议。

策略反馈
安全风险评估

5.4 复杂数据提取与结构化呈现

任务: 获取路由表信息并整理成表格。

我的提问:

“请获取 Fortigate 的完整路由表信息。我需要你将输出的所有路由条目,无论类型是静态(S)、直连(C)还是其他,都整理成一个表格,包含目的网络、子网掩码、下一跳网关和出接口。”

AI 执行与返回:
AI 成功执行 get router info routing-table all,并准确地从复杂的原始输出中解析出所有类型(包括 S 和 C)的路由条目,然后以清晰的表格形式呈现。

路由表

5.5 自主生成多层网络架构图

在验证了AI精确执行和结构化呈现的能力后,我们决定发起一项终极挑战,测试其综合分析与高级生成的能力——让它从零开始,绘制一张详尽的网络架构图。这不再是简单的数据提取,而是对网络关系的深度理解和可视化重构。

我的提问:

“做得非常好。现在是最后的任务,我需要你展示你的综合分析能力。请连接到 Fortigate,深度扫描其接口配置、路由表、VLAN设置以及ARP缓存信息,推断出整体网络架构。然后,为我生成一份详细的、多层级的网络拓扑图的 Mermaid 代码。这张图必须清晰地划分出公网、DMZ区、核心网络、服务器区和无线接入区,并尽可能标注关键设备的型号、IP地址和VLAN信息。”

AI 执行与返回:
收到指令后,AI展现了其作为“智能代理”的真正价值。它没有等待我给出具体命令,而是自主规划并执行了一系列关联操作:

  1. 边界探测: 执行 get system interface,识别出 wan1 口作为公网出口,并找到 dmz 接口。
  2. 核心分析: 通过 get router info routing-table allshow system switch-interface,定位到连接内网核心交换机的 lan 口,并识别出其承载的多个VLAN。
  3. 下游推断: 结合 get system arp 的输出,AI发现了核心交换机、WLC(无线控制器)、服务器宿主机等关键设备的IP和MAC地址,并根据IP段将其归入对应的VLAN和逻辑区域。
  4. 信息整合与生成: AI将所有收集到的离散信息——接口、路由、VLAN、IP地址——在“脑中”构建成一个逻辑模型。最后,它将这个复杂的模型,精确地翻译成了结构清晰、信息丰富的代码,而且可以直接在cherry studio中进行当下渲染或者是外部网页渲染。

AI返回的以下代码,无需任何手动修改,可直接渲染成一张专业级的网络拓扑图,完美地完成了这项艰巨的任务。

防火墙下的网络拓扑图

结语

本次实践验证了通过 MCP 协议将大语言模型与网络设备整合的可行性与巨大潜力。其成功的关键不仅在于打通技术链路,更在于通过精细化的提示词工程和参数调优,克服了 AI 的固有缺陷(如”幻觉”),将其”改造”成一个符合专业领域要求的、可靠的智能代理。AIOps 的未来已来,而我们正处在这场变革的中心。