关于 NETCONF

网络工程 管理 专用网 网络配置
2021-07-24 11:17:37

我正在尝试使用 Netconf 在 IOS-XR (Cisco) 上进行基本操作。这包括最初设置 netconf 连接,如下所示: ssh [hostname] -p 830 -s netconf

一旦连接成功,路由器返回如下所示的内容(你好)

<?xml version=”1.0″ encoding=”UTF-8″?><hello><capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
<capability>urn:ietf:params:netconf:capability:writeable-running:1.0</capability>
<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>
<capability>urn:ietf:params:netconf:capability:url:1.0</capability>
<capability>urn:cisco:params:netconf:capability:notification:1.0</capability>
</capabilities><session-id>1731357996</session-id></hello>]]>]]

然后我向路由器发回一个问候,如下所示:

<?xml version=”1.0″ encoding=”UTF-8″?>
<hello>
<capabilities>
    <capability>urn:ietf:params:netconf:base:1.0</capability>
</capabilities>
</hello>]]>]]>

但是,此后没有响应,如果我尝试执行更多操作,连接将关闭。您能否确认我哪里出错了/为什么会发生这种情况?

1个回答

XR 可能需要 NETCONF 1.1。如果您启用调试,您可能会在日志中找到类似的内容:

RP/0/RSP0/CPU0:Sep  8 09:47:27.513 : netconf[1120]: ERR: NC: Error, Capability urn:ietf:params:netconf:base:1.1 not found
RP/0/RSP0/CPU0:Sep  8 09:47:27.513 : netconf[1120]: ERR: NC: Hello message validation failed
RP/0/RSP0/CPU0:Sep  8 09:47:27.514 : netconf[1120]: ERR: NC: Callback handling decoded data returned error: 'Netconf server' detected the 'warning' condition 'NC_ERRCODE_REQ_INVALID'
RP/0/RSP0/CPU0:Sep  8 09:47:27.514 : netconf[1120]: ERR: NC: Decoding of incoming NETCONF data failed: 'Netconf server' detected the 'warning' condition 'NC_ERRCODE_REQ_INVALID'
RP/0/RSP0/CPU0:Sep  8 09:47:27.514 : netconf[1120]: ERR: NC: Failed to handle SSH IPC message: 'Netconf server' detected the 'warning' condition 'NC_ERRCODE_REQ_INVALID', msg:166df16c, session:200fe198

所以在你的 hello 中加入 1.1 支持(我也用命名空间来限定 hello):

<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <capabilities>
        <capability>urn:ietf:params:netconf:base:1.0</capability>
        <capability>urn:ietf:params:netconf:base:1.1</capability>
    </capabilities>
</hello>

但是,我建议您使用一个库来讨论 NETCONF,例如 Python 的 ncclient。]]>]]>NETCONF 1.0 中使用的成帧格式(以 结尾的消息)已被弃用,并且在 1.1 中引入了新的分块成帧机制。您需要知道消息的长度,因此使用 lib 比手动执行要容易得多。

此外,查看您的 XR 设备宣布的功能,您似乎运行的是一个相当旧的版本。6.0 可用并提供了一套相当不错的 YANG 模块,请参阅http://plajjan.github.io/Cisco-IOS-XR-6-0-and-YANG/