Netconf是我这几年新学的网络管理协议,它比SNMP牛在哪儿?它是面向操作的,不光能读,还能改配置,而且返回的是结构化XML,解析起来比SNMP的OID直观多了。
华为设备从VRP V200R003版本开始支持Netconf,我手头用的V200R010,用ncclient这个Python库来读取接口状态。
先说连接,ncclient的manager.connect()方法,host填设备IP,port默认830(Netconf标准端口),username和password跟SSH登录一样。华为设备默认开Netconf,要在系统视图下看 netconf paramter 确认端口号。
读取接口状态用 get 操作,过滤条件用XPath表达式。华为的接口状态XPath是 ietf-interfaces:interfaces-state/interface,能拿到接口名、IP地址、物理状态、协议状态等。
我写了个脚本,定时用Netconf读所有物理接口的状态,跟前一天的快照比对,发现状态变化就告警。比SNMP Trap还能提前发现问题——Trap要等设备主动发,Netconf是主动去查。
有个坑要注意:华为设备的Netconf返回XML里,接口名大小写跟CLI里敲的命令不一样。比如CLI里是 GigabitEthernet0/0/1,XML里可能是 GE0/0/1,做字段映射要统一格式。
YANG模型这块,华为用的 ietf-interfaces 标准模型,还加了很多私有扩展。读标准字段用 ietf-interfaces,读华为私有字段要到 huawei-interface 命名空间下找。
对比SNMP,Netconf的优势是:第一,返回结构化数据,不用像SNMP那样一个OID一个OID地读;第二,支持事务操作,改配置要么全成功要么全回滚;第三,有确认提交机制,防止配置改了一半设备断连。
我现在的运维流程里,日常状态巡检用Netconf替代了SNMP读操作,配置变更还是用SSH+expect,等哪天把Netconf的edit-config操作搞稳定了再全面切换。
Netconf和SNMP的对比很直观: