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