ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

网络设备配置备份怎么做:Oxidized 从规划到上线的实用指南

网络设备配置备份怎么做:Oxidized 从规划到上线的实用指南

网络设备配置备份怎么做:Oxidized 从规划到上线的实用指南

【免费下载链接】oxidizedOxidized is a network device configuration backup tool. It's a RANCID replacement!项目地址: https://gitcode.com/GitHub_Trending/ox/oxidized

Oxidized 是一个网络设备配置备份工具,定时登录设备拉取运行配置,写进 Git 仓库,保留每次变更的历史。它支持 130 多种操作系统类型,适合有几十到几千台设备、想要版本化配置和审计追踪的运维团队。

🧭 动手前先想清楚

先别装软件,三个问题定下来,后面的配置基本就定型了:

  • 备份范围和频率:多少台设备、多久拉一次?规模决定你用 CSV 还是数据库做设备清单,也决定线程数。
  • 配置存到哪:全部塞进一个 Git 仓库,还是按部门/站点拆成多个仓库?要不要落盘加密?
  • 权限边界:谁能读配置、谁能改仓库?设备侧用密码还是密钥,是否要去掉口令等敏感字段?

想清楚这三点,你就知道该用哪套 output、要不要 git-crypt、要不要按 group 拆库。

🚀 最小可用配置

先装依赖和主程序(以 Debian/Ubuntu 为例):

apt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config libssh2-1-dev libyaml-dev gem install oxidized

也可以从源码装:

git clone https://gitcode.com/GitHub_Trending/ox/oxidized cd oxidized && rake install

第一次运行oxidized会在~/.config/oxidized/config生成默认配置。把下面这份精简配置填进去,只保留能跑起来的部分:

username: backup password: changeit model: ios interval: 3600 output: default: git git: user: Oxidized email: o@example.com repo: /var/lib/oxidized/devices.git

再建一个设备清单文件~/.config/oxidized/router.db,一行一台,格式是主机名:模型(可再加账号、密码、enable 口令):

router01.example.com:ios:backup:secret

跑一次oxidized,devices.git里就会出现第一次备份。到此为止已经能用了,剩下的按场景选路。

🔀 按你的场景选路

单一 Git 仓库

所有设备进一个库,方便统一 diff 和检索。适合设备在一两千台以内、团队共用一个视图的情况。

output: default: git git: user: Oxidized email: o@example.com repo: /var/lib/oxidized/devices.git single_repo: true

注意:single_repo让所有分组共用一个仓库,配合clean_obsolete_nodes: true还能自动清掉已下线设备的旧配置。

按分组拆多个仓库

不同部门或站点要权限隔离时,用分组,Oxidized 会为每个 group 自动建库。在 source 的map里把某一列映射成group即可。

output: default: git git: user: Oxidized email: o@example.com repo: /var/lib/oxidized/git-repos/default.git

注意:无分组的设备进default.git,其余按分组名各建一个.git,目录结构会多一层。

Git-Crypt 加密落盘

配置含敏感信息、落盘必须加密时,用 gitcrypt 输出,提交时被 git-crypt 在线加密。

output: default: gitcrypt gitcrypt: user: Oxidized email: o@example.com repo: /var/lib/oxidized/devices users: - "0xABCDEF0123456789"

注意:users列表只在建仓时写入一次,之后要加解密人得手动git-crypt add-gpg-user。

设备清单来自数据库

设备多、手工维护 router.db 不现实、已有 CMDB 时,直接用 SQL source。

source: default: sql sql: adapter: sqlite database: /var/lib/oxidized/nodes.db table: nodes map: name: fqdn model: model

注意:name字段是必填的,它决定输出文件名,映射错了对应不上配置。

✅ 上线前的最后检查

  • 调线程和超时:threads、timeout、timelimit默认是 30 / 20 / 300,按设备规模和慢设备情况调,别让一台慢设备堵住整个队列。
  • 仓库写权限:git 输出要能写 repo 目录,用专门的oxidized用户跑,别用 root。ls -ld /var/lib/oxidized确认属主对得上。
  • 去掉敏感字段:加vars: { remove_secret: true },让模型里的替换规则把 SNMP community 之类的口令抹掉,别把明文带进仓库。
  • 接一个告警:用 hook 订阅node_fail,备份连续失败时第一时间知道,而不是第二天才发现。
  • 要不要开 Web:需要 REST API 和界面就装oxidized-web,默认不加载,按需再开。

📈 跑起来之后

查某台设备的变更历史最直接:

cd /var/lib/oxidized/devices.git git log --follow router01.example.com git diff HEAD~1 HEAD -- router01.example.com

想把每次变更邮件发出去,挂一个 exec hook 调用仓库自带的脚本 extra/oxidized-report-git-commits,它在post_store事件里跑,生成 diff 并发信。日常看设备清单、手动触发某台设备立即备份,则用 oxidized-web 的GET /nodes、GET/PUT /node/next/[NODE]接口。

⚠️ 别踩这些坑

连上设备却拉不到配置、或直接超时。多半是设备真实提示符和模型里定义的prompt正则对不上。用 irb 验证'实际提示符' =~ /模型里的正则/,不匹配就把该模型复制到~/.config/oxidized/model/下改正则,Oxidized 会优先用本地这份。

仓库越来越大、备份越来越慢。Git 仓库只增不减,积累多了就变卡。停掉 oxidized、先备份数据,进仓库跑一次git gc,再启动。

配了 githubrepo 却推不到远端。运行用户的known_hosts没信任那台 Git 服务器。执行ssh-keyscan git.intranet >> ~/.ssh/known_hosts(容器里要把这个目录映射进容器)。

你改了仓库,oxidized 却不认。裸仓库的 index 不会随 push 更新,Oxidized 读的是缓存的 HEAD。进仓库执行git ls-tree -r HEAD | git update-index --index-info手动同步。

下一步

想让某类设备把show version、show inventory拆成独立输出类型、或写自己的设备模型,看 docs/Creating-Models.md;全部输入、输出、hook、日志的完整参数在 docs/Configuration.md。模型实现本身放在 lib/oxidized/model/,照着现成的 ios.rb、junos.rb 抄结构最快。

【免费下载链接】oxidizedOxidized is a network device configuration backup tool. It's a RANCID replacement!项目地址: https://gitcode.com/GitHub_Trending/ox/oxidized

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进