在当今数字化时代,网络设备的自动化管理已经成为了不可或缺的趋势。对于华为设备的运维人员来说,学会利用Python
配置NETCONF
已经成为提高工作效率、降低运维成本的必备技能。本文将介绍如何利用Python
和NETCONF
来实现华为设备的自动化配置,让运维工作变得更加高效、简便。
什么是NETCONF? NETCONF(Network Configuration Protocol)
是一种网络设备配置协议,它采用XML格式来描述配置信息,并通过安全的SSH连接来传输数据。相比传统的CLI(命令行界面)配置,NETCONF
具有更强大、更灵活的配置能力,可以实现对设备的批量配置和管理。
NETCONF网络架构 NETCONF基本网络架构如下图所示,整套系统必须包含至少一个NMS(Network Management System)
作为整个网络的网管中心,NMS运行在NMS服务器上,对设备进行管理。
NETCONF报文格式 一个完整的NETCONF请求报文结构如下图所示:
❝ NETCONF请求报文由三部分组成,以及各字段含义如所示:
Message:消息层,为RPC报文提供一个简单的,独立的传输帧机制。客户端把RPC请求封装在一个元素内,服务器把请求处理的结果封装在元素内,回应给客户。 Operations:操作层,定义了一组基本NETCONF协议操作,被带有基于XML编码参数的RPC方法调用。 Content:管理对象层,定义了配置数据模型,目前主流的数据模型有YANG模型等 ❞ 为什么选择Python? Python
作为一种简洁而强大的编程语言,广泛应用于自动化领域。利用Python编写的脚本可以轻松地与各种设备进行交互,并实现自动化的配置和管理。结合Python
和NETCONF
,可以实现对华为设备的高效自动化管理。
如何学习Python配置NETCONF? 搭建网络环境这里采用华为的ENSP模拟器,并采用CE设备模拟环境。使用拓扑如下图:
拓扑环境 将本地电脑和ENSP的设备进行交接,桥接配置如下图所示: <X_T1_AGG1>system-view immediately [X_T1_AGG1]sysname X_T1_AGG1 [X_T1_AGG1]interface Vlanif 1 [X_T1_AGG1-Vlanif1]ip add 192.168.56.10 24 [X_T1_AGG1-Vlanif1]q [X_T1_AGG1]interface g1/0/0 [X_T1_AGG1-GE1/0/0]undo shutdown
测试本机与CE设备的连通性,通过ping
命令测试,如下图: [X_T1_AGG1-aaa]local-user dev_user password cipher Huawei@123 Info: A new user is added. [X_T1_AGG1-aaa]local-user dev_user service-type ssh [X_T1_AGG1-aaa]local-user dev_user level 3 [X_T1_AGG1-aaa]undo local-user policy security-enhance // 禁止第一次登录修改密码策略 [X_T1_AGG1-aaa]undo local-user policy password change // 禁止第一次登录修改密码策略 [X_T1_AGG1-aaa]q [X_T1_AGG1]netconf [X_T1_AGG1-netconf]protocol inbound ssh port 830
[X_T1_AGG1]ssh user dev_user Info: Succeeded in adding a new SSH user. [X_T1_AGG1]ssh user dev_user authentication-type password [X_T1_AGG1]ssh user dev_user service-type stelnet snetconf
[X_T1_AGG1]user-interface vty 0 4 [X_T1_AGG1-ui-vty0-4]authentication-mode aaa [X_T1_AGG1-ui-vty0-4]protocol inbound all [X_T1_AGG1-ui-vty0-4]user privilege level 3
测试SSH是否正常登录。如下图展示,SSH成功登录。 安装相关库首先,需要安装Python
的NETCONF
库,例如ncclient
。可以通过pip来进行安装:
pip install ncclient
2. 编写Python脚本接下来,编写Python脚本来实现对华为设备的配置。以下是一个简单的示例脚本,用于连接到设备并配置接口IP地址:
from ncclient import manager# 设备信息 hostname = '192.168.56.10' username = 'dev_user' password = 'Huawei@123' # NETCONF连接 with manager.connect(host=hostname, username=username,hostkey_verify=False , password=password, port=830 , device_params={'name' : 'huawei' }) as m: # 构建XML配置 interface_xml = """ <config> <ethernet xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"> <ethernetIfs> <ethernetIf operation="merge"> <ifName>GE1/0/2</ifName> <l2Enable>disable</l2Enable> </ethernetIf> </ethernetIfs> </ethernet> <ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"> <interfaces> <interface operation="merge"> <ifName>Loopback0</ifName> <ifDescr>Config by NETCONF</ifDescr> <ifmAm4> <am4CfgAddrs> <am4CfgAddr operation="create"> <subnetMask>255.255.255.255</subnetMask> <addrType>main</addrType> <ifIpAddr>1.1.1.1</ifIpAddr> </am4CfgAddr> </am4CfgAddrs> </ifmAm4> </interface> </interfaces> </ifm> </config> """ # 应用配置 m.edit_config(target='running' , config=interface_xml) print("配置成功!" )
❝ 上述XML的内容主要做了两件事情:
配置Loopback0
配置IP地址为1.1.1.1
❞ 关于XML的语法可以查看netconf
的官网 [1] ,从官网上了解到对华为设备主要支持两种类型。如下图:
3. 运行脚本保存以上代码为configure_huawei.py
,然后在命令行中运行该脚本,即可实现对华为设备的自动化配置。
python configure_huawei.py
执行成功后,会返回如下信息,如下图: 运行成功后,查看交换机设备的配置,已经生效了,如下图:
结语 通过学习Python配置NETCONF,华为设备的运维工作变得更加高效、简便。利用自动化配置,可以大大减少手工操作的工作量,提高运维人员的工作效率,同时降低了配置错误的风险。让我们一起跟上自动化的步伐,让华为设备的管理变得更加轻松!更多关于netconf的内容可以参考这篇文章 [2]
Reference [1] 华为netconf教程: https://support.huawei.com/enterprise/zh/doc/EDOC1100335707/877aa431#ZH-CN_TOPIC_0000001564122049
[2] Huawei_Netconf_Ncclient : https://www.cnblogs.com/yizhangheka/p/17253323.html