Edited at

MAC に Free NSO を入れて Network 自動化の心の準備をしてみる


はじめに

最近ではネットワーク業界でも通信機器をソフトウェアから制御する流れがあります。

一方で、個人的にはあまりこの辺の技術を実際に触る機会を持てずにおりました。(言い訳)

そんな折、Cisco NSO (Network Services Orchestrator) という製品の無料評価版がリリースされました。

Cisco NSO って何ができるの?というお話はこちらに素晴らしい記事がありますので説明はお任せ致しまするとして、本稿では Free download 可能な Cisco NSO を MacOS 上にインストールしみることで、どこまでの Network 自動化の検証をすることができるかを実際に動かしてみた記録を書きたいと思います。


NSO Download

Downloadはこちらから。

なお、このCisco NSO評価版について日本語で丁寧な説明がでなされております。こちらも参考にして下さい。

ということで、Get NSO for evaluation (Mac) から MacOS版をダウンロードします。


インストールを始める前に

以下、Getting NSO に説明のある環境要件です。

Pre-Requirement.png

私の場合、勇み足で進みすぎてちゃんとドキュメント読まず、ここの要件を満たさずに進んでしまいました。案の定、インストール後色々と正しく動きません。

NSO を正しく動作させるために、JDKAnt のインストールも必要です。

インストール方法はインターネット上のエキスパートの方々の記事におまかせしますが、ご注意下さい。


いざ、インストール

まずはUnpack。

MyMAC:nso-4.7.darwin.x86_64 tkasakak$ sh nso-4.7.darwin.x86_64.signed.bin

Unpacking...
Verifying signature...
Downloading CA certificate from http://www.cisco.com/security/pki/certs/crcam2.cer ...
Successfully downloaded and verified crcam2.cer.
Downloading SubCA certificate from http://www.cisco.com/security/pki/certs/innerspace.cer ...
Successfully downloaded and verified innerspace.cer.
Successfully verified root, subca and end-entity certificate chain.
Successfully fetched a public key from tailf.cer.
Successfully verified the signature of nso-4.7.darwin.x86_64.installer.bin using tailf.cer

続いてInstall。

MyMAC:nso-4.7.darwin.x86_64 tkasakak$ sh nso-4.7.darwin.x86_64.installer.bin $HOME/ncs-4.7

INFO Using temporary directory /var/folders/lp/w1lg3d217mqgwzkn_l_9lz700000gn/T//ncs_installer.5336 to stage NCS installation bundle
INFO Unpacked ncs-4.7 in /Users/tkasakak/ncs-4.7
INFO Found and unpacked corresponding DOCUMENTATION_PACKAGE
INFO Found and unpacked corresponding EXAMPLE_PACKAGE
INFO Generating default SSH hostkey (this may take some time)
INFO SSH hostkey generated
INFO Environment set-up generated in /Users/tkasakak/ncs-4.7/ncsrc
INFO NCS installation script finished
INFO Found and unpacked corresponding NETSIM_PACKAGE
INFO NCS installation complete

ここまでくると NSO home directory 配下に(上記の場合 ncs-4.7 配下に)、NSOのファイルが展開されます。

MyMAC:ncs-4.7 tkasakak$ ls

CHANGES bin examples.ncs man packages var
LICENSE doc include ncsrc scripts
README erlang java ncsrc.tcsh src
VERSION etc lib netsim support

初めて NSO をいじるにあたり、以下が参考になりました。



  • doc : 配下にGetting Started Guide や User Guide 等の情報があります。


  • examples.ncs : 配下に初学者向けのテストシナリオ等があります。

以下では、examples.ncs/getting-started/using-ncs にあるシナリオに従ってNSOに実際のルーターを登録してみたいと思います。

MyMAC:using-ncs tkasakak$ pwd

/Users/tkasakak/ncs-4.7/examples.ncs/getting-started/using-ncs
TKASAKAK-M-31YZ:using-ncs tkasakak$ ls -l
total 8
drwxr-xr-x 3 tkasakak staff 96 6 21 16:15 0-hello-world
drwxr-xr-x 19 tkasakak staff 608 12 1 18:11 1-simulated-cisco-ios
drwxr-xr-x 16 tkasakak staff 512 12 1 21:54 2-real-device-cisco-ios
drwxr-xr-x 4 tkasakak staff 128 6 21 16:15 3-real-device-juniper
drwxr-xr-x 4 tkasakak staff 128 6 21 16:15 4-netconf-device
drwxr-xr-x 3 tkasakak staff 96 6 21 16:15 5-snmp-alarm-northbound
drwxr-xr-x 13 tkasakak staff 416 6 21 16:15 6-access-lists
drwxr-xr-x 9 tkasakak staff 288 6 21 16:15 7-scripting
drwxr-xr-x 6 tkasakak staff 192 6 21 16:15 8-ssh-keys
-rw-r--r-- 1 tkasakak staff 692 6 21 16:15 README

1-simulated-cisco-iosは同梱される仮想IOSルーター3台を起動させるシミュレーターを用いたシナリオとなりますが、以下では2-real-device-cisco-iosのREADMEにある手順に従って、実際のIOS XEルーターをNSOから管理できるようにするまでを試してみます。(2から始める場合も、0-hello-world, 1-simulated-cisco-iosにあるREADMEから読み進めるとよりわかりやすいです。)

NSO では NED (Network Element Driver) と呼ばれるドライバーによりシスコ以外の様々な機器も扱うことが可能です。

以下では評価版に同梱される CLI NED により Cisco IOS XE device の連携を目指しました。


補足:

実際のネットワーク機器でサポートされる様々な機能をNSOから扱うことができるかどうかはこのNEDで対応されているかどうかに依存します。このため、新しい機能についてはこのNEDでも対応が必要になる、ということです。

一方で、NSO では Netconf/Yang により Device 制御を行うことも可能です。この Yang model ベースの制御ではネットワーク機器側が新しい機能についても Yang model でサポートしていれば、そのモデルに基づいて機器制御が(理論上は)可能となります。

こちらの記事ではネットワークベンダーが提供する Yang model から Netconf NED を作成する手順を説明してくれております。シスコのオフィシャルサポートには制限がありますが、評価版として試して頂くには良いかと思います。ぜひ試してみて下さい。(個人的には次回への宿題とさせて下さい。)


ここまでで、その他 Getting NSO 等に説明のある PATH設定やsourceコマンド等は実施を済ませておきましょう。


NSO の起動

それでは2-real-device-cisco-iosのREADMEに従い、NSOを起動していきます。

設定ファイルを作成。NEDも指定します。

MyMAC:2-real-device-cisco-ios tkasakak$ ncs-setup --dest . --ned-package cisco-ios

NSOの起動。

MyMAC:2-real-device-cisco-ios tkasakak$ ncs

NSOが起動すると、NSOのコマンドラインに入ることができるようになります。

MyMAC:2-real-device-cisco-ios tkasakak$ ncs_cli -u admin

admin connected from 127.0.0.1 using console on MyMAC

NSOのコマンドラインは Cisco like (option: -C) と Juniper like (option: -J (*Default))がありますが、Getting Started 系の資料は Juniper like での説明になっているので、以下でも Default の設定で試してみました。

まずはNEDが正しく認識されているか確認します。

admin@ncs> show packages package package-version

PACKAGE
NAME VERSION
--------------------
cisco-ios 3.0.0.3

[ok][2018-12-02 00:38:03]
admin@ncs>

続いて、Configuration モードへ移行。Deviceの登録を進めます。

admin@ncs> configure

Entering configuration mode private

認証の設定。

admin@ncs% edit devices authgroups group mygroup

admin@ncs% set default-map remote-name cisco
admin@ncs% set default-map remote-password cisco
admin@ncs% top

デバイスの設定。

admin@ncs% edit devices device csr1kv

admin@ncs% set address 10.71.158.3
admin@ncs% set port 22
admin@ncs% set authgroup mygroup
admin@ncs% set device-type cli ned-id cisco-ios
admin@ncs% set state admin-state unlocked (*このコマンドで device を有効化するようですが、Guideに記載が無いので注意!!)

以下のコマンドでssh host key を対象デバイスからとってこられれば接続の基本設定は完了です。

admin@ncs% request ssh fetch-host-keys

result updated
fingerprint {
algorithm ssh-rsa
value e1:b8:93:b6:3a:3c:e4:31:9a:00:04:1f:ca:d7:e4:86
}
[ok][2018-12-01 20:43:45]

[edit devices device csr1kv]

変更した設定を反映させるため、commit コマンドを忘れずに。

admin@ncs% commit

Commit complete.
[ok][2018-12-01 20:39:17]

[edit devices authgroups group mygroup]
admin@ncs% top

以下のコマンドで再度接続を確認。

admin@ncs> request devices connect

connect-result {
device csr1kv
result true
info (admin) Connected to csr1kv - 10.71.158.3:22
}
[ok][2018-12-02 00:45:42]
admin@ncs>

以下では機器設定をNSOへ同期します。

admin@ncs> request devices sync-from

sync-result {
device csr1kv
result true
}
[ok][2018-12-01 20:57:02]

以下で設定を表示できれば、NSO側への設定同期は完了です!

admin@ncs> show configuration devices device csr1kv config

ios:version 15.5;
ios:service {
(省略,設定が表示されます)

まだまだ色々といじりがいがありますが、今回はこれにて。

以下参考までに NSO からの制御を受け入れる為に入れた IOS-XE device 側の最小設定です。

csr1kv#show run

Building configuration...

Current configuration : 1297 bytes
!
! Last configuration change at 10:31:35 UTC Sat Dec 1 2018 by cisco
!
version 15.5
!
hostname csr1kv
!
enable password cisco
!
ip domain name cisco.com
!
username cisco privilege 15 password 0 cisco
!
interface GigabitEthernet1
ip address dhcp
negotiation auto
!
ip ssh version 2
!
line vty 0 4
login local
!
end

*(config)# crypto key generate rsa exportable により鍵生成をしてますが、running-configには反映されないため念の為。


参考

今回のようなことを試すにあたって、制御する対象のルーターが無いよ、という人向け。

(商用ではなく)個人使用していただけるフリーの素材としては、Cisco が提供する VIRL と呼ばれるエミュレータがあります。VIRLでは仮想ルーターを立ち上げて、VIRL 上でそれらルーター間のプロトコルの学習や簡単なテストなどに使用いただけるものとなっています。ぜひチャレンジしてみて下さい。

参考記事1

参考記事2

tkasakak@2018/12/04