当前位置: 首页 > news >正文

网络自动化学习-基于H3C模拟器的Netconf基础准备与练习

Netconf简介

NETCONF(Network Configuration Protocol,网络配置协议)是一种基于 XML 的网络管理协议,它提供了一种可编程的、对网络设备进行配置和管理的方法。用户可以通过该协议设置参数、获取参数值、获取统计信息等。

NETCONF 报文使用 XML 格式,具有强大的过滤能力,而且每一个数据项都有一个固定的元素名称和位置,这使得同一厂商的不同设备具有相同的访问方式和结果呈现方式,不同厂商之间的设备也可以经过映射 XML 得到相同的效果,这使得它在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。在这样的网管软件的协助下,使用 NETCONF 功能会使网络设备的配置管理工作,变得更简单更高效。

为什么需要Netconf

简单来说就是传统CLI命令行工具是用于人-机交互的,SNMP适合于机-机交互,但功能,安全各方面都难以满足现代网络自动化的需求。
相关介绍可以参考我的博文[AI 时代,传统网络运维人员的转型指南]。

Netconf结构

NETCONF 协议采用了分层结构,分成四层:内容层、操作层、RPC(Remote Procedure Call,远程调用)层和通信协议层。

netconf.png

  • 安全传输层提供了客户端和服务器之间的通信路径。NETCONF 协议可以使用任何符合基本要求的传输层协议承载。
  • 消息层提供一种简易的不依赖于传输层,生成 RPC 和通知消息框架的通信协议。
  • 操作层定义一组基本的操作,作为 RPC 的调用方法,可以使用 XML 编码的参数调用这些方法。
  • 内容层由管理数据内容的数据模型定义。目前主流的数据模型有 Schema 模型、YANG 模型等。

Netconf报文格式

NETCONF 命令必须符合 XML 语言的基本格式,格式遵循 RFC 4741。

NETCONF 报文分为请求和应答报文两种。NETCONF 请求和应答报文的格式有所不同。

执行 NETCONF 请求前,需要先校验 NETCONF 报文的数据合法性。如果校验失败,则会向客户端报错。其中,数据合法性校验通过 XML Schema 的方式完成。

Netconf请求格式

客户端把 RPC 请求封装在一个 rpc元素内,发送给服务器。
;服务器把请求处理的结果封装在一个 rpc-reply元素内,回应给客户端。

<?xml version="1.0" encoding="utf-8"?>
<rpc message-id =”101” xmlns=”urn:ietf:params:xml:ns:netconf:base:1.0”><operation>
</rpc>

其中的operation你可以替换为你想要的操作集。例如查看设备上所有的端口信息

<?xml version="1.0" encoding="utf-8"?>
<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-bulk><filter type="subtree"><Ifmgr xmlns="http://www.h3c.com/netconf/data:1.0-Ifmgr"><Interfaces><Interface/></Interfaces></Ifmgr></filter></get-bulk>
</rpc>

NETCONF over SOAP

略。

如何使用netconf

在CLI命令行界面使用

在CLIL界面,用户视图下,直接输入xml即可进行XML视图,将合法的NETCONF报文直接拷贝、粘贴到命令行提示符处执行,即可实现对设备的配置和管理。

  • 在XML视图下进行NETCONF配置时,NETCONF报文最后需要添加“]]>]]>”结束符,否则设备无法识别。
  • 不要手动输出,请在文本编辑器里编写完成,然后复制粘贴。

不过并不推荐你这么用,因为最适合人机交互的还是传统的命令行,你只需要知晓这个功能即可,或者测试使用。

使用第三方工具

  • SSH配置工具:NETCONF Browser等
  • Python和ncclient。

netconf支持的连接方式

以H3C设备为例,支持以下方式,其他各家品牌也都差不多。

  • NETCONF over SSH
  • NETCONF over Telnet
  • NETCONF over Console
  • NETCONF over HTTP
  • NETCONF over HTTPS
  • NETCONF over SOAP over HTTP
  • NETCONF over SOAP over HTTPS

环境准备

在模拟器搭建基础环境

略。具体可参考我之前的文章。网络自动化学习笔记-H3C 模拟器(HCL)基础环境配

netconf over SSH相关配置

除了完成之前的本地用户,SSH用户及相关配置,还需要完成以下配置,以开启netconf功能。

[Switch-4]netconf ssh server enable
[Switch-4]ssh user hao service-type ?all      All service typesnetconf  NETCONFscp      SCPsftp     SFTPstelnet  Stelnet
[Switch-4]ssh user hao service-type all a
[Switch-4]ssh user hao service-type all authentication-type ?any                   Any authentication methodkeyboard-interactive  Keyboard-interactive authenticationpassword              Password authenticationpassword-publickey    Password-publickey authenticationpublickey             Publickey authentication[Switch-4]ssh user hao service-type all authentication-type any

下载工具,测试netconf连接

  1. 下载NETCONF Browser或其他工具。
  2. 安装工具并连接设备。

输入设备IP,SSH用户名,密码(可选),点击connect连接。
image.png

  1. 连接成功后,软件会自动发送hello包,设备会返回其所有能力集。
    image.png
  2. 测试一个指令
    我们将前方中查看所有端口的指令粘贴至输入框,并点击发送,瞬间,便返回了所有端口信息。

image.png

可在output Tree标签下查看树状化的结果
image.png

什么是netconf的能力集

NETCONF 协议定义了一组必须实现的基本操作,如 <get><get-config><edit-config> 等,这是所有 NETCONF 设备都能完成的基础动作,构成了基本能力(Base Capability)

然而,不同网络设备的定位和功能不同,有的需要支持配置回滚,有的需要区分“候选配置”和“运行配置”。为了满足这些多样化的需求,NETCONF 设计了能力集机制。每个能力集都由一个统一的资源标识符(URI)来唯一标识,代表了一组特定的扩展功能、操作或协议行为 。

在前文中我们使用软件,可以看到设备内包含了大量的基本能力集和厂商的私有能力集。

能力集是如何工作的?——能力协商

能力集的核心作用在于​能力协商​,这是 NETCONF 会话建立的第一个关键步骤。

当客户端(Client,如网管系统)与服务器端(Server,如网络设备)建立 NETCONF 会话(通常基于 SSH)后,双方会立刻向对方发送一个 <hello> 消息。这条消息就像初次见面时的自我介绍,里面包含了各自支持的所有能力集列表 。

这个过程的意义在于:

  • 客户端发现服务器​:客户端通过服务器的 <hello> 消息,可以精确地知道这台设备除了基本操作外,还支持哪些高级功能。
  • 确定功能交集​:双方根据对方通告的能力,确定后续通信中可以使用哪些功能。对于标准能力集,通常以服务器支持的能力为准;对于厂商扩展的私有能力,则以双方的交集为准 。
  • 指导后续操作​:协商完成后,客户端就可以放心地使用双方共同支持的能力来管理设备了。例如,如果服务器的 <hello> 消息中没有包含 :candidate 能力,客户端就不会尝试发送 <commit> 操作,从而避免了通信错误 。

获取能力集

通常我们需要查看官方的API文档,确认能力集的功能并使用,这在大多数情况都是适用的。

例如下面这个由H3C官方提供的一个关于IPv4路由的相关能力集,StaticRoute/Ipv4StaticRouteConfigurations的结构

<StaticRoute><Ipv4StaticRouteConfigurations><RouteEntry><DestVrfIndex></DestVrfIndex><DestTopologyIndex></DestTopologyIndex><Ipv4Address></Ipv4Address><Ipv4PrefixLength></Ipv4PrefixLength><NexthopVrfIndex></NexthopVrfIndex><NexthopIpv4Address></NexthopIpv4Address><IfIndex></IfIndex><Tag></Tag><Preference></Preference><Description></Description><Permanent></Permanent><BackupPathAttribute><BackupIfIndex></BackupIfIndex><BackupNexthopIpv4Address></BackupNexthopIpv4Address></BackupPathAttribute><BfdAttribute><BfdWorkMode></BfdWorkMode><BfdSourceIpv4Address></BfdSourceIpv4Address></BfdAttribute><TrackEntryID></TrackEntryID></RouteEntry></Ipv4StaticRouteConfigurations>
</StaticRoute>

如果你对英文稍有基础,便能看出相关的字段代表什么意思。你仅需要使用GET 获取 RouteEntry的值,便能得到所有路由相关的信息。

同样的,华为也会提供相关的文档。

image.png

不过有时候官方文档更新不一定及时,可能需要你从设备上获取能力集。比如你发现某个指令设备无法响应,可能是该设备不支持这个能力集,或者格式有所改变。

从设备获取能力集

以H3C为例,我们仅需要对设备发送以下报文,就能获取到netconf相关的信息,包括能力集,YANG文件列表及其内容。

<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="m-641" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get><filter type='subtree'><netconf-state xmlns='urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring'><getType 获取类型/></netconf-state></filter></get>
</rpc>

其中,获取类型可以为 capabilitiesdatastoresschemassessions 或者 statistics

  • 不指定 getType 时,该操作则获取 NETCONF 全部相关信息。
  • 当指定 getType 时,该操作仅返回相应类型的应答数据。其中,getType 取值为:
    • capabilities:表示该操作用来获取设备能力集。
    • datastores:表示该操作用来获取设备中的数据库。
    • schemas:表示该操作用来获取设备中的 YANG 文件名称列表。
    • sessions:表示该操作用来获取设备中的会话信息。
    • statistics:表示该操作用来获取 NETCONF 的统计信息。

例如,我们通过schemas方式来获取到设备的YANG文件列表。

image.png

读取YANG文件

YANG 文件中保存了设备支持的 NETCONF 操作,用户通过获取、并分析 YANG 文件的内容,从而获知设备支持哪些 NETCONF 操作。

YANG文件集成在设备软件中,命名格式为yang_identifier@yang_version.yang,用户不能通过dir命令显示YANG文件名,只能通过上节中的方式获取。

例如,你不知道该用什么格式,去实现设备VLAN相关的查询,配置。

使用上节中的查找到相关YANG文件。

执行如下netconf指令

<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-schema xmlns='urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring'>
<identifier>openconfig-vlan</identifier>
<version>2016-05-26</version>
<format>yang</format>
</get-schema>
</rpc>

在返回的内容中,我们可以看到,文件定义了非常多的结构字段,例如vlan-id, VLAN名称,状态……

image.png

根据YANG文件,我们就可以构建任何想要的netconf报文,去查询,配置设备。

总结

本文对netconf做了一些简单的介绍,基础环境的配置,和简单的验证,使用方法。在后续学习中,我们会使用Python来练习使用netconf。


http://www.jsqmd.com/news/482508/

相关文章:

  • 宁夏中宁玺赞枸杞实测:红柳沟庄园好枸杞,闭眼入不踩坑! - 宁夏壹山网络
  • 深入研究大数据领域的数据清洗算法与模型
  • 总要有个地方能够存放当前的自我
  • 操作系统引论
  • 小马智行Robotaxi接入腾讯出行,联手腾讯未来何在?
  • Stack pivot (leave_ret详解)
  • 京东自营家装来了,用AI进军家装未来何在?
  • P8635 [蓝桥杯 2016 省 AB] 四平方和【枚举+打表】
  • P8636 [蓝桥杯 2016 省 AB] 最大比例【GCD】
  • Go Viper
  • 鸽姆智库全球AI大模型14项核心弊端全维度诊断与根治性解决方案总报告
  • 量化交易系列(七):为什么所有公开的量化策略,都赚不了钱?
  • 【YOLO26实战全攻略】09——YOLO26多目标跟踪实战宝典:从原理到智慧园区人流统计全流程
  • Go Gorm
  • 拒绝 500 与 404:Spring Boot 全局异常处理机制深度解析与常见 API 错误避坑指南
  • 大模型的“大脑”是如何构造的?深度拆解语义建模的三种典型架构
  • 从参数校验失败到序列化陷阱:构建健壮 Spring Boot RESTful API 的十大高频错误复盘
  • 玩转二叉树
  • Thinkphp和Laravel框架都支持 博物馆文物科普知识普及系统微信小程序-
  • Thinkphp和Laravel框架都支持微信小程序的展会展馆纪念馆门票在线预约管理系统19rtj
  • Thinkphp和Laravel框架都支持微信小程序的校园外卖系统 商家
  • Thinkphp和Laravel框架都支持心血管疾病风险预测小程序设计与实现-
  • Thinkphp和Laravel框架都支持微信小程序的校园社区报修上门维修系统
  • 网络安全、计算机网络、理论技术+企业级的产品实践经验相结合Part1 网络安全产品终端侦测与响应系统(EDR)网络侦测与响应系统(NDR)多引擎脆弱性(漏洞)扫描(VAS)网络安全威胁情报
  • 10个成功案例:AI应用架构师是如何用AI激活元宇宙商业生态的?
  • HashMap扩容机制
  • 更新-常用的Flask第三方扩展库清单合集教程和详细的代码示例
  • JavaDays08顺序结构And选择结构
  • 网络安全、渗透测试、安全开发、安全分析岗位面试笔记和参考答案,现已全部更新到服务器
  • HashMap详解