この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2020 (2枚目) の 7 日目として投稿しています。
2017年版: https://qiita.com/advent-calendar/2017/cisco
2018年版: https://qiita.com/advent-calendar/2018/cisco
2019年版: https://qiita.com/advent-calendar/2019/cisco
2020年版: https://qiita.com/advent-calendar/2020/cisco
2020年版(2枚目): https://qiita.com/advent-calendar/2020/cisco2 (これ)
はじめに
近年、注目度が高くなっている NETCONF ですが、手軽に使うにはまだまだ難しい点があります。Cisco NSO (Network Services Orchestrator) では NETCONF NED Builder という機能が NSO 5.2 から実装されており、NSO の NETCONF NED (Network Element Drvier; NSO のドライバ)を自動で生成できるようになったため、NETCONF デバイスをより簡単に使えるようになりました。
この記事では、無償の NSO を使って(無償は非商用利用に限ります)、NETCONF デバイスを GUI で操作する方法を紹介します。
環境準備
はじめに、無償版の NSO を入手する必要があります。入手方法ならびにインストールについては、下記をご参照ください。
NSO の CLI にログインできたら、NED をコンパイルできるだけの最低限の環境を整える必要があります。環境が整っているかは、下記のようにして確認できます(ここでは nso-5.3.linux.x86_64.signed.bin を前提に記述します)。
$cd $NCS_DIR/packages/neds/cisco-ios-cli-3.8/src
$ make
(略)
BUILD SUCCESSFUL
BUILD SUCCESSFUL と表示されれば大丈夫です。こうならない場合、前述の Blog を参考に、make、ant、JDK などをインストールし、開発環境を事前に整えてください。
デバイスの準備
NETCONF で操作するデバイスを、NSO にあらかじめ登録しておきます。ここでは XRv を使います。
IOS-XR で NETCONF を使うには、最低限以下の設定をしておく必要があります。
RP/0/0/CPU0:NR-XRv-4#
RP/0/0/CPU0:NR-XRv-4#configure terminal
RP/0/0/CPU0:NR-XRv-4(config)#ssh server v2
RP/0/0/CPU0:NR-XRv-4(config)#ssh server netconf
RP/0/0/CPU0:NR-XRv-4(config)#netconf agent tty
RP/0/0/CPU0:NR-XRv-4(config-netconf-tty)#exit
RP/0/0/CPU0:NR-XRv-4(config)#netconf-yang agent ssh
RP/0/0/CPU0:NR-XRv-4(config)#commit
RP/0/0/CPU0:NR-XRv-4(config)#end
RP/0/0/CPU0:NR-XRv-4#
上記設定後、通常モードで下記を実行し、RSA key を生成しておきます。
RP/0/0/CPU0:NR-XRv-4#crypto key generate rsa
NETCONF で接続ができるか、あらかじめ確認しておきます。このためには Linux ターミナルから、下記のように実行します。NETCONF Capability のやりとりが行われれば、デバイス側で NETCONF が使える準備ができています。
cisco@ubuntuserver1910:~$ ssh -s admin@10.171.1.105 -p 830 netconf
Password:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.1</capability>
(略)
次は NSO にこのデバイスを登録します。この時 NED はまだないので、 NED の種類は "netconf" にしておきます。
admin@ncs#
admin@ncs# config terminal
admin@ncs(config)# devices device xrv4 address 10.171.1.105 device-type netconf ned-id netconf
admin@ncs(config-device-xrv4)# top
admin@ncs(config)# devices authgroups group admin umap admin remote-name admin remote-password admin remote-secondary-password admin
admin@ncs(config-umap-admin)# top
admin@ncs(config)# devices device xrv4 authgroup admin
admin@ncs(config-device-xrv4)# top
admin@ncs(config)# devices device xrv4 state admin-state unlocked
admin@ncs(config-device-xrv4)# top
admin@ncs(config)# commit
Commit complete.
admin@ncs(config)# end
admin@ncs#
NETCONF で接続できるか、動作確認をします。
admin@ncs# devices fetch-ssh-host-keys
fetch-result {
device xrv4
result updated
fingerprint {
algorithm ssh-rsa
value ff:54:14:40:15:22:73:4c:a8:4e:bb:13:f2:36:0e:af
}
}
admin@ncs# show devices list
NAME ADDRESS DESCRIPTION NED ID ADMIN STATE
------------------------------------------------------
xrv4 10.171.1.105 - netconf unlocked
admin@ncs# devices sync-from
sync-result {
device xrv4
result true
}
admin@ncs#
この時点で、NSO の GUI からデバイスを確認してみます。NSO の GUI にログイン後、右下にある "Device manager" をクリックします。
するとデバイス一覧が現れますので、デバイス名(ここでは xrv4)をクリックします。
デバイスは登録されていますが、NED がないので一切コンフィグなどは見えません。
NETCONF NED の作成
ここからが本記事のメインです。NSO にはすでに NETCONF デバイスが登録されているので、このデバイス用の NETCONF NED を生成します。まず、下記のようにして開発ツールを有効にします。
admin@ncs# devtools true
その後、下記の手順で NETCONF NED を作って行きます。
まず NETCONF NED を作るためのプロジェクトを定義します。ここでは下記のように定義しています。
- プロジェクト名: ios-xr
- バージョン: 7.1.1
- ベンダ: cisco
- デバイス: xrv4 (すでに登録してあるデバイス名)
- local-user: admin (xrv4 へのログインユーザ名)
プロジェクト名とバージョン名が、NED の名前になります。
admin@ncs#
admin@ncs# config terminal
admin@ncs(config)# netconf-ned-builder project ios-xr 7.1.1 vendor cisco device xrv4 local-user admin
admin@ncs(config-project-ios-xr/7.1.1)# commit
Commit complete.
admin@ncs(config-project-ios-xr/7.1.1)# end
admin@ncs#
次に下記 fetch コマンドで NETCONF モジュールを取得します。
admin@ncs# netconf-ned-builder project ios-xr 7.1.1 fetch-module-list
次にどの NETCONF モジュールを使うか指定し、モジュールをデバイスから取得します。
admin@ncs# netconf-ned-builder project ios-xr 7.1.1 module Cisco-IOS-XR-aaa-aaacore-cfg 2018-09-04 select
ここでは aaa モジュールを選択していますが、複数指定することもできます。すべてのモジュールを選択する場合は次のようにします。この場合、全てのモジュールをデバイスからダウンロードしてきますので、実行完了まで非常に時間がかかる場合があるのでご注意ください。
admin@ncs# netconf-ned-builder project ios-xr 7.1.1 module * * select
モジュールを選んだら、Build します。その後 export コマンドで NETCONF NED を packages に export します。
export で permission エラーになる場合は、Linux 上で packages フォルダに permission を設定してください。また Build でエラーになる場合は、個別にモジュールを指定し、動くモジュールから進めて行くと良いと思います。
admin@ncs# netconf-ned-builder project ios-xr 7.1.1 build-ned
admin@ncs# show netconf-ned-builder project ios-xr 7.1.1 build-status
build-status success
admin@ncs#
admin@ncs# netconf-ned-builder project ios-xr 7.1.1 export-ned to-directory packages
tar-file /home/cisco/ncsrc/packages/ncs-5.3-ios-xr-nc-7.1.1.tar.gz
admin@ncs#
これで、NED が packages に入りました。
NED の読み込みと付け替え
登録された XRv デバイスは、仮の "netconf" にしていたため、上記で作成した NED に付け替えます。
packages reload で、生成した NETCONF NED を読み込んだ後、登録デバイスの設定をアップデートします。
admin@ncs# packages reload
>>> System upgrade is starting.
>>> Sessions in configure mode must exit to operational mode.
>>> No configuration changes can be performed until upgrade has completed.
>>> System upgrade has completed successfully.
reload-result {
package ios-xr-nc-7.1.1
result true
}
admin@ncs#
admin@ncs# show devices list
NAME ADDRESS DESCRIPTION NED ID ADMIN STATE
------------------------------------------------------
xrv4 10.171.1.105 - netconf unlocked
admin@ncs#
admin@ncs# config t
admin@ncs(config)# devices device xrv4 device-type netconf ned-id ios-xr-nc-7.1.1
admin@ncs(config-device-xrv4)# commit
Commit complete.
admin@ncs(config-device-xrv4)# end
admin@ncs#
admin@ncs# show devices list
NAME ADDRESS DESCRIPTION NED ID ADMIN STATE
-----------------------------------------------------------------
xrv4 10.171.1.105 - ios-xr-nc-7.1.1 unlocked
admin@ncs#
動作確認
NSO の GUI にアクセスし、デバイスを sync します。下記 GUI 上で sync-from ボタンを押します。成功すると緑色になります。
その後デバイス名をクリックすると、先ほどなかった設定が見えるようになっています!
これで NETCONF 対応のデバイスを、GUI で操作できるようになりました。次に、実際に設定をしてみます。下の方にある "config" を探してクリックします。
するといくつか設定できる項目が現れます。aaa モジュールを選択したので aaa 関連のコンフィグが見えます。これをクリックします。
試しに banner を設定してみます。
バナーの設定画面になりますので "Hello NSO!" と入力し、下部にある "Commit manager" をクリックします。
右上の "Commit" ボタンを押すと、設定が NETCONF で反映されます。
試しに XRv にログインしてみると、無事にバナーが設定されていました!
これで NETCONF デバイスを NSO の GUI で操作できるようになりました。
まとめ
NETCONF は非常に注目されているプロトコルである一方、それを利用するにはまだ課題があります。Cisco NSO でも、これまでは Linux 上でドライバを作る必要があり、決して容易ではなかったと言えます。
この NETCONF NED Builder の実装により、手軽に NED を作成し、NSO から GUI で NETCONF 対応デバイスが操作できるようになりました。
また NSO は、Model-driven アーキテクチャにより、管理デバイスに対して複数の API を上位に提供できます。上記のようにデバイスを登録するだけで、NSO に対して RESTCONF、JSON-RPC などを使い、NETCONF デバイスを操作することもできます。
皆様、楽しいクリスマスシーズンをお過ごしください!