知用网
白蓝主题五 · 清爽阅读
首页  > 网络运维

从零开始的网络自动化项目实战经验分享

为什么要做网络自动

前阵子公司新开了两个分支办公室,每台路由器都要配OSPF、ACL、SNMP这些基础策略。手动一台台敲命令,三天才搞定,中间还因为手滑输错一个掩码,导致某地业务断了两小时。老板没明说,但运维群里那句‘下次能不能快点’让我挺难受的。后来我决定搞点自动化,哪怕只是把重复配置自动下发也好。

第一个脚本:批量生成配置文件

最开始没敢动生产环境,先拿Excel表格整理各站点IP规划,用Python的Jinja2模板生成配置。比如每个分支都有一段类似的接口配置:

{% for interface in interfaces %}
interface {{ interface.name }}
 ip address {{ interface.ip }} {{ interface.mask }}
 description {{ interface.desc }}
{% endfor %}

把数据写成JSON,模板一跑,几十个site的配置几秒就齐了。虽然还是得手动复制粘贴到设备,但至少不会拼错IP了。

进阶一步:用Netmiko实现自动登录推送

后来学了Netmiko,写了段脚本自动登录交换机发配置。核心逻辑其实就这几行:

from netmiko import ConnectHandler

device = {
    'device_type': 'cisco_ios',
    'host':   '192.168.10.1',
    'username': 'admin',
    'password': 'cisco123',
}

connection = ConnectHandler(**device)
output = connection.send_config_from_file('config.txt')
print(output)
connection.disconnect()

第一次跑成功的时候,看着终端自动输出“Config pushed successfully”,有种说不出的爽。不过也翻过车——有台设备启用了AAA认证方式不同,脚本直接卡住,后面加了异常处理才稳当。

真实场景:半夜告警自动修复

有次凌晨两点被电话吵醒,说是某条专线接口down了。赶到公司发现就是简单的shutdown/no shutdown就能解决的事。第二天我就琢磨,这种固定操作能不能让脚本自己干?于是写了个监控脚本,结合Ping和SNMP轮询接口状态,发现down掉就自动执行重启接口命令,并发邮件通知我。虽然现在看这逻辑挺糙,但那之后再没为这种事起过夜。

工具不是万能的,人得懂网络

有个实习生曾照着教程写了个批量改密码的脚本,结果把核心交换机的SSH服务整挂了——因为他不知道某些型号设备改密码后要保存配置才能生效,脚本执行完直接断连,设备重启后用旧密码进不去。这事提醒我:自动化跑得越快,出问题时死得越惨。你得清楚每条命令背后的机制,不然脚本就是定时炸弹。

现在的做法:Git管理+简易Web界面

现在我们用Git管理所有配置模板和脚本版本,变更留痕,回滚方便。还搭了个简单的Flask页面,同事点几个按钮就能生成配置或触发备份任务,不用人人会写代码。上周新来的同事第一次用这个系统,十分钟完成了一个site的开局配置,比我当年快多了。

网络自动化不是非得上Ansible或者自研平台,从一个小脚本开始,解决眼前最疼的问题,慢慢迭代,反而走得更稳。