目 录
随着网络规模的增大、复杂性的增长和异构性的加强,传统的IP网络治理和谈SNMP(Simple Network Management Protocol,单一网络治理和谈)对当前复杂网络的治理变得越来越难题,尤其无法满足配置治理以及大型网络的利用系统开发方面的需要。为了添补SNMP的不及,IETF组织造订基于XML(Extensible Markup Language,可扩大象征说话)的网络治理配置和谈——NETCONF(Network Configuration Protocol,网络配置和谈)。它提供了一种可编程的、对网络设备进行配置和治理的步骤。该和谈使用XML体式的报文设置参数、获取参数值、获取统计信息等,拥有优良的扩大性,使网络设备的配置治理工作变得更单一更高效。
NETCONF的通讯模式选取C/S模式,设备上运行和谈的服务器法式,用户运行和谈的客户端法式。和谈报文体式为XML体式,蕴含所有配置数据和和谈新闻均为XML体式。与ISO/OSI分层类似,NETCONF和谈由下至上分为四层:传输层、RPC层、操作层、内容层。如图1-1所示。
图1-1 NETCONF的和谈结构图

传输层为NETCONF和谈提供安全传输通路,使用SSH、SOAP和BEEP等安全和谈,当前通常使用SSH和谈。
RPC层提供了一个单一的、与传输和谈无关的机造,蕴含一些谬误反馈新闻元素的划定。RPC层界说了三种新闻类型:
l Hello:在NETCONF客户端与服务器刚成立会话时实现能力集互换。
l RPC和RPC-Reply:RPC是NETCONF客户端提议的发送给服务器的要求新闻;RPC-Reply是NETCONF服务器响应客户端的响应数据,不能自动提议,仅能在收到RPC之后回复,且必须携带与收到的RPC一样的message-id。
l Notification:以订阅方式进行新闻通知。
RPC中利用的根基原语操作集,界说了9种基础的操作步骤。
l 获取数据操作:get、get-config。
l 配置操作:edit-config、copy-config、delete-config。
l 对设备临界资源(配置文件等)并发操作时的锁;ぃlock、unlock。
l 实现会话操作:close-session、kill-session。
内容层是被治理的数据对象集中。内容层是NETCONF和谈目前唯一没有被尺度化、没有统一数据模型的层。
注明
iSlot官方网站产品使用YANG对数据建模,使用XML传输数据。
图1-2 NETCONF会话交互报文示意图

NETCONF会话的交互过如图1-2所示,能够分为三部门。
(1) NETCONF传输层依赖于SSH和谈。设备上NETCONF服务端启动NETCONF过程后,成立一个监听端口。
(2) 服务端监听830端口,成立SSH通路:经过一系列的传输算法协商(其中蕴含密钥协商、压缩算法、哈希算法、加密算法、署名算法等)和用户认证后成立SSH通路。
(3) NETCONF传输层的衔接会话成立,NETCONF客户端能够通过这个会话同NETCONF服务器进行交互。
注明
和谈划定NETCONF默认的SSH TCP端口是830,能够凭据现实情况自行配置NETCONF SSH TCP端口。
NETCONF会话建立衔接之后,双方立即通过相互发送Hello报文提供各自实现的能力集,对自己不理解的或者没有实现的能力进行忽略。但是双方都必须支持和谈根基能力(urn:ietf:params:netconf:base:1.1)。若是必要兼容旧和谈版本,双方还必要支持旧和谈根基能力(urn:ietf:params:netconf:base:1.0)。最终获得一个两端实现能力的交集,以进行后续的数据操作与治理。
把稳
● 互换的能力值除了在NETCONF RFC中界说的“能力”表,开发人员能够通过遵循RFC中描述的规范体式增长额表的“能力”。
● 客户端发给服务端的能力交互报文,不得带有会话ID节点(<session-id>)。
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-error:edit-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是用来锁定配置数据库(配置文件),预防多个源(如CLI、SNMP以及多个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操作不允许关关当前会话。
NETCONF鉴权机造用于治理特定用户执行NETCONF操作和接见NETCONF资源权限,使这些用户只能执行或接见NETCONF和谈划定的操作和数据节点信息。
缺省情情况下,没有配置NETCONF鉴权职能,认证用户拥有所有NETCONF权限。支持的接见权限如下:
l Create:允许和不容增长新的数据节点。
l Read:允许和不容读取数据节点信息。
l Update:允许和不容更新数据节点。
l Delete:允许和不容删除数据节点。
l Exec:允许和不容所有的和谈操作。
NETCONF鉴权职能支持的内容蕴含RPC步骤鉴权和数据节点鉴权。
l RPC步骤鉴权
NETCONF的RPC步骤鉴权用于节造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步骤默认都必要执行权限能力操作。其中get、get-config和edit-config必要查抄数据节点的读和写权限。
● close-session默认允许,无法配置不容。
● delete-config和kill-session默认情况下是不容,能够配置允许。其他RPC步骤,默认情况下是允许。
● lock/unlock是必要配对,只有配置lock权限,unlock也拥有同样权限。
l 数据节点鉴权
NETCONF的数据节点鉴权用于节造NETCONF数据节点的权限D芄蛔龅蕉运心?椤⒌ジ瞿?楹吞囟ǖ氖萁诘愕娜ㄏ藿薪谠。具体情况如下:
若是只配置“/”,则注明是对所有?榈氖萁诘闳ㄏ藿谠。
若是配置到?槊,则注明是对单个?榈氖萁诘闳ㄏ藿谠,例如:/rg-snmp:snmp。
其他情况则是对具体?橄碌氖萁诘闳ㄏ藿谠。
l RFC4741:NETCONF Configuration Protocol
l RFC4742:Using the NETCONF Configuration Protocol over Secure Shell (SSH)
l RFC4743:Using NETCONF over the Simple Object Access Protocol (SOAP)
l RFC4744:Using the NETCONF Protocol over the Blocks Extensible Exchange Protocol (BEEP)
l RFC5277:NETCONF Event Notifications
l RFC5381:Experience of Implementing NETCONF over SOAP
l RFC5539:NETCONF Over Transport Layer Security (TLS)
l RFC5717:Partial Lock RPC for NETCONF
l RFC6022:NETCONF Monitoring Schema
l RFC6241:Network Configuration Protocol
l RFC6242:Using the Network Configuration Protocol over Secure Shell
l RFC6243:With-defaults capability for NETCONF
l RFC6470:NETCONF Notification Events
l RFC6536:NETCONF Access Control Model (NACM)
注明
RFC4741和RFC4742已别离被RFC6241和RFC6242取代。
NETCONF配置工作如下:
(2)
(可。配置NETCONF鉴权
在NETCONF服务器端开启NETCONF职能,与客户端可能正常通讯,实现治理网络设备的主张。
l 执行netconf yang multi-revision号令,必须在NETCONF服务端能力报文(Hello)公告之前配置。
l 执行no netconf yang multi-revision号令,必须在NETCONF服务端能力报文(Hello)公告之前配置,且能力公告报文中一个YANG?橹还嫠鼻白钚掳姹。
l 严格校验模式可能会导致部门在轻量级校验模式下能够下发的XML被拦截。
NETCONF和谈承载在SSH和谈上,因而在使用NETCONF职能之前,必要在设备上先配置SSH。配置请参考“SSH配置”。
(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
缺省情况下,NETCONF的YANG?槎喟姹竟嬷澳艽τ诳糇刺。
(可。┡渲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。
配置NETCONF鉴权机造用于治理特定用户执行NETCONF操作和接见NETCONF资源权限,使这些用户只能执行或接见NETCONF和谈划定的操作和数据节点信息。
l 不能创建用户组“星号(*)”,用户组“星号(*)”暗示所有效户组。
l 对于单个规定列表情况,用户规定匹配的挨次是凭据用户配置的规定挨次进行。若是操作匹配到允许规定,则注明操作是被允许。若是操作匹配到不容规定或者没有匹配到规定,则注明操作在当前规定列表是被不容。
l 对于多个规定列表情况,分歧规定列表下的规定也是依照用户配置的挨次进行匹配。若是操作匹配到一个规定列表中的允许规定,则注明操作是被允许。若是操作匹配到不容规定,则注明操作是被不容。若是当前的规定列表没有匹配到任何规定,则匹配下一个规定列表的规定。
l RPC操作步骤蕴含get、get-config、edit-config、copy-config、delete-config、validate、commit、cancel-commit、discard-changes、lock、kill-session和get-schema等。
l 没有配置规定类型情况下,则暗示同时开启对RPC操作步骤和数据节点规定权限节造。
l 规定下有配置开启RPC操作方律例则节造。若是规定下配置的接见操作权限蕴含exec权限,则进行RPC操作步骤查抄时会进行该规定的匹配;不然进行RPC操作步骤查抄时不会进行该规定的匹配。
l 规定下有配置开启数据节点规定节造。若是规定下配置的接见操作权限蕴含create、read、update和delete中至少一种权限,则进行数据节点查抄时会进行该规定的匹配;不然进行数据节点查抄时不会进行该规定的匹配。
(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 } * }
缺省情况下,未配置规定的接见操作权限。
能够通过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 |
对于安全性、可扩大性要求高的网络设备治理需要,能够使用NETCONF作为网管工具。NETCONF的承载和谈为SSH和谈,SSH和谈作为利用层的安全和谈,保险了NETCONF的安全性。以图1-3为例,用户通过NETCONF网络治理软件,来对网络设备进行治理和监控。
图1-3 NETCONF组网图

l 配置NETCONF服务端的网络治理口IP地址,保障NETCONF的客户端与服务端之间三层路由可达。
l 在NETCONF服务端上部署SSH职能。
l 在NETCONF服务端上配置NETCONF职能有关参数,以满足现实场景需要。
l NETCONF客户端软件通过SSH和谈衔接到NETCONF服务端,实现对网络设备的治理和监控。
# 配置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)#
# 创建用户名为netconf的SSH用户,并配置密码为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客户端软件登录设备示例图

# 通过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
===================================================================
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
!
用户user1占有所有?榈get操作权限,用户user2占有对SNMP?榈拇唇ㄈㄏ。
图1-5 NETCONF鉴权组网图

配置用户user1对所有?橛涤get操作权限。
配置用户user2仅对SNMP?檎加写唇ㄈㄏ。
(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
# 通过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]
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