- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
导读
本篇文章来自 90DaysOfDevOps 项目 2022 年度课程的第 25 天,核心主题是Python 网络自动化。文章首先梳理了 Python 之所以成为网络运维自动化事实标准的三大理由(可读性、生态库、高效),随后引出软件定义网络(SDN)、高层编排与基于策略的管理这三类新型网络自动化范式;紧接着进入实战环节,完整演示了如何在 VMware Workstation 中导入 EVE-NG(Community Edition)并完成首轮初始化配置,从而获得一个可反复折腾、可跑通 Python 脚本的虚拟网络实验沙箱。学完本篇,你将能够:理解 Python 在网络自动化中的定位,独立搭建并初始化 EVE-NG 虚拟网络实验环境,并为后续使用 Netmiko、Paramiko 等库编写设备配置脚本打下基础。
注:本仓库中与该主题配套的后续脚本(Paramiko、Netmiko 连接与备份脚本)位于 2022/Days/Networking 目录,可在搭建完成实验室后继续深入练习。
为什么网络自动化离不开 Python
原文开宗明义地指出:Python 是自动化网络运维的标准语言。这并非因为 Python 只能做网络自动化,而是当你搜索各类网络自动化资料时,Python 几乎无处不在——即使不是 Python 本身,往往也是由 Python 编写的工具(例如 Ansible 就是用 Python 实现的)。
文中还交代了作者个人背景:在“学习一门编程语言”阶段,作者因为所在公司使用 Go 开发而选择了 Golang;但若无此特殊原因,Python 会是当时学习语言的默认选项。这从侧面说明:Python 的通用性与易用性,使它成为绝大多数 DevOps/网络工程师进入自动化领域的首选。
可读性与易用性
Python 的语法天然“读得懂”——不需要使用{}来标记代码块起始与结束,缩进即结构。配合 VS Code 这样的强 IDE,几乎零成本即可开始运行第一个脚本。除 VS Code 外,PyCharm 也是值得考虑的 IDE 选择。
库生态:真正的金矿
Python 的扩展性是其核心价值所在:PyPI(Python 包索引)上存在海量针对各类设备与配置场景的库。获取方式很简单——使用pip工具连接 PyPI 并下载安装到本地工作站即可。值得注意的是,Cisco、Juniper、Arista 等网络厂商都开发了官方库,以方便用户访问各自的设备。这是 Python 在网络自动化领域生态优势的直接证据。
强大且高效
对比此前 Go 语言章节的 Hello World 需要约 6 行代码,Python 只需一行:
print('hello world')综合以上三点,可以很容易理解为什么 Python 通常被视为自动化工作的“事实标准(de-facto)工具”。
从“脚本备份”到“意图化网络”:网络自动化的范式演进
文中强调了一个重要观点:早年间也可能存在脚本与网络设备交互,例如自动备份配置、抓取日志与设备信息。但今天我们讨论的自动化有所不同——网络整体格局已经为自动化思维发生了改变。这种演进体现在三个层次:
- 软件定义网络(SDN):SDN 控制器承担起向全网所有设备下发控制平面配置的职责。这意味着任何网络变更只需面对单一接触点,不再需要逐台 telnet/SSH 登录设备,也不再依赖容易重复出错、配置不一致的人工操作。
- 高层编排(High-Level Orchestration):在 SDN 控制器之上再提升一个抽象层级,实现服务级别的编排;并将这个编排层集成到你所选择的平台中,例如 VMware、Kubernetes、公有云等。
- 基于策略的管理(Policy-based management):你只需要描述“想要什么”——即期望状态(Desired State),系统会自行掌握所有细节并推导出如何达到该期望状态。这正是声明式管理理念在网络领域的体现。
搭建实验环境:为什么选择 EVE-NG
并非每个人都有真实的路由器、交换机等物理网络设备。为了让学习者既能体验上述工具,又能动手学习如何自动化配置网络,原文选择构建一个虚拟实验环境。可选方案包括:
- GNS3 VM:流行的图形化网络模拟器;
- EVE-NG(本文选择):Emulated Virtual Environment Next Generation,社区版免费可用;
- Unimus:严格说不是实验环境,而是一个“有意思的概念”(配置备份与变更管理工具)。
最终选用 EVE-NG 的理由很务实:虚拟环境意味着我们拥有一个沙箱,可以测试许多不同场景,并且能够自由摆弄不同设备与拓扑。全流程将基于 EVE-NG 社区版(Community Edition)完成。
获取镜像:ISO 与 OVF 两种格式
EVE-NG 社区版提供ISO 与 OVF两种格式下载:
- OVF 格式:可直接导入虚拟机管理程序(hypervisor),本文采用此方式;
- ISO 格式:可在裸金属服务器上直接安装,无需 hypervisor。
虚拟化平台选择:VMware Workstation
原文使用VMware Workstation PRO(作者通过 vExpert 计划获得许可)进行演示;你也可以使用免费的 VMware Workstation Player,或参考官方文档中列出的其他平台。文中特别提醒:此前的课程中使用的 VirtualBox 在这里不可用——作者在 GNS3 与 VirtualBox 的组合中也遇到过相同问题。因此请优先选择 VMware 系列的 Workstation/Player。
VMware Workstation 中导入 EVE-NG:逐步实操
第一步:解压并导入 OVF
- 打开 VMware Workstation,选择菜单
File -> Open; - 下载得到的 EVE-NG OVF 镜像位于一个压缩文件内,先解压到独立文件夹,得到完整的 OVF 配套文件组;
- 导航到解压位置,开始导入(Import);
- 为虚拟机起一个易于识别的名称,并将虚拟机存储到系统上合适的位置。
第二步:调整虚拟硬件与开启嵌套虚拟化
导入完成后,建议将处理器数量调整为 4 核、内存分配调整为 8 GB(最新版本导入后可能已是默认值,若不是请在虚拟机设置中修改)。
关键一步:确保勾选“Virtualize Intel VT-x/EPT or AMD-V/RVI”选项。该选项指示 VMware Workstation 将虚拟化标志透传给客户机操作系统(即嵌套虚拟化)。这正是作者之前在 GNS3 + VirtualBox 组合中遇到问题的根源——尽管 CPU 本身支持该特性。
第三步:开机初始化
开机后你会看到一个初始化命令行界面,此时可使用:
- 用户名:
root - 密码:
eve
随后系统会要求再次设置 root 密码——这个密码将用于之后 SSH 登录宿主机。接下来按向导依次完成:
- 修改主机名(hostname);
- 定义 DNS 域名(作者使用了一个示例域名,后续如有需要可再调整);
- 配置网络:选择静态(Static)模式,以保证重启后 IP 地址不丢失;
- 提供静态 IP 地址:务必选择一个可从你的工作站访问的网段,并补充子网掩码、默认网关与 DNS。
配置完成后系统会自动重启。重启完成后,将静态 IP 地址输入浏览器即可访问 EVE-NG 的 Web 界面(示例截图中地址栏为192.168.169.210/#/login,版本为 2.0.3-112)。
第四步:Web 界面登录与控制台选择
- Web GUI 默认用户名:
admin,密码:eve; - SSH 默认用户名:
root,密码:eve(若你在初始化时修改过则会以新密码为准)。
在登录后的设置中,作者选择了HTML5控制台(而非 Native),这样在不同设备控制台之间切换时,会在浏览器中打开新标签页,操作体验更流畅。
相关界面截图可参考仓库中的 Day25_Networking1.png(EVE-NG 下载页)与 Day25_Networking11.png(EVE-NG Web 登录界面)。
排障专题:WSL2 与嵌套虚拟化冲突(常见坑)
这是原文记录的典型“兔子洞”问题:作者提到该环境在 VirtualBox 下无法运行,而在 VMware Workstation 下最初也遇到了同样问题——但问题并不出在虚拟化平台本身。
作者在 Windows 机器上运行着WSL2,而 WSL2 似乎会移除在环境中再运行嵌套虚拟化的能力(作者推测它占用了 CPU 的 Intel VT-d 虚拟化方面)。诡异的是,Ubuntu 虚拟机却仍然能正常运行。
解决方案是在 Windows 上以管理员身份执行以下命令并重启系统:
bcdedit /set hypervisorlaunchtype off注意:关闭 hypervisor 启动类型期间,WSL2 将无法使用。当你需要恢复 WSL2 时,再以管理员身份执行以下命令并重启:
bcdedit /set hypervisorlaunchtype auto实验室搭建完成之后:接下来做什么
原文在完成 EVE-NG 初始化后,列出了后续课程的核心任务清单,这也是读者接下来的练习路线:
- 安装 EVE-NG client pack;
- 向 EVE-NG 导入网络镜像(Images);
- 构建网络拓扑(Network Topology);
- 添加节点(Adding Nodes);
- 连接节点(Connecting Nodes);
- 开始编写 Python 脚本;
- 学习
telnetlib、Netmiko、Paramiko与Pexpect四类网络自动化工具。
仓库配套脚本速览
本仓库的 2022/Days/Networking 目录已包含上述路线的配套示例,可作为实验室搭建完成后的进阶练习材料(以下脚本中的 IP 对应拓扑中的 R1/SW1~SW4 节点):
- Paramiko 交互式会话:paramiko_show.py 使用
paramiko.SSHClient建立 SSH 连接,通过invoke_shell()进入交互式 shell,依次发送enable、terminal length 0、show ip int b、show arp等命令并接收输出——这正是“登录每台设备执行命令”的传统自动化方式。 - Netmiko 多设备并发查询:netmiko_con_multi.py 定义了 R1 与 SW1~SW4 共 5 台 Cisco IOS 设备的连接字典(
device_type、host、username、password),循环调用ConnectHandler(**device)并执行show ip int brief。Netmiko 在 Paramiko 之上封装了各厂商差异,使“批量查询”简洁得多。 - Netmiko 批量 VLAN 配置下发:netmiko_sendchange.py 通过
net_connect.enable()进入特权模式,再用send_config_set(core_sw_config)将switchport trunk等配置列表一次性下发——这正是“配置自动化”而非“查询自动化”的体现。 - Netmiko 多设备状态检查:netmiko_con_multi_vlan.py 批量对 SW1~SW4 执行
show int trunk。 - Paramiko 全量配置备份:backup.py 读取 backup.txt 中的设备 IP 清单,逐台 SSH 登录并执行
show run,将输出按时间戳命名保存到本地文件——即文中提到的“自动备份配置”类脚本的完整实现。
这些脚本与 Day 25 正文正好构成“环境就绪 → 动手编码”的完整闭环:EVE-NG 提供沙箱拓扑,Python 脚本提供自动化能力。
学习资源
原文列出的资源均为公开的免费教程,覆盖 EVE-NG 入门、网络自动化技能与计算机网络基础,可作为进一步学习的材料(均为外部视频/网站,此处仅转述名称供检索):EVE-NG 入门免费课程、EVE-NG 创建第一个实验、网络自动化必备的 3 项技能、计算机网络全课程、Practical Networking 站点、Python Network Automation 视频。
下一篇内容见 Day 26,将进入 EVE-NG client pack 安装与镜像加载环节。
- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
相关推荐
90DaysOfDevOps 网络自动化入门:Python 与 EVE-NG 仿真实验室搭建实战(Day 25)
90DaysOfDevOps 网络自动化入门:Python 与 EVE NG 仿真实验室搭建实战(Day 25) 导读 网络设备配置自动化是现代 DevOps
文档/教程90DaysOfDevOps:用 Python 与 EVE-NG 搭建网络自动化实验环境(Day 25)
90DaysOfDevOps:用 Python 与 EVE NG 搭建网络自动化实验环境(Day 25) 导读 本文对应 90DaysOfDevOps 第 25
文档/教程90DaysOfDevOps Day 25:用 Python 与 EVE-NG 搭建网络自动化实验环境
90DaysOfDevOps Day 25:用 Python 与 EVE NG 搭建网络自动化实验环境 本篇指南以 90DaysOfDevOps 第 25 天(
文档/教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考