Netconf 与 YANG

Netconf(RFC 6241)提供标准化的设备配置管理协议,YANG(RFC 6020/7950)是描述配置与状态数据的建模语言,两者构成模型驱动运维的基础。

为什么用 Netconf

传统 CLI/SNMP 问题Netconf 方案
命令无标准化,多厂商不一致统一 YANG 模型
配置与状态混在一起运行配置/候选配置分离
传输不可靠基于 SSH(端口 830)
无法事务化支持配置回滚

Netconf 架构

客户端(控制器/脚本) ⇄ SSH 会话 ⇄ 设备 Netconf 服务器
  • 报文基于 XML,封装在 SSH 通道内
  • 能力(Capability):设备通告支持的模型与操作

Netconf 操作

操作作用
<get>获取状态数据
<get-config>获取配置
<edit-config>修改配置(merge/replace/create/delete)
<copy-config>复制配置
<delete-config>删除配置
<commit>提交候选配置
<lock>/<unlock>锁定配置防止并发修改
<rpc>调用自定义操作

YANG 基础

module example-vlan {
  yang-version 1.1;
  namespace "urn:example:vlan";
  prefix vlan;
 
  container vlans {
    list vlan {
      key "id";
      leaf id {
        type uint16;
      }
      leaf name {
        type string;
      }
    }
  }
}

核心概念:container(容器)、list(列表)、leaf(叶子)、module(模块),用 XPath 定位节点,如 /vlans/vlan[id='10']/name。

Python 示例(ncclient)

from ncclient import manager
 
m = manager.connect(
    host="192.168.1.254",
    port=830,
    username="admin",
    password="Huawei@123",
    hostkey_verify=False,
)
 
# 获取配置
res = m.get_config(source="running")
print(res.xml)
 
# 修改配置
config = '''
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <ifm xmlns="http://www.huawei.com/netconf/vrp">
    <interfaces>
      <interface>
        <ifName>Vlanif10</ifName>
        <ifDescr>auto-config</ifDescr>
      </interface>
    </interfaces>
  </ifm>
</config>
'''
m.edit_config(target="running", config=config)
m.close_session()

华为设备启用 Netconf

[Huawei] snetconf server enable
[Huawei] aaa
[Huawei-aaa] local-user netconf password cipher Huawei@123
[Huawei-aaa] local-user netconf service-type ssh

与 iMaster NCE 配合

  • 控制器通过 Netconf 批量下发设备配置(VLAN、接口、EVPN 等)
  • 北向 REST API 对上层应用开放
  • 配合 YANG 模型仓库实现”配置即代码”

验证命令

<Huawei> display snetconf server status
<Huawei> display netconf session

🔗 相关笔记:06.01_网络自动化基础 06.03_Telemetry与iMaster_NCE 05.03_SDN与NFV