CiscoルータのConfigをnetconfで取得する

CiscoルータのConfigをnetconfを使って取得しようという試み。
対象機器はCisco841M。IOSのバージョンは15.8。

netconf とは

ネットワーク機器をリモートで設定変更・更新・情報取得するためのプロトコル。
制御内容をXMLで記述する。RFC6241で規定。

CiscoではSSH(v2)でルータとセッションを張って, その中でやりとりを行う。

こちら「知ったかぶりしない NETCONF」でわかりやすくまとめられています。

ルータの設定

手順

1. SSH設定
2. netconf設定
3. netconf用ユーザ作成
4. 試行

1. SSH設定

(config)#ip domain name example.com
(config)#crypto key generate rsa
(config)#ip ssh version 2

2. netconf設定

(config)#netconf ssh

3. netconf ユーザ作成

(config)#username netconf privilege 15    !権限は15
(config)#ip ssh pubkey-chain
(conf-ssh-pubkey)#username netconf
(conf-ssh-pubkey-user)#key-string !pubkey 貼り付け
(conf-ssh-pubkey-user)#exit
(conf-ssh-pubkey)#end

もろもろ設定確認

#show ip ssh
SSH Enabled - version 2.0
#show netconf session
Netconf Sessions: 0 open, maximum is 4

4. 試行

SSHでルータへ接続する。netconf over SSHv2ということで-s オプションでnetconfを呼び出す。

$ssh -s -l netconf -i netconf_key 192.168.1.2 netconf

直ぐにルータからのhelloが届く。

# ルータからの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: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:pi-data-model:1.0</capability>
<capability>urn:cisco:params:netconf:capability:notification:1.0</capability>
</capabilities>
<session-id>49242144</session-id>
</hello>
]]>]]>

session-idを消して応答を返せば, ここから制御が可能になる。

# ルータへの応答
<?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: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:pi-data-model:1.0</capability>
<capability>urn:cisco:params:netconf:capability:notification:1.0</capability>
</capabilities>
</hello>
]]>]]>

show runを取得してみる。

#送付するリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
<get-config>
<source>
<running/>
</source>
</get-config>
</rpc>]]>]]>
#受け取った結果
<?xml version="1.0" encoding="UTF-8"?><rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><data><cli-config-data-block>!
! Last configuration change at 14:42:05 JST Fri Jan 18 2019 by netconf
! NVRAM config last updated at 12:22:11 JST Fri Jan 18 2019 by netconf
!
version 15.8
service timestamps debug datetime msec localtime show-timezone
service timestamps log datetime msec localtime show-timezone
no service password-encryption
service internal
!
~略~
ntp server ntp.nict.jp prefer
netconf ssh
!
</cli-config-data-block></data></rpc-reply>]]>]]>

XML形式で出力を得る場合は以下のようなリクエストを投げる。

<?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
<get-config>
<source>
<running/>
</source>
<filter>
<config-format-xml/>
</filter>
</get-config>
</rpc>
]]>]]>

終了するときはCtrl-cで終了。

次はsshコマンドではなくncclientを使って見よう。

余談

ちなみに, Configの出力をXML形式で取得したい場合は

show run | format

で取得できる。

また, Config取得でall オプションを使いたいときはGetメソッドを使うとできる。

<?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
<get>
<filter>
<oper-data-format-text-block>
<show>
run all
</show>
</oper-data-format-text-block>
</filter>
</get>
</rpc>
]]>]]>

この出力をXMLで取りたいなと思ったのだが, どうやらC841Mでは対応していないっぽい。specファイルを準備しないと駄目なのかな。

#show format
The following CLI are supported in built-in
show inventory
show ip interface brief
show waas token
show waas statistics peer
show waas statistics pass-through
show waas statistics lz
show waas statistics global
show waas statistics dre
show waas statistics dre peer
show waas statistics class*
show waas statistics aoim
show waas statistics auto-discovery
show waas statistics auto-discovery blacklist
show waas statistics application*
show waas alarms
show waas status extended
show waas status
show waas connection*
show waas auto-discovery list
show parameter-map type waas*
show class-map type waas*
show policy-map type waas*
show waas auto-discovery blacklist
show waas statistics errors
show waas accelerator
show waas accelerator detail
show waas accelerator ssl-express
show waas statistics accelerator ssl-express ciphers
show waas statistics accelerator ssl-express
show waas statistics accelerator ssl-express peering
show waas accelerator cifs-express
show waas statistics accelerator cifs-express
show waas statistics accelerator cifs-express detail
show waas accelerator http-express
show waas statistics accelerator http-express
show waas statistics accelerator http-express detail
show waas statistics accelerator http-express https
show waas cache http-express metadatacache*
show waas statistics accelerator http-express debug
show waas cache http metadatacache*