【Netbak】开源网络设备配置备份系统 — 企业级自动化运维利器
告别手工逐台登录备份,Netbak 让网络设备的配置安全固若金汤。
一、引言:痛点与场景
每一位网络工程师都经历过这样的深夜:核心交换机突然断电重启,业务中断两小时,罪魁祸首是一周前技术员修改 ACL 规则时手滑了一行配置。翻遍邮件和聊天记录,找不到是谁在什么时候改了什么—— configuration rollback?不存在的。
网络设备配置管理是运维领域公认的三高痛点:高风险(误操作无备份可回滚)、高重复(几百台设备每月甚至每周都要做一次巡检备份)、高分散(Cisco、Huawei、H3C、Juniper 各家命令语法完全不同,一套脚本打天下几乎不可能)。
传统解法是写 Python 脚本配合 Paramiko/Netmiko 逐台连接,但这只是把痛苦从手工变成了代码——脚本散落在工程师个人电脑里,备份文件散落在 FTP 服务器上,谁改了啥、哪台设备配置变更了、备份失败有没有告警……全是黑洞。
Netbak 正是为解决这一系列问题而生的开源项目。它将网络设备配置备份做成一个完整的 Web 系统:统一纳管多厂商设备、自动定时备份、版本差异比对(Diff)、变更告警、RBAC 分权审计——手工运维时代的一地鸡毛,被装进了一个有 UI 有日志有通知的正规系统中。
二、项目简介
Netbak(全称 Network Backup System)是一款开源的网络设备配置备份管理平台,由国内开发者 midwinter(Gitee ID: xmp111)创建并维护,采用 Apache-2.0 许可证。
项目的核心能力可以一句话概括:通过标准 SSH/Telnet 协议自动连接企业网络设备,定期采集运行配置,持久化存储并支持差异比对、变更告警和多人协同操作。
关键数据一览:
| 指标 | 数值 |
|---|---|
| Gitee Stars | 78 |
| Gitee Fork | 37 |
| License | Apache-2.0 |
| 主要语言 | Python 3.10+ |
| 技术栈 | FastAPI + SQLModel + Celery + Redis + Netmiko |
| 支持平台数 | 145+(Cisco/Huawei/H3C/Juniper/Ruijie 等) |
从技术选型来看,项目选择了 Python 生态中最为成熟的网络自动化库 Netmiko 作为多厂商设备连接引擎,以 FastAPI 提供现代化的 REST API 和 Web UI,以 Celery + Redis 实现异步任务调度,以 SQLModel + PostgreSQL 提供类型安全的数据持久化。这套组合在工程实用性和社区活跃度上都经过了充分验证。
三、系统架构
Netbak 采用经典的分层架构,从上到下依次为:用户交互层、API 网关层、业务服务层、任务调度层、网络自动化层和数据持久层。

▲ 图1:Netbak 系统分层架构图
用户交互层 基于 Bootstrap 5 构建,提供设备管理、备份记录查询、Diff 查看、用户和权限管理等完整 UI 页面。页面中嵌入了 ECharts 实现统计图表可视化,另外还提供了内置 WebShell 终端,无需工程师本地安装 SSH 客户端即可直接访问设备 CLI。
API 网关层 使用 FastAPI 实现,统一处理认证鉴权(Session Cookie + API-Key 双模式)、CSRF 保护、MFA 双因素认证、RBAC 权限控制和审计日志写入。FastAPI 的异步特性使这套网关在高并发场景下依然保持低延迟。
业务服务层 包含三个核心服务:设备服务(设备录入、分组、批量导入、 reachability 可达性检测)、备份服务(触发备份、版本历史管理、Diff 对比、MD5 配置哈希变更检测)和调度服务(基于 APScheduler 的 Cron 定时任务编排,支持 DB 配置同步)。
任务调度层 是整个系统的异步执行中枢。Celery Worker 通过 Redis Broker 接收任务,支持信号量控制并发数、失败自动重试和 SoftTimeLimit 资源超时保护,确保单台设备卡死不会拖垮整个任务队列。
网络自动化层 核心依赖 Netmiko,支持 SSH 和 Telnet 两种连接协议,可应对 145 家以上网络设备平台( Cisco IOS/NXOS/ASA、Huawei VRP、H3C Comware、Juniper JunOS、Ruijie OS 等)。Netmiko 对每种平台的登录流程、特权提升和备份命令做了完整抽象,系统只需配置平台类型即可自动适配合适的命令集合。
数据持久层 由 PostgreSQL(主数据存储)、Redis(Celery Broker + 任务信号量)和 S3/OSS/MinIO 兼容对象存储(备份配置文本归档)三层组成。备份配置文件不上 PostgreSQL,而是写入对象存储以保证大容量文本的可靠性和可扩展性。
下面再通过一张流程图来理解一次完整备份任务的执行路径:

▲ 图2:备份任务执行全流程
从图2可以看出,一次备份任务的生命周期为:触发(定时/手动)→ 认证鉴权 → Celery 任务分发 → 遍历目标设备(并行)→ Netmiko SSH/Telnet 连接 → 执行备份命令 → MD5 变更检测 → 结果写 PostgreSQL → 配置文件上传对象存储 → 邮件告警/通知 → 任务完成。每一步的异常(超时、认证失败、命令错误)都会被捕获并记录,且支持配置重试次数。
四、核心特性解析
特性一:多厂商设备统一纳管
网络运维中最头疼的就是各厂商命令差异。Cisco 用 show running-config,Huawei 用 display current-configuration,H3C 用 display current-configuration,Juniper 用 show configuration,而且各家进入特权模式的方式也不一样。Netbak 通过 Netmiko 平台抽象层彻底解决了这个问题——在管理界面选择设备对应的平台类型(Cisco IOS / Huawei VRP / H3C Comware 等),系统自动使用该平台的正确命令集合。

▲ 图3:设备录入与管理界面
目前已测试支持的厂商涵盖 Cisco(全系列 IOS/NXOS/ASA/WLC/UCS)、Huawei(VRP/Agile Controller)、H3C(Comware 5/7)、Juniper(Junos OS)、Ruijie、Ruijie(EG/EOSS)、TP-Link、Fortinet(FortiOS)、MikroTik(RouterOS)、ZTE(ZXR10)、中兴通讯、Palo Alto(PAN-OS)、Arista(EOS)等,几乎覆盖了国内企业网络常见的全部设备类型。
特性二:定时自动备份与变更检测
管理员可以配置全局定时备份策略(基于 Cron 表达式,例如每天凌晨 2 点执行),也可以为不同设备组配置独立的备份计划。Celery Worker 在后台自动执行,无需人工干预。
更关键的是,系统会计算备份配置的 MD5 哈希值(config_snapshot_hash),只有配置实际发生变化时才写新版本——既节省了存储空间,也方便快速找到"是哪一天发生了变更"。

▲ 图4:定时备份计划配置
特性三:配置差异(Diff)比对
这是网络工程师最渴望的功能之一。在备份记录列表中,可以选择任意两个版本进行一键 Diff 比对,系统以可视化的方式(增/删/改颜色标注)展示两份配置的差异。相比纯文本对比,Netbak 的 Diff 视图更直观,适合提交变更记录或排查故障根因。

▲ 图5:配置差异比对规则管理
特性四:多维度变更告警
当检测到设备配置发生变更时,系统支持通过邮件发送告警通知。告警内容包含设备名、变更时间、变更内容摘要,运维人员可以在第一时间得知异常。邮件通知支持 SMTP 配置和测试功能,方便部署时验证连通性。

▲ 图6:邮件告警通知配置
特性五:完整的审计日志
所有用户在系统中的关键操作(登录/登出、设备增删改、备份触发、配置变更查看)均有完整记录。审计日志界面提供时间范围、操作用户、操作类型等多个维度的筛选条件,满足等级保护和企业合规要求。

▲ 图7:完整操作审计日志
特性六:基于 RBAC 的分权管理
Netbak 内置了角色权限模型,支持创建自定义角色并精确分配功能权限。例如可以创建"只读运维"角色(可查看设备/备份记录,但不能修改配置或触发备份),以及"设备管理员"角色(负责设备录入和分组,但不能管理用户)。结合审计日志,实现真正的最小权限原则。

▲ 图8:RBAC 角色权限管理
特性七:凭据安全存储
设备登录密码采用 Fernet 对称加密 存储(app/core/security.py),加密密钥通过环境变量注入,生产部署中建议使用 Vault 或 KMS 管理密钥。凭据可以关联到设备分组,实现"一次录入,分组复用"的集中管理。

▲ 图9:加密存储的设备登录凭据
特性八:WebShell 终端
在设备详情页面可以直接打开 WebShell 终端,浏览器内连接设备 CLI,无需工程师本地安装 Xshell/Putty 等工具。这对于临时排障和快速登录极为便利,特别适合多设备跨地域运维团队。
五、快速上手
环境要求
- Python 3.10+
- PostgreSQL 14+
- Redis 6+
- 操作系统:Linux(Ubuntu 20.04 / Debian 11 测试通过)
安装步骤
第一步:克隆仓库
git clone https://gitee.com/xmp111/network_backup.git
cd network_backup
第二步:安装依赖
pip install -r requirements.txt
第三步:配置环境变量
cp .env.example .env
# 编辑 .env,填入以下关键配置:
# DATABASE_URL=postgresql://user:password@localhost:5432/netbak
# REDIS_URL=redis://localhost:6379/0
# SECRET_KEY=<随机字符串>
# BOOTSTRAP_ADMIN_USERNAME=admin
# BOOTSTRAP_ADMIN_PASSWORD=<初始密码>
第四步:初始化数据库
python -m app.db
第五步:启动服务
# 启动 FastAPI 主服务(默认端口 8000)
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# 启动 Celery Worker(另一个终端窗口)
celery -A app.celery_app worker --loglevel=info
第六步:访问 Web UI
http://<服务器IP>:8000
首次登录使用第三步中配置的 BOOTSTRAP_ADMIN_USERNAME 和 BOOTSTRAP_ADMIN_PASSWORD,首次登录后会强制要求修改密码。
Docker 快速体验(推荐)
项目根目录提供了 docker-compose.yml,一行命令即可启动全套组件:
docker-compose up -d
访问 http://localhost:8000 即可体验。
六、实战演示
以下以"添加一台 Cisco 交换机并配置每日自动备份"为例,演示完整操作流程。
Step 1:录入设备
登录 Web UI,进入「设备管理」→「添加设备」,填写以下信息:
- 设备名称:
Core-SW-01 - 主机地址:
192.168.1.1 - 平台类型:
Cisco IOS - 连接协议:
SSH(端口 22) - 所属分组:选择"核心交换机"分组(如无分组可先跳过)
- 连接凭据:选择已创建的 Cisco 管理员账户凭据(或新建)
保存后,系统会自动执行一次 reachability 检测,确认设备可达。
Step 2:配置凭据
进入「凭据管理」→「添加凭据」,录入 Cisco 设备的登录用户名和密码(将加密存储)。凭据支持关联到分组,方便批量复用。
Step 3:创建备份模板
进入「备份模板」,创建名为 Standard-Cisco-Backup 的模板,指定备份命令序列(默认已包含 show running-config 及相关命令,可按需增删)。
Step 4:触发首次手动备份
在设备列表中找到 Core-SW-01,点击「立即备份」按钮。Celery Worker 接收任务后,Netmiko 通过 SSH 连接设备、执行命令、采集配置。完成后在「备份记录」中查看状态为"成功",点击可查看完整配置内容。
Step 5:配置定时自动备份
进入「备份计划」→「添加计划」,设置:
- 计划名称:每日凌晨备份
- Cron 表达式:
0 2 * * *(每天 02:00 执行) - 关联设备:
Core-SW-01(可多选) - 关联模板:
Standard-Cisco-Backup
保存后,计划自动生效,每天凌晨 2 点系统会自动触发备份任务。
Step 6:验证变更 Diff
假设第二天工程师修改了 ACL 规则,第三天凌晨备份完成后,进入「备份记录」,选择 Core-SW-01 最近两个版本,点击「Diff 比对」,即可看到新增的 ACL 行以绿色标注、被删除的规则以红色标注,变更一目了然。
七、技术亮点深度解析
亮点一:Netmiko 多厂商平台抽象的工程实践
Netbak 背后依赖的 Netmiko 是网络自动化领域最成熟的 SSH/Telnet 库,但项目在此基础上做了重要的工程封装。app/platforms.py 中定义了所有支持的平台及其对应的命令集,app/services/netmiko_client.py 中封装了统一的连接和命令执行接口,并将各种异常(超时、认证失败、特权模式失败、协议错误等)映射为细粒度的 NetmikoErrorCode 枚举,共定义了 15 种错误类型。
这种设计的优势在于:底层网络连接细节与上层业务逻辑完全解耦——如果未来需要替换 Netmiko(例如改用 NAPALM 或自研异步 SSH),只需改动 netmiko_client.py 和 platforms.py,业务服务层无需任何改动。这是典型的适配器模式应用。
亮点二:Celery 任务编排与并发控制
网络设备备份的并发控制是一个工程难题:同时连接太多设备会导致管理网络带宽被打满,且部分低端设备本身不支持高并发 SSH 会话。Netbak 通过 Celery 的 Semaphore(信号量)机制实现精确的并发数控制。
在 app/celery_tasks.py 中,每个设备的备份任务在执行前必须先获得信号量许可,任务完成后释放。如果所有信号量已被占用,新任务会在队列中等待,确保任意时刻同时连接的设备数不超过配置上限。此外,通过 SoftTimeLimit 设置单任务超时(默认配置中可以支持自定义),避免单台设备卡死导致 Worker 资源耗尽。
亮点三:PostgreSQL + SQLModel 的类型安全
相比 Django ORM 或纯 SQLAlchemy,SQLModel 是 Pydantic 与 SQLAlchemy 的深度融合——既支持ORM查询,也支持 FastAPI 的自动请求验证和 OpenAPI Schema 生成。这意味着:数据库模型的定义就是 API Schema 的定义,两者的一致性由类型系统保证,从源头消除了"数据库字段改了但 API 忘了更新"的隐患。
八、相关资源
- Gitee 仓库:https://gitee.com/xmp111/network_backup
- 项目文档:项目内 README.md 包含完整的部署和功能说明
- License:Apache-2.0
本文由「IT召唤狮 」公众号整理发布,图片已添加版权水印。转载需授权。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)