目 录

1 NETCONF. 1

1.1 功能介绍... 1

1.1.1 NETCONF概述... 1

1.1.2 NETCONF的协议结构... 1

1.1.3 NETCONF会话交互过程... 2

1.1.4 鉴权机制... 7

1.1.5 协议规范... 9

1.2 配置任务概览... 9

1.3 配置NETCONF服务器与客户端进行通信... 9

1.3.1 功能简介... 9

1.3.2 配置限制与指导... 9

1.3.3 配置准备... 10

1.3.4 配置步骤... 10

1.4 配置NETCONF鉴权... 11

1.4.1 功能简介... 11

1.4.2 配置限制与指导... 11

1.4.3 配置步骤... 11

1.5 监视与维护... 12

1.6 典型配置举例... 12

1.6.1 NETCONF配置举例... 12

 


1 NETCONF

1.1   功能介绍

1.1.1  NETCONF概述

随着网络规模的增大、复杂性的增加和异构性的增强,传统的IP网络管理协议SNMPSimple Network Management Protocol简单网络管理协议)对当前复杂网络的管理变得越来越困难,尤其无法满足配置管理以及大型网络的应用系统开发方面的需求。为了弥补SNMP的不足,IETF组织制定基于XMLExtensible Markup Language,可扩展标记语言)的网络管理配置协议——NETCONFNetwork Configuration Protocol,网络配置协议)。它提供了一种可编程的、对网络设备进行配置和管理的方法。该协议使用XML格式的报文设置参数、获取参数值、获取统计信息等,具有良好的扩展性,使网络设备的配置管理工作变得更简单更高效。

1.1.2  NETCONF协议结构

NETCONF的通信模式采用C/S模式,设备上运行协议的服务器程序,用户运行协议的客户端程序。协议报文格式为XML格式,包括所有配置数据和协议消息均为XML格式。与ISO/OSI分层类似,NETCONF协议由下至上分为四层:传输层、RPC层、操作层、内容层。如1-1所示。

图1-1     NETCONF的协议结构图

 

1.    传输层

传输层为NETCONF协议提供安全传输通道,使用SSHSOAPBEEP等安全协议,当前一般使用SSH协议。

2.    RPC

RPC层提供了一个简单的、与传输协议无关的机制,包含一些错误反馈消息元素的规定。RPC层定义了三种消息类型:

l  Hello:在NETCONF客户端与服务器刚建立会话时完成能力集交换。

l  RPCRPC-ReplyRPCNETCONF客户端发起的发送给服务器的请求消息;RPC-ReplyNETCONF服务器响应客户端的响应数据,不能主动发起,仅能在收到RPC之后回复,且必须携带与收到的RPC相同的message-id

l  Notification:以订阅方式进行消息通知。

3.    操作层

RPC中应用的基本原语操作集,定义了9种基础的操作方法。

l  获取数据操作:getget-config

l  配置操作:edit-configcopy-configdelete-config

l  对设备临界资源(配置文件等)并发操作时的锁保护:lockunlock

l  结束会话操作:close-sessionkill-session

4.    内容层

内容层是被管理的数据对象集合。内容层是NETCONF协议目前唯一没有被标准化、没有统一数据模型的层。

*     说明

锐捷产品使用YANG对数据建模,使用XML传输数据。

 

图1-2     NETCONF会话交互报文示意图

 

1.1.3  NETCONF会话交互过程

NETCONF会话的交互过如1-2所示,可以分为三部分。

1.    会话连接

(1)   NETCONF传输层依赖于SSH协议。设备上NETCONF服务端启动NETCONF进程后,建立一个监听端口。

(2)   服务端监听830端口,建立SSH通道:经过一系列的传输算法协商(其中包含密钥协商、压缩算法、哈希算法、加密算法、签名算法等)和用户认证后建立SSH通道。

(3)   NETCONF传输层的连接会话建立,NETCONF客户端可以通过这个会话同NETCONF服务器进行交互。

*     说明

协议规定NETCONF默认的SSH TCP端口是830,可以根据实际情况自行配置NETCONF SSH TCP端口。

 

2.    能力集交换

NETCONF会话建连接之后,双方立即通过互相发送Hello报文提供各自实现的能力集,对自己不理解的或者没有实现的能力进行忽略。但是双方都必须支持协议基本能力(urn:ietf:params:netconf:base:1.1)。如果需要兼容旧协议版本,双方还需要支持旧协议基本能力(urn:ietf:params:netconf:base:1.0)。最终取得一个两端实现能力的交集,以进行后续的数据操作与管理。

*    注意

     交换的能力值除了在NETCONF RFC中定义的“能力”外,开发人员可以通过遵循RFC中描述的规范格式添加额外的“能力”。

     客户端发给服务端的能力交互报文,不得带有会话ID节点(<session-id>)。

 

3.    协议操作

l  get:获取设备状态或配置数据。

客户端发送报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<get>

<filter type="subtree">

    配置数据(或者状态数据)过滤规则

</filter>

</get>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

获取到的配置数据(或者状态数据)

</data>

</rpc-reply>

如果设备上状态数据的所有子集都无法匹配过滤规则,则会应答空的data节点,如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="消息ID " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"/>

</rpc-reply>

l  get-config:根据操作内容的过滤节点获取相应的配置数据。

客户端发送报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<get-config>

<source>

<running/>

</source>

<filter type="subtree">

   协议过滤规则

</filter>

</get-config>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

获取到的配置数据

</data>

</rpc-reply>

如果设备上配置数据的所有子集都无法匹配过滤规则,则会应答空的data节点,如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"/>

</rpc-reply>

*     说明

get-config操作通过各种子树过滤规则获取相应的配置数据子集,但是不能获取设备状态数据。

 

l  edit-config:根据数据模型定义以及操作属性进行设备配置。

配置的报文中,包含5个操作属性,在下发的XML报文中配置节点的operation属性描述中给出,这5个操作属性分别是:

*        merge:将edit-config报文中包含该属性的配置数据合并到指定设备配置文件中或者数据库中。如果配置数据不存在,则创建该配置数据。

*        replace:将edit-config报文中包含该属性的配置数据替换指定设备配置文件中或者数据库中的相应配置数据节点。如果该配置数据不存在,则直接根据下发内容创建该配置。

*        create:在指定配置数据文件中或者数据库中创建edit-config报文中包含该属性的配置数据。如果配置数据不存在,则成功下发内容创建该配置数据;如果配置数据已经存在,则会应答rpc-error报文,error-tag值为“data-exists”。

*        delete:在指定配置数据文件中或者数据库中删除edit-config报文中包含该属性的配置数据。如果配置数据不存在,则会应答rpc-error报文,error-tag值为data-missing;如果配置数据存在,则直接删除相应的配置。

*        remove:在指定配置数据文件中或者数据库中移除edit-config报文中包含该属性的配置数据。如果配置数据不存在,则忽略该操作返回ok;如果配置数据存在,则直接移除相应的配置。

客户端发送报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<edit-config>

<target> <running/> </target>

<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

    配置数据

</config>

</edit-config>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="消息ID " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<ok/>

</rpc-reply>

报文中携带error-option节点。error-option节点是枚举类型的节点,设备可以支持的值有:

*        continue-on-erroredit-config操作时,遇到配置出错会记录当前的错误节点并继续处理剩余的配置,但是最后返回错误信息(即出现任何配置错误,最终的应答报文均为rpc-error)。

*        stop-on-error:该值为error-option的缺省值。edit-config操作时,遇到第一个错误时,则立刻停止当前的edit-config操作,当前配置报文前面配置的数据都已经生效(出错之前的配置)。

一般如下格式:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<edit-config>

<target> <running/> </target>

<error-option>配置出错时的行为选项</error-option>

<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> 

    配置数据

</config>

</edit-config>

</rpc>

*     产品/版本支持情况

目前设备对replace操作暂不支持,如果有下发该属性操作按merge操作处理。

 

*     说明

     edit-config报文中没有携带error-option节点时,默认该节点值为stop-on-error,即一旦遇到哪个节点配置出错,则立刻停止同一个报文中剩余的后续配置并返回错误(rpc-error)

     edit-config报文中没有携带test-option节点,默认该节点的值为test-then-set

     edit-config报文中没有携带default-operation节点,默认该节点的值为merge操作。

 

l  copy-config:配置文件复制,如将候选配置复制至配置文件、启机配置复制至运行配置、运行配置写入启机配置等,这些需要目标文件支持可写的能力。

客户端发送格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <copy-config>

  <target>

   <startup/>

  </target>

  <source>

   <running/>

  </source>

 </copy-config>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <ok/>

</rpc-reply>

l  delete-config:删除设备配置文件,但不允许删除设备的运行文件。

客户端发送格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <delete-config>

  <target>

   <startup/>

  </target>

 </delete-config>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <ok/>

</rpc-reply>

*     产品/版本支持情况

目前设备仅支持将启机配置同步至运行配置。

 

l  lock:对配置数据文件进行锁保护,允许当前客户端进行访问或者修改。同时其他客户端或者非NETCONF客户端(如SNMP或者CLI)无法访问或者修改。客户端发送格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <lock>

  <target>

   <running/>

  </target>

 </lock>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <ok/>

</rpc-reply>

*     说明

RFC6241说明lock是用来锁定配置数据库(配置文件),防止多个源(如CLISNMP以及多个NETCONF会话等)同时对设备的配置文件进行修订,导致引入其他无关的配置修订。设备当前针对这个操作做一些裁剪,只能防止多个NETCONF会话同时修订运行配置,保证配置数据修订安全。

 

l  unlock:对配置数据库(配置文件,在设备中指的是运行配置)进行解锁操作,与lock操作是成对操作。

客户端发送格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <unlock>

  <target>

   <running/>

  </target>

 </unlock>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx " xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <ok/>

</rpc-reply>

l  close-session:关闭当前会话,包括资源、锁的释放以及连接断开等。

客户端发送格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <close-session/>

</rpc>

服务端应答报文格式如下:

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply message-id="xxx" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <ok/>

</rpc-reply>

*     说明

使用close-session操作关闭当前会话时,如果有业务在处理,必须保证当前业务处理完毕,并且不再接受新的处理处理请求,再执行关闭会话操作。

 

l  kill-session:强制关闭会话,包括资源、锁的释放以及连接断开等。

*    注意

     使用kill-session操作强行关闭会话时,如果有当前业务在处理,必须停止处理,并且将未完成的业务回滚至业务处理开始之前,再执行关闭会话请求。

     kill-session操作不允许关闭当前会话。

 

1.1.4  鉴权机制

NETCONF鉴权机制用于管理特定用户执行NETCONF操作和访问NETCONF资源权限,使这些用户只能执行或访问NETCONF协议规定的操作和数据节点信息。

1.    NETCONF鉴权功能支持的访问权限

缺省情情况下,没有配置NETCONF鉴权功能,认证用户具有所有NETCONF权限。支持的访问权限如下:

l  Create:允许和禁止添加新的数据节点。

l  Read:允许和禁止读取数据节点信息。

l  Update:允许和禁止更新数据节点。

l  Delete:允许和禁止删除数据节点。

l  Exec:允许和禁止所有的协议操作。

2.    NETCONF鉴权功能支持的内容

NETCONF鉴权功能支持的内容包括RPC方法鉴权和数据节点鉴权。

l  RPC方法鉴权

NETCONFRPC方法鉴权用于控制NETCONF协议规定的操作方法权限。具体RPC方法以及默认权限如1-1所示。

表1-1     RPC方法以及默认权限说明表

RPC方法

功能说明

默认权限(读:R;写:W;执行:X

get

获取数据

XàR

get-config

获取配置

XàR

edit-config

修改配置

XàW

copy-config

源配置替代目标配置

X

delete-config

删除配置

X

validate

语法校验

X

commit

候选配置生效运行配置

X

cancel-commit

取消confirmed-commit操作

X

discard-changes

放弃还未生效的候选配置

X

lock/unlock

配置上锁/解锁

X

close-session

关闭当前会话

X

kill-session

关闭其他会话

X

get-schema

获取yang文件

X

 

*     说明

     所有的RPC方法默认都需要执行权限才能操作。其中getget-configedit-config需要检查数据节点的读和写权限。

     close-session默认允许,无法配置禁止。

     delete-configkill-session默认情况下是禁止,可以配置允许。其他RPC方法,默认情况下是允许。

     lock/unlock是需要配对,只要配置lock权限,unlock也具有同样权限。

 

l  数据节点鉴权

NETCONF的数据节点鉴权用于控制NETCONF数据节点的权限。可以做到对所有模块、单个模块和特定的数据节点的权限进行控制。具体情况如下:

*        如果只配置“/”,则说明是对所有模块的数据节点权限控制。

*        如果配置到模块名,则说明是对单个模块的数据节点权限控制,例如:/rg-snmp:snmp

*        其他情况则是对具体模块下的数据节点权限控制。

1.1.5  协议规范

l  RFC4741NETCONF Configuration Protocol

l  RFC4742Using the NETCONF Configuration Protocol over Secure Shell (SSH)

l  RFC4743Using NETCONF over the Simple Object Access Protocol (SOAP)

l  RFC4744Using the NETCONF Protocol over the Blocks Extensible Exchange Protocol (BEEP)

l  RFC5277NETCONF Event Notifications

l  RFC5381Experience of Implementing NETCONF over SOAP

l  RFC5539NETCONF Over Transport Layer Security (TLS)

l  RFC5717Partial Lock RPC for NETCONF

l  RFC6022NETCONF Monitoring Schema

l  RFC6241Network Configuration Protocol

l  RFC6242Using the Network Configuration Protocol over Secure Shell

l  RFC6243With-defaults capability for NETCONF

l  RFC6470NETCONF Notification Events

l  RFC6536NETCONF Access Control Model (NACM)

*     说明

RFC4741RFC4742已分别被RFC6241RFC6242取代。

 

1.2   配置任务概览

NETCONF配置任务如下:

(1)   配置NETCONF服务器与客户端进行通信

(2)   (可选)配置NETCONF鉴权

1.3   配置NETCONF服务器与客户端进行通信

1.3.1  功能简介

NETCONF服务器端开启NETCONF功能,与客户端能够正常通信,实现管理网络设备的目的。

1.3.2  配置限制与指导

l  执行netconf yang multi-revision命令,必须在NETCONF服务端能力报文(Hello)通告之前配置。

l  执行no netconf yang multi-revision命令,必须在NETCONF服务端能力报文(Hello)通告之前配置,且能力通告报文中一个YANG模块只通告它当前最新版本。

l  严格校验模式可能会导致部分在轻量级校验模式下可以下发的XML被拦截。

1.3.3  配置准备

NETCONF协议承载在SSH协议上,因此在使用NETCONF功能之前,需要在设备上先配置SSH。配置请参考“SSH配置”。

1.3.4  配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   配置NETCONF服务器属性参数。以下配置均为可选,请根据实际情况选择配置。

*        (可选)配置NETCONF服务开启。

netconf enable

缺省情况下,NETCONF功能处于开启状态。

*        (可选)配置NETCONF支持的会话最大连接个数。

netconf max-sessions max-sessions-numbers

缺省情况下,NETCONF支持的会话最大连接个数为5个。

*        (可选)配置NETCONF会话edit-config操作的超时时间。

netconf timeout timeout

缺省情况下,NETCONF会话edit-config操作的超时时间为120秒。

*        (可选)配置YANG模块多版本通告。

netconf yang multi-revision

缺省情况下,NETCONFYANG模块多版本通告功能处于开启状态。

*        (可选)配置NETCONF能力。

netconf capability{ candidate | rollback | validate }

缺省情况下,未配置NETCONF相关能力功能。

*        (可选)配置NETCONF校验模式。

netconf calibration-mode { lightweight | strict }

缺省情况下,NETCONF校验模式为轻量级校验模式。

*        (可选)配置NETCONF日志开关。

netconf log { capability | edit | get | session }

缺省情况下,NETCONF日志开关处于关闭状态。

*        (可选)配置NETCONF服务端口号。

netconf port port-number

缺省情况下,NETCONF服务端口号为830

1.4   配置NETCONF鉴权

1.4.1  功能简介

配置NETCONF鉴权机制用于管理特定用户执行NETCONF操作和访问NETCONF资源权限,使这些用户只能执行或访问NETCONF协议规定的操作和数据节点信息。

1.4.2  配置限制与指导

l  不能创建用户组“星号(*)”,用户组“星号(*)”表示所有用户组。

l  对于单个规则列表情况,用户规则匹配的顺序是根据用户配置的规则顺序进行。如果操作匹配到允许规则,则说明操作是被允许。如果操作匹配到禁止规则或者没有匹配到规则,则说明操作在当前规则列表是被禁止。

l  对于多个规则列表情况,不同规则列表下的规则也是按照用户配置的顺序进行匹配。如果操作匹配到一个规则列表中的允许规则,则说明操作是被允许。如果操作匹配到禁止规则,则说明操作是被禁止。如果当前的规则列表没有匹配到任何规则,则匹配下一个规则列表的规则。

l  RPC操作方法包括getget-configedit-configcopy-configdelete-configvalidatecommitcancel-commitdiscard-changeslockkill-sessionget-schema等。

l  没有配置规则类型情况下,则表示同时开启对RPC操作方法和数据节点规则权限控制。

l  规则下有配置开启RPC操作方法规则控制。如果规则下配置的访问操作权限包括exec权限,则进行RPC操作方法检查时会进行该规则的匹配;否则进行RPC操作方法检查时不会进行该规则的匹配。

l  规则下有配置开启数据节点规则控制。如果规则下配置的访问操作权限包括createreadupdatedelete中至少一种权限,则进行数据节点检查时会进行该规则的匹配;否则进行数据节点检查时不会进行该规则的匹配。

1.4.3  配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   进入鉴权配置模式。

netconf acm

(4)   配置用户组并进入用户组模式。

user-group-name name

缺省情况下,未配置用户组。

(5)   配置用户组关联用户。

user-name name

缺省情况下,未配置用户组关联用户。

(6)   退出到鉴权配置模式。

exit

(7)   配置规则列表并进入规则列表模式。

rule-list name

缺省情况下,未配置规则列表。

(8)   配置规则列表关联用户组。

user-group { * | name }

缺省情况下,未配置规则列表关联用户组。

(9)   配置规则并进入规则模式。

rule name action { permit | deny }

缺省情况下,未配置规则。

(10) 配置规则类型。

rule-type { rpc-name { name | * } | path path }

缺省情况下,未配置规则类型。

(11) 配置规则的访问操作权限。

access-operation { * | { create | delete | exec | read | update } * }

缺省情况下,未配置规则的访问操作权限。

1.5   监视与维护

可以通过show命令行查看功能配置后的运行情况以验证配置效果。

表1-2     NETCONF监视与维护

作用

命令

查看用户关联的规则列表信息、规则列表详细信息和用户组信息

show netconf authorization user-name name { rule-list [ detail ] | user-group }

查看NETCONF当前所有的会话信息

show netconf session

查看NETCONF当前全局统计信息

show netconf statistics

查看设备当前支持的所有yang文件

show netconf yang file

查看设备当前支持的所有节点路径

show netconf yang node-path

查看设备当前支持的所有yang模型树

show netconf yang tree

 

1.6   典型配置举例

1.6.1  NETCONF配置举例

1.    组网需求

对于安全性、可扩展性要求高的网络设备管理需求,可以使用NETCONF作为网管工具。NETCONF的承载协议为SSH协议,SSH协议作为应用层的安全协议,保障了NETCONF的安全性。以1-3为例,用户通过NETCONF网络管理软件,来对网络设备进行管理和监控。

2.    组网图

图1-3     NETCONF组网图

 

3.    配置要点

l  配置NETCONF服务端的网络管理口IP地址,保证NETCONF的客户端与服务端之间三层路由可达。

l  NETCONF服务端上部署SSH功能。

l  NETCONF服务端上配置NETCONF功能相关参数,以满足实际场景需求。

l  NETCONF客户端软件通过SSH协议连接到NETCONF服务端,实现对网络设备的管理和监控。

4.    配置步骤

# 配置NETCONF服务端的网络管理口IP地址。

Hostname> enable

Hostname# configure terminal

Hostname(config)# interface mgmt 0

Hostname(config-if-Mgmt 0)# ip address 172.29.71.62 255.255.255.0

Hostname(config-if-Mgmt 0)# gateway 172.29.71.1

# 开启SSH功能,并生成本地密钥。密钥类型的选择原则,请参考“SSH命令手册”中的crypto key generate命令的使用指导。

Hostname> enable

Hostname# configure terminal

Hostname(config)# enable service ssh-server

Hostname(config)# crypto key generate rsa

% You already have RSA keys.

% Do you really want to replace them? [yes/no]:y

Choose the size of the rsa key modulus in the range of 512 to 2048

and the size of the dsa key modulus in the range of 360 to 2048 for your

Signature Keys. Choosing a key modulus greater than 512 may take

a few minutes.

Choose the size of the ecc key modulus from (256, 384, 521)

 

How many bits in the modulus [1024]:2048

% Generating 2048 bit RSA1 keys ...[ok]

% Generating 2048 bit RSA keys ...[ok]

Hostname(config)#

# 创建用户名为netconfSSH用户,并配置密码为netconf_1234

Hostname(config)# username netconf privilege 15 password netconf_1234

*    注意

为保证安全性,请定期修改用户名及密码。

 

# 配置VTY线路本地用户认证。

Hostname(config)# line vty 0 35

Hostname(config-line)# login local

# NETCONF服务端上开启NETCONF服务功能。

Hostname(config)# netconf enable

# NETCONF服务端上配置支持的会话最大连接个数为6

Hostname(config)# netconf max-sessions 6

# NETCONF服务端上配置NETCONF会话edit-config操作的超时时间为100秒。

Hostname(config)# netconf timeout 100

# NETCONF服务端上配置YANG模块多版本通告。

Hostname(config)# netconf yang multi-revision

# NETCONF服务端上配置开启NETCONF服务端candidate能力。

Hostname(config)# netconf capability candidate

# NETCONF服务端上配置NETCONF校验模式为轻量级校验模式。

Hostname(config)# netconf calibration lightweight

# NETCONF服务端上配置NETCONF会话相关的Syslog日志开关。

Hostname(config)# netconf log session

# NETCONF服务端上配置NETCONF服务端口号为5000

Hostname(config)# netconf port 5000

# 1-4所示,使用NETCONF客户端软件通过SSH协议登录到NETCONF服务端,实现对网络设备的管理和监控。

图1-4     NETCONF客户端软件登录设备示例图

 

5.    验证配置结果

# 通过ping命令查看NETCONF的客户端与服务端是否三层可达。

Hostname# ping oob 172.29.71.100

Sending 5, 100-byte ICMP Echoes to 172.29.71.100, timeout is 2 seconds:

 < press Ctrl+C to break >

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/3 ms.

Hostname#

# 通过show service命令查看SSH服务是否开启。

Hostname# show service

snmp-agent  : enabled

ssh-server  : enabled

telnet-server : enabled

# 在设备上通过show netconf session命令查看NETCONF客户端软件使用SSH协议连接NETCONF服务端成功。

Hostname# show netconf session

************************session information************************

             Session count: 1

*******************************************************************

Session ID       : 20

Session version     : 1.1

Session transport    : netconf-ssh

Session login IP    : 172.29.69.21  

Session login time   : 2020-12-18T08:26:30Z

Session in rpcs     : 0

Session in bad rpcs   : 0

Session out rpc errors : 0

Session out notification: 0

Session out rpcs    : 0

Session out send fail  : 0

Session get       : 0

Session get config   : 0

Session edit config   : 0

Session copy config   : 0

Session delete config  : 0

Session close session  : 0

Session unsupport    : 0

Session lock_or_unlock : 0

===================================================================

6.    配置文件

NETCONF_Server的配置文件

hostname Hostname

!

username netconf privilege 15 password netconf_1234

!

netconf log session

netconf capability candidate

netconf port 5000

netconf max-sessions 6

netconf timeout 100

!

enable service ssh-server

!

interface Mgmt 0

 ip address 172.29.71.62 255.255.255.0

 gateway 172.29.71.1

!

line vty 0 35

 login local

!

end

1.6.2  NETCONF鉴权配置举例

1.    组网需求

用户user1拥有所有模块的get操作权限,用户user2拥有对SNMP模块的创建权限

2.    组网图

图1-5     NETCONF鉴权组网图

 

3.    配置要点

配置用户user1对所有模块具有get操作权限。

配置用户user2仅对SNMP模块拥有创建权限。

4.    配置步骤

(1)   配置用户user1对所有模块具有get操作权限。

# 配置用户user1

Device> enable

Device# configure terminal

Device(config)# username user1 password test12345

# 配置进入鉴权模式。

Device(config)# netconf acm

# 配置用户组guser1

Device(config-nacm)# user-group-name guser1

# 配置用户组guser1关联用户user1

Device(config-nacm-user-group)# user-name user1

Device(config-nacm-user-group)# exit

# 配置规则列表rule-list1

Device(config-nacm)# rule-list rule-list1

# 配置规则列表rule-list1关联用户组guser1

Device(config-nacm-rule-list)# user-group guser1

# 配置允许规则rule1

Device(config-nacm-rule-list)# rule rule1 action permit

# 配置RPC方法规则类型get

Device(config-nacm-rule-list-rule)# rule-type rpc-name get

Device(config-nacm-rule-list-rule)# end

(2)   配置用户user2仅对SNMP模块拥有创建权限。

# 配置用户user2

Device# configure terminal

Device(config)# username user2 password test12345

# 配置进入鉴权模式。

Device(config)# netconf acm

# 配置用户组guser2

Device(config-nacm)# user-group-name guser2

# 配置用户组guser2关联用户user2

Device(config-nacm-user-group)# user-name user2

# 配置规则列表rule-list2

Device(config-nacm-user-group)# exit

# 配置规则列表rule-list2关联用户组guser2

Device(config-nacm)# rule-list rule-list2

Device(config-nacm-rule-list)# user-group guser2

# 配置允许规则rule2

Device(config-nacm-rule-list)# rule rule2 action permit

# 配置数据节点规则类型,并配置数据节点为SNMP模块名。

Device(config-nacm-rule-list-rule)# rule-type path /rg-snmp:snmp

# 配置访问操作权限为create

Device(config-nacm-rule-list-rule)# access-operation create

5.    验证配置结果

# 通过show netconf authorization user-name user2 user-group命令查看用户user1的用户组信息。

Device # show netconf authorization user-name user1 user-group

UserGroup: guser1

# 通过show netconf authorization user-name user2 user-group命令查看用户user1的用户组信息。

Device # show netconf authorization user-name user2 user-group

UserGroup: guser2

# 通过show netconf authorization user-name user1 rule-list detail命令查看用户user1关联的规则列表详细信息。

Device# show netconf authorization user-name user1 rule-list detail

RuleList: rule-list1

 -------------------------------------------------------------------

 Rule       Action  AccessOperation  Type   Entity   

 -------------------------------------------------------------------

 rule1      permit  RCUDX       RPC    get

 [R:Read C:Create U:Update D:Delete X:Exec]

# 通过show netconf authorization user-name user2 rule-list detail命令查看用户user2关联的规则列表详细信息。

Device# show netconf authorization user-name user2 rule-list detail

RuleList: rule-list2

 -------------------------------------------------------------------

 Rule       Action  AccessOperation  Type   Entity   

 -------------------------------------------------------------------

 rule2      permit  -C---       PATH   /rg-snmp:snmp

 [R:Read C:Create U:Update D:Delete X:Exec]

6.    配置文件

Device的配置文件

hostname Device

!

username user1 password test12345

username user2 password test12345

!

netconf acm

 user-group-name guser1

 user-name user1

 user-group-name guser2

 user-name user2

 rule-list rule-list1

 user-group guser1

 rule rule1 action permit

  rule-type rpc-name get

 rule-list rule-list2

 user-group guser2

 rule rule2 action permit

  access-operation create

  rule-type path /rg-snmp:snmp

!

end