LoginSignup
28
2

More than 3 years have passed since last update.

NETCONF NED Builder で NETCONF デバイスを手軽に設定しよう!

Posted at

この記事はシスコの有志による 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 で操作する方法を紹介します。

Screen Shot 2020-12-04 at 13.26.13.png

環境準備

はじめに、無償版の 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" をクリックします。

Screen Shot 2020-12-03 at 18.59.39.png

するとデバイス一覧が現れますので、デバイス名(ここでは xrv4)をクリックします。

Screen Shot 2020-12-03 at 18.59.51.png

デバイスは登録されていますが、NED がないので一切コンフィグなどは見えません。

qiita2.png

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 ボタンを押します。成功すると緑色になります。

Screen Shot 2020-12-04 at 13.19.41.png

その後デバイス名をクリックすると、先ほどなかった設定が見えるようになっています!

qiita1.png

これで NETCONF 対応のデバイスを、GUI で操作できるようになりました。次に、実際に設定をしてみます。下の方にある "config" を探してクリックします。

Screen Shot 2020-12-03 at 19.01.22.png

するといくつか設定できる項目が現れます。aaa モジュールを選択したので aaa 関連のコンフィグが見えます。これをクリックします。

Screen Shot 2020-12-03 at 19.01.54.png

試しに banner を設定してみます。

Screen Shot 2020-12-03 at 19.02.54.png

バナーの設定画面になりますので "Hello NSO!" と入力し、下部にある "Commit manager" をクリックします。

Screen Shot 2020-12-03 at 19.03.55.png

右上の "Commit" ボタンを押すと、設定が NETCONF で反映されます。

Screen Shot 2020-12-03 at 19.04.08.png

試しに XRv にログインしてみると、無事にバナーが設定されていました!

Screen Shot 2020-12-03 at 19.06.21.png

これで NETCONF デバイスを NSO の GUI で操作できるようになりました。

まとめ

NETCONF は非常に注目されているプロトコルである一方、それを利用するにはまだ課題があります。Cisco NSO でも、これまでは Linux 上でドライバを作る必要があり、決して容易ではなかったと言えます。

この NETCONF NED Builder の実装により、手軽に NED を作成し、NSO から GUI で NETCONF 対応デバイスが操作できるようになりました。

また NSO は、Model-driven アーキテクチャにより、管理デバイスに対して複数の API を上位に提供できます。上記のようにデバイスを登録するだけで、NSO に対して RESTCONF、JSON-RPC などを使い、NETCONF デバイスを操作することもできます。

皆様、楽しいクリスマスシーズンをお過ごしください!

28
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
2