CCIE Lab対策(6.2. Network Automation)その1
評価版 Cisco NSOを使って、CCIE SP Lab対策をしようと思います。 先ずはlab環境に極力近いものを再現します。lab環境については、以前のCCIE Prep Webinarの資料1を参考にしました。
1. 構築資源準備
CCIE Prep Webinarの資料に基づいて、Ubuntu 18.04上にNSOをインストールします。
1.1 Ubuntu 18.04
KDDI研究所様のミラーサーバからダウンロードしました。
www.ftp.ne.jp
1.2 評価版 Cisco NSO
lab環境はv5.2ですが、ダウンロードできるのはv5.7でした。(2020年はv5.3がダウンロード可能でした。)
developer.cisco.com
NSOのインストーラとNED2もダウンロードできます。ダウンロードには事前に Cisco.com ID の取得が必要です。
NSO 5.7 Linux, Cisco IOS (XE) NED, Cisco IOS XR NED, Cisco NXOS NED, Cisco ASA NED
1.3 Ubuntuインストール
ESXi上のゲストOSとしてUbuntuをインストールしていきます。
① データストアにUbuntuのISOファイルを格納します。
② ”Create / Register VM”をクリックしてウィザードに従ってゲストOSを構築します。
③ ”Create a new virtual machine" を選択して、”Next”をクリックします。
④ ホスト名を入力し(ここでは"hostname"と入力しています。)、”ESXi 7.0 virtual machine”と”Linux”、”Ubuntu Linux (64bit)を選択して、”Next”をクリックします。
⑤ インストール先のストレージを確認し(データストアを選択しています。)、”Next”をクリックします。
⑥ ゲストOSのサーバリソースを入力し、”CD/DVD Drive1”で”Datastore ISO file”を選択します。
⑦ データストア画面がポップアップするので、UbuntuのISOファイルを選択し”Select”をクリックします。
⑧ カスタマイズ設定画面に戻りますので、”Next”をクリックします。
⑨ 最終確認画面が表示されます。内容を確認して”Finish”をクリックします。
⑩ 作成したゲストOSを”Power on”します。
⑪ キーボード選択画面でキーボードを選択して、”Enterキー”を押下します。
⑫ 最新版のUbuntuにアップグレードしてインストールするか確認があります。今回は”Ubuntu 18.04”を使いたいので、”Continue without updating"を選択して”Enterキー”を押下します。
⑬ 検出したキーボードと選択したキーボードの確認があります。確認して”Enterキー”を押下します。
⑭ ネットワークの設定をします。Default DHCPですが固定IPを使用したいため”spaceキー”を押下します。
⑮ プロトコル指定画面が展開されますので、”Edit IPv4”を選択して”spaceキー”を押下します。
⑯ IPv4の設定確認があります。”Manual”を選択して”spaceキー”を押下します。
⑰ 自身の環境に合わせたIPv4アドレス等を入力して、”Save”を選択し”Enterキー”を押下します。
⑱ 指定したIPv4アドレスであることを確認して、”Enterキー”を押下します。
⑲ Proxy addressを入力します。設定しない場合は空のままで良いです。”Enterキー”を押下します。
⑳ Mirror addressを入力します。Defaultのままで問題ありません。”Enterキー”を押下します。
㉑ HDDのカスタマイズ設定です。変更しないので”Enterキー”を押下します。
㉒ HDDのパーティション設定です。変更しないので”Enterキー”を押下します。
㉓ 本当に実行して良いか確認があります。”Continue”を選択して”Enterキー”を押下します。
㉔ hostname、username、passwordを入力して、”Enterキー”を押下します。
㉕ Install OpenSSH sesrverにチェックがあることを確認し、”Enterキー”を押下します。
㉖ 一緒にインストールするものがあれば、選択して”Enterキー”を押下します。
㉗ インストールが開始されます。
㉘ Security updateとても長いので、”Cancel update and reboot”を選択して”Enterキー”を押下します。
㉙ インストール完了です。”Enterキー”を押下して再起動します。
2. NSOインストール前提条件
NSO 5.7 Installation Guide に基づいて環境を整えます。
developer.cisco.com
2.1 Ubuntu root password変更
UbuntuはDefaultでrootのpasswordが設定がありませんので、以下のようにして変更します。
chas@chas4:~$ sudo passwd root [sudo] password for chas: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully chas@chas4:~$
2.2 Ubuntu パッケージ更新
root@chas4:~# apt update root@chas4:~# apt upgrade
2.3 JDK-8.0 or higher
デフォルトのJava Runtime Environment (JRE) をインストールします。これにより、OpenJDK 11からJREがインストールされます。
root@chas4:~# apt install default-jre
JDKをインストールするには、次のコマンドを実行します。これにより、JREもインストールされます。
root@chas4:~# apt install default-jdk
JREのインストールが確認できました。
root@chas4:~# java -version root@chas4:~/Python-3.10.2# java -version openjdk version "11.0.14" 2022-01-18 OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2.18.04) OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing) root@chas4:~/Python-3.10.2#
JDKのインストールも確認できました。
root@chas4:~/Python-3.10.2# javac -version javac 11.0.14 root@chas4:~/Python-3.10.2#
2.4 Python 3.7 or higher
Ubuntu 18.04 はPython3.6.9なので、新しいものをインストールします。
self-development.info
デフォルトのPythonは、OSがさまざまな機能を提供するために使用されています。
つまり、OSとデフォルトのPythonには依存関係があるのです。
古いから新しいものをインストールするのではなく、OSの安定性を考慮して新しいものをインストールという考えもあるのか。と納得しました。
makeをインストールします。
root@chas4:~# apt install make
ビルド環境を準備するために必要なツールをインストールします。
root@chas4:~# apt install build-essential libbz2-dev libdb-dev \ > libreadline-dev libffi-dev libgdbm-dev liblzma-dev \ > libncursesw5-dev libsqlite3-dev libssl-dev \ > zlib1g-dev uuid-dev tk-dev
折角なので最新版をインストールします。
Python Japanのダウンロードページ
pythonlinks.python.jp
ソースコードをダウンロードします。
wget https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz tar xJf Python-3.10.2.tar.xz
以下のコマンドで、/usr/local/ 以下にインストールします。
cd Python-3.10.2 ./configure make make install
最新版のPythonをインストールしたことを確認しました。
root@chas4:~/Python-3.10.2# python3 -V Python 3.10.2 root@chas4:~/Python-3.10.2# which python3 /usr/local/bin/python3 root@chas4:~/Python-3.10.2#
2.5 Ant 1.9.3 or higher
Antをインストールします。
apt install ant
Antのインストールが確認できました。
root@chas4:~/Python-3.10.2# ant -version Apache Ant(TM) version 1.10.5 compiled on March 28 2019 root@chas4:~/Python-3.10.2#
2.6 Python Paramiko 2.2 or higher
Python Paramikoをインストールします。
apt install python-paramiko
Python Paramikoのバージョンを確認します。
root@chas4:~/Python-3.10.2# pip show paramiko Name: paramiko Version: 2.0.0 Summary: SSH2 protocol library Home-page: https://github.com/paramiko/paramiko/ Author: Jeff Forcier Author-email: jeff@bitprophet.org License: LGPL Location: /usr/lib/python2.7/dist-packages Requires: root@chas4:~/Python-3.10.2#
条件を満たせないのでgithubからインストールします。
pip install -e git+https://github.com/paramiko/paramiko/#egg=paramiko
Python Paramikoの条件が満たしたことが確認できました。
root@chas4:~/Python-3.10.2# pip show paramiko Name: paramiko Version: 2.10.1 Summary: SSH2 protocol library Home-page: https://paramiko.org Author: Jeff Forcier Author-email: jeff@bitprophet.org License: LGPL Location: /root/Python-3.10.2/src/paramiko Requires: bcrypt, cryptography, pynacl, six root@chas4:~/Python-3.10.2#
2.7 OpenSSH 6.5 or higher
Ubuntuインストール時にOpenSSHをインストールしており、条件は満たしていました。
root@chas4:~/Python-3.10.2# ssh -V OpenSSH_7.6p1 Ubuntu-4ubuntu0.6, OpenSSL 1.0.2n 7 Dec 2017 root@chas4:~/Python-3.10.2#
これで、NSOをインストールすることができます。
3. NSOインストール
/tmpディレクトリにNSOの構築資源をWinSCPを使って格納します。
評価版 Cisco NSO を使ってみよう [2020年版]
Cisco NSO は、サーバにサービスとしてインストールする System Install と、単一フォルダにインストールする Local Install をサポートしています。Local Install は、そのフォルダだけを消せばアンインストールができますので、開発・評価に向いています。
Cisco Japanと同様にLocal Installを実施します。
① インタネット接続状態で署名付きファイルを実行します。
root@chas4:/tmp# sh /tmp/nso-5.7.1.linux.x86_64.signed.bin Unpacking... Verifying signature... Retrieving CA certificate from http://www.cisco.com/security/pki/certs/crcam2.cer ... Successfully retrieved and verified crcam2.cer. Retrieving SubCA certificate from http://www.cisco.com/security/pki/certs/innerspace.cer ... Successfully retrieved 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-5.7.1.linux.x86_64.installer.bin using tailf.cer root@chas4:/tmp#
② Cisco NSOのインストーラ(nso-5.7.1.linux.x86_64.installer.bin)が展開されます。
root@chas4:/tmp# ls -l /tmp/nso-5.7.1.linux.x86_64.installer.bin -rwxr-xr-x 1 root root 202456323 Jan 26 12:40 /tmp/nso-5.7.1.linux.x86_64.installer.bin root@chas4:/tmp#
③ Local Installするためのディレクトリを確認します。ここでは事前に当該ディレクトリを作成しています。
root@chas4:/tmp# ls -ld /nso-5.7/ drwxr-xr-x 2 root root 4096 Mar 15 04:44 /nso-5.7/ root@chas4:/tmp#
④ NSOをインストールします。
コマンドの書式は以下の通りです。
sh <Cisco NSO インストーラ.bin> <インストール先フォルダ>
root@chas4:/tmp# sh nso-5.7.1.linux.x86_64.installer.bin /nso-5.7 INFO Using temporary directory /tmp/ncs_installer.28992 to stage NCS installation bundle INFO Unpacked ncs-5.7.1 in /nso-5.7 INFO Found and unpacked corresponding DOCUMENTATION_PACKAGE INFO Found and unpacked corresponding EXAMPLE_PACKAGE INFO Found and unpacked corresponding JAVA_PACKAGE INFO Generating default SSH hostkey (this may take some time) INFO SSH hostkey generated INFO Environment set-up generated in /nso-5.7/ncsrc INFO NSO installation script finished INFO Found and unpacked corresponding NETSIM_PACKAGE INFO NCS installation complete root@chas4:/tmp#
⑤ Cisco NSOの環境設定を読み込みます。
コマンドの書式は以下の通りです。
source <インストールフォルダ>/ncsrc
root@chas4:/tmp# source /nso-5.7/ncsrc root@chas4:/tmp#
⑥ Cisco NSO を使うためにプロジェクトフォルダを作成します。
コマンドの書式は以下の通りです。
ncs-setup --dest <プロジェクトフォルダ名>
root@chas4:/tmp# cd /nso-5.7/ root@chas4:/nso-5.7# ncs-setup --dest ncsrun root@chas4:/nso-5.7#
⑦ プロジェクトフォルダへ移動して、NSO起動コマンドを実行します。
root@chas4:/nso-5.7# cd ncsrun root@chas4:/nso-5.7/ncsrun# ncs root@chas4:/nso-5.7/ncsrun#
⑧ ブラウザで、http://【UbuntuのIPアドレス】:8080/にアクセスします。
デフォルトのログイン名とパスワードは、共に admin です。ログインが成功すると、下記のようなメニューが現れます。
次にNED(Network Element Driver)NSOと各機器を接続するドライバを追加します。
4. NEDの追加
1.2 評価版 Cisco NSO でインストーラと一緒にダウンロードしたNEDを追加します。
① Cisco NSOのインストーラと同様に署名付きファイルを実行してファイルを展開します。
sh パッケージファイル名(ncs-5.7-cisco-asa-6.13.12.signed.bin)
root@chas4:/tmp# sh ncs-5.7-cisco-asa-6.13.12.signed.bin Unpacking... Verifying signature... Retrieving CA certificate from http://www.cisco.com/security/pki/certs/crcam2.cer ... Successfully retrieved and verified crcam2.cer. Retrieving SubCA certificate from http://www.cisco.com/security/pki/certs/innerspace.cer ... Successfully retrieved 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 ncs-5.7-cisco-asa-6.13.12.tar.gz using tailf.cer root@chas4:/tmp#
他のNEDも展開します。
ncs-5.7-cisco-ios-6.77.10.signed.bin
ncs-5.7-cisco-iosxr-7.38.3.signed.bin
ncs-5.7-cisco-nx-5.22.8.signed.bin
② 展開したパッケージファイル(ncs-5.7-cisco-iosxr-7.38.3.tar.gz 等)をコピーします。
コピー先:$NCS_DIR/ncsrun/packages (NSO run-time フォルダ)
∵ 3. NSOインストール の ⑥ で指定したプロジェクトフォルダがncsrunのため
root@chas4:/tmp# ls -l ./*.tar.gz -rw-r--r-- 1 root root 6899909 Jan 12 02:56 ./ncs-5.7-cisco-asa-6.13.12.tar.gz -rw-r--r-- 1 root root 61131311 Jan 22 08:48 ./ncs-5.7-cisco-ios-6.77.10.tar.gz -rw-r--r-- 1 root root 42440773 Jan 21 19:09 ./ncs-5.7-cisco-iosxr-7.38.3.tar.gz -rw-r--r-- 1 root root 9891157 Jan 12 12:44 ./ncs-5.7-cisco-nx-5.22.8.tar.gz root@chas4:/tmp# cp -p ./*.tar.gz $NCS_DIR/ncsrun/packages/ ls -l $NCS_DIR/ncsrun/packages/*.tar.gz root@chas4:/tmp# ls -l $NCS_DIR/ncsrun/packages/*.tar.gz -rw-r--r-- 1 root root 6899909 Jan 12 02:56 /nso-5.7/ncsrun/packages/ncs-5.7-cisco-asa-6.13.12.tar.gz -rw-r--r-- 1 root root 61131311 Jan 22 08:48 /nso-5.7/ncsrun/packages/ncs-5.7-cisco-ios-6.77.10.tar.gz -rw-r--r-- 1 root root 42440773 Jan 21 19:09 /nso-5.7/ncsrun/packages/ncs-5.7-cisco-iosxr-7.38.3.tar.gz -rw-r--r-- 1 root root 9891157 Jan 12 12:44 /nso-5.7/ncsrun/packages/ncs-5.7-cisco-nx-5.22.8.tar.gz root@chas4:/tmp#
ncs_cli -u admin -C
root@chas4:/tmp# ncs_cli -u admin -C User admin last logged in 2022-03-15T07:09:01.438981+00:00, to chas4, from 192.168.2.4 using webui-http admin connected from 127.0.0.1 using console on chas4 admin@ncs#
④ NSO CLI セッション上でNEDのパッケージを読み込みします。少し時間がかかります。
packages reload
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 cisco-asa-cli-6.13 result true } reload-result { package cisco-ios-cli-6.77 result true } reload-result { package cisco-iosxr-cli-7.38 result true } reload-result { package cisco-nx-cli-5.22 result true } admin@ncs# System message at 2022-03-15 09:47:48... Subsystem started: ncs-dp-1-cisco-asa-cli-6.13:ASADp admin@ncs# System message at 2022-03-15 09:47:48... Subsystem started: ncs-dp-2-cisco-ios-cli-6.77:IOSDp admin@ncs# System message at 2022-03-15 09:47:48... Subsystem started: ncs-dp-3-cisco-nx-cli-5.22:NexusDp admin@ncs#
⑤ 追加したパッケージファイルの確認をします。
show packages package package-version
admin@ncs# show packages package package-version PACKAGE NAME VERSION ------------------------------- cisco-asa-cli-6.13 6.13.12 cisco-ios-cli-6.77 6.77.10 cisco-iosxr-cli-7.38 7.38.3 cisco-nx-cli-5.22 5.22.8 admin@ncs#
これでNSOから各デバイス(IOS, IOS-XR, NX-OS, ASA)を制御する準備ができました。
5. デバイスの登録
5.1 authgroup定義
ncs_cli -C -u admin
② 編集モードにします。(conf t みたいなものと解釈)
config
admin@ncs# config Entering configuration mode terminal admin@ncs(config)#
③ NSOから各デバイスへアクセスするための定義を作成します。
admin@ncs(config)# devices authgroups group AUTH
④ NSOのユーザ名(admin)を定義します。
admin@ncs(config-group-IOS_AUTH)# umap admin
⑤ デバイスのユーザー名を定義します。(ルータへのログインユーザー名:admin)
admin@ncs(config-umap-admin)# remote-name admin
⑥ デバイスのパスワードを定義します。(ルータへのログインパスワード:admin)
admin@ncs(config-umap-admin)# remote-password admin
⑦ イネーブルパスワードを定義します。
admin@ncs(config-umap-admin)# remote-secondary-password admin
⑧ コミットします。
admin@ncs(config-umap-admin)# commit Commit complete. admin@ncs(config-umap-admin)#
ちなみに、topコマンドで最上位階層に戻れます。便利です。
admin@ncs(config-umap-admin)# top admin@ncs(config)#
5.2 authgroupと接続方法の関連付け
① Device Nameを定義します。
admin@ncs(config)# devices device N1
② Deviceにauthgroupを定義します。
admin@ncs(config-device-N1)# authgroup AUTH
③ Deviceの管理IPアドレスを定義します。
admin@ncs(config-device-N1)# address 192.168.2.212
④ 接続ポート番号を定義します。(今回はtelnetで登録します。)
admin@ncs(config-device-N1)# port 23
⑤ デバイスタイプ(NED種別)を定義します。(今回はIOS-XRを登録します。)
admin@ncs(config-device-N1)# device-type cli ned-id cisco-iosxr-cli-7.38
⑥ デバイスタイプ(vty種別)を定義します。(接続ポート番号に合わせます。)
admin@ncs(config-device-N1)# device-type cli protocol telnet
⑦ 登録デバイスをsouthboundで有効化します。
admin@ncs(config-device-N1)# state admin-state unlocked
⑧ 登録デバイスをCMDBに反映します。
admin@ncs(config-device-N1)# commit Commit complete. admin@ncs(config-device-N1)#
⑨ 登録デバイスを確認します。
admin@ncs# show devices list NAME ADDRESS DESCRIPTION NED ID ADMIN STATE ------------------------------------------------------------------- N1 192.168.2.212 - cisco-iosxr-cli-7.38 unlocked admin@ncs#
6. デバイスの操作
admin@ncs# devices device N1 connect result true info (admin) Connected to N1 - 192.168.2.212:23 admin@ncs#
② デバイスに対してNSOからshowコマンドを発行します。(show route ospf)
admin@ncs# devices device N1 live-status exec show route ospf result Tue Mar 15 11:35:29.253 UTC O 1.1.1.2/32 [110/1040] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 (!) [110/20] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 1.1.1.3/32 [110/1030] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 (!) [110/30] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 1.1.1.4/32 [110/30] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 [110/1030] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 (!) O 1.1.1.5/32 [110/20] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 [110/1040] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 (!) O 1.1.1.6/32 [110/1050] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 (!) [110/30] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 1.1.1.11/32 [110/20] via 99.1.11.11, 1d08h, GigabitEthernet0/0/0/0 O 99.2.3.0/24 [110/1030] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 (!) [110/20] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 99.2.6.0/24 [110/1040] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 (!) [110/20] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 99.2.8.0/24 [110/1040] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 (!) [110/20] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 99.3.4.0/24 [110/1020] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 [110/1020] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 O 99.4.5.0/24 [110/20] via 99.1.5.5, 1d08h, GigabitEthernet0/0/0/1 [110/1030] via 99.1.2.2, 1d08h, GigabitEthernet0/0/0/2 (!) RP/0/RP0/CPU0:N1#
次回は、NSOからの操作についてもう少し多くの操作を実施します。
最後までお読みいただきありがとうございました!
-
https://learningnetwork.cisco.com/s/question/0D53i000015hRUxCAM/ccie-service-provider-build-your-own-lab-and-beyond-post-webinar-open-discussion-thread 【CCIE Service Provider: Build your own lab (and beyond) | Post Webinar Open Discussion Thread / page12】↩