気まぐれハック

HiRØのゆるふわIT備忘録

batfishを使ってみた

はじめに

今まではAnsibleを使ったconfigの自動的に機器に設定するなどやってきた。
しかし、ネットワークconfigの検証の記事がかけてないと思い。
そこでネットワークconfig分析を行うためにbatfishというツールを使ってみた。

動作環境

Docker on Mac OS

目次

検証内容

R1.cfg/R2.cfgといった2つのconfigを用意 configの中身はシンプルにIPアドレスが重複してるものとなっている。 そのconfigをbatfishにて被っているかを検出する。

環境構築

まずは環境構築

batfishのコンテナが提供されている為それを使用する。
下記が今回使用するコンテナイメージである。
・batfish/allinone

コンテナを起動

docker run -d -p 8888:8888 --name batfish batfish/allinone

すると下記のように起動していることを確認。

$docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED              STATUS              PORTS                                      NAMES
a720fad08ed5   batfish/allinone                 "./wrapper.sh"           About a minute ago   Up About a minute   0.0.0.0:8888->8888/tcp, 9996-9997/tcp      batfish

検証対象のconfig

・R1.cfg

hostname R1
!
enable password cisco
!
username cisco password 0 cisco
no aaa new-model
!
interface Vlan1
 ip address 192.168.100.20 255.255.255.0
!
end

・R2.cfg

hostname R2
!
enable password cisco
!
username cisco password 0 cisco
no aaa new-model
!
interface Vlan1
 ip address 192.168.100.20 255.255.255.0
!
end

上記のcfgファイルをコンテナのconfigsディレクトリにコピーして置いてください。
コピー方法は下記です。

docker cp R1.cfg batfish:/notebooks/networks/example/batfish_test/configs
docker cp R2.cfg batfish:/notebooks/networks/example/batfish_test/configs

batfish_testディレクトリに関して今回検証用に作成したディレクトリであるため好きな名前のディレクトリで実施してください。
デフォルトではexampleディレクトリが用意されておりそれでも大丈夫です。
ディレクトリを新たに作成する場合、配下にconfigディレクトリとhostsディレクトリとiptablesディレクトリがあることに注意してください。

検証

このコンテナには既にbatfishを動かす為の、pybatfishがinstallされている為、
batfishコンテナでpython3を実行して検証を行う。
対象のコンテナで特定のコマンドを実行させる方法は下記です。

docker exec -it batfish python3

対象のコンテナでpython3を実行できたら下記にて必要なモジュールと設定ファイルを読み込みます。
bf_init_snapshotのパラメーターは個人のものに合わせてください。

>>> from pybatfish.client.commands import *
>>> from pybatfish.question.question import load_questions
>>> from pybatfish.question import bfq
>>> load_questions()
Successfully loaded 64 questions from remote
Successfully loaded 64 questions from remote
>>> bf_init_snapshot('/notebooks/networks/example/batfish_test/', name='test', overwrite=True)
status: TRYINGTOASSIGN
.... no task information
status: TRYINGTOASSIGN
.... no task information
status: CHECKINGSTATUS
.... no task information
status: CHECKINGSTATUS
.... no task information
status: CHECKINGSTATUS
.... no task information
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Serializing 'org.batfish.representation.host.HostConfiguration' instances to disk 0 / 2.
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Serializing 'org.batfish.representation.host.HostConfiguration' instances to disk 2 / 2.
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Parse network configs 0 / 2. (00:00:05 elapsed)
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Serializing 'org.batfish.representation.cisco.CiscoConfiguration' instances to disk 0 / 2. (00:00:07 elapsed)
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Reading, unpacking, and deserializing files containing 'org.batfish.vendor.VendorConfiguration' instances 2 / 4. (00:00:08 elapsed)
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Serializing 4 vendor-independent configuration structures for snapshot a3779dc8-c69e-4307-b786-24e2fd3a1335 0 / 4. (00:00:11 elapsed)
status: CHECKINGSTATUS
.... 2021-04-11 14:51:35.363000+00:00 Deserializing objects of type 'org.batfish.datamodel.Configuration' from files 4 / 4. (00:00:13 elapsed)
status: TERMINATEDNORMALLY
.... 2021-04-11 14:51:35.363000+00:00 Deserializing objects of type 'org.batfish.datamodel.Configuration' from files 4 / 4. (00:00:17 elapsed)
Default snapshot is now set to test
status: CHECKINGSTATUS
.... no task information
status: CHECKINGSTATUS
.... 2021-04-11 14:51:57.425000+00:00 Begin job.
status: TERMINATEDNORMALLY
.... 2021-04-11 14:51:57.425000+00:00 Begin job.
'test'

次でIPアドレス被りがあるか確認できる。

>>> bfq.ipOwners(duplicatesOnly=True).answer().frame()
status: TRYINGTOASSIGN
.... no task information
status: CHECKINGSTATUS
.... no task information
status: CHECKINGSTATUS
.... no task information
status: CHECKINGSTATUS
.... 2021-04-11 14:52:53.437000+00:00 Begin job.
status: TERMINATEDNORMALLY
.... 2021-04-11 14:52:53.437000+00:00 Begin job.
  Node      VRF Interface              IP Mask Active
0   r2  default     Vlan1  192.168.100.20   24   True
1   r1  default     Vlan1  192.168.100.20   24   True

参考資料

pybatfish.readthedocs.io

おわりに

本ツールは他にも様々な検証に使えるため、色々と使って記事にしようと思う。

Cisco NSOを使ってみた。

はじめに

Cisco NSO(Network Service Orchestrator)を導入してCiscoルーター(IOS)のconfigを書き換えるところまでやってみた。

NSOには評価版と商用版があります。
商用として使用するわけでないので、評価版を使用します。

Cisco Blogを参考にして自宅ラボの環境でも設定してみた。
参考記事と被っているいる箇所はあるが、バージョンや動作環境などが異なる為、比較しながら参考にしていただければ幸いです。
※参考にした記事は本記事の最後の方にリンクを掲載しております。

動作環境

動作環境は以下です
・ハード:Dell Poweredge R610
・OS: Ubuntu on VMware ESXi
・ルータ: Cisco(iOS)-892 サービス統合型ルータ

目次

事前準備

NSOを使用するには下記がインストールされている必要がある。
私の環境は下記のバージョンにて動作確認したものとする。

Python 2.7.18
・ant 1.10.7-1
・paramiko 2.6.0
・OpenSSH_8.2p1
・openjdk 11.0.10
・make 4.2.1

セットアップ

■ダウンロード
ダウンロードが必要なものは下記です。
※ダウンロードにはCCO IDが必要になるので、アカウント作成を行ってからダウンロードしてください。

NSO 5.5 Linux
Cisco IOS(XE) NED

下図を参考にNSO 5.5 LinuxCisco IOS(XE) NEDをダウンロードしてください。 f:id:HiRo1325:20210311230523p:plain

ダウンロードページはこちらになります。 developer.cisco.com

■ファイルの展開
ダウンロードしたファイルを展開します。

root@hiro-virtual-machine:~/NSO# bash nso-5.5.linux.x86_64.signed.bin

NSOのインストール
展開されたファイルにinstallerのファイルがあるので、下記コマンドでNSOインストールを行う。

root@hiro-virtual-machine:~/NSO# bash nso-5.5.linux.x86_64.installer.bin

Cisco NSO起動
インストールが完了したらCisco NSOの起動を行います。
起動コマンドはこちらです。

root@hiro-virtual-machine:~/NSO# ncs

webuiにアクセスすることで起動できているか確認できる。
アクセス方法は下記です。

http://<ubuntuのIP>:8080

f:id:HiRo1325:20210313232355p:plain

初回ログインはusernameとpasswordはadminです。

バイス登録

それではデバイス登録としてCiscoルータを登録してみた。

■NEDパッケージの追加
まずはNEDパッケージの読み込みが必要になる。
NEDパッケージの追加するにはダウンロードしたCisco IOS(XE) NEDのファイルを展開する。

root@hiro-virtual-machine:~/NSO# sh ncs-5.5-cisco-ios-6.69.1.signed.bin

NCS CLIログインを行うには下記コマンドにて行う。
簡単にオプションを説明すると-u でadminユーザ、-CにてCisco Styleにてログインを行う。

root@hiro-virtual-machine:~/NSO# ncs_cli -u admin -C

User admin last logged in 2021-03-14T02:12:13.630744-00:00, to hiro-virtual-machine, from 192.168.100.13 using webui-http
admin connected from 127.0.0.1 using console on hiro-virtual-machine
admin@ncs# 

下記コマンドにてパッケージの読み込みを行う。

admin@ncs# packages reload
reload-result {
    package cisco-ios-cli-6.69
    result true
}

次に認証設定を行う。
ここではルータの認証情報の設定を行う。
※XXXXXXは個人の環境のものに合わせてください

admin@ncs# config
Entering configuration mode terminal
admin@ncs(config)# devices authgroups group ios-auth
admin@ncs(config-group-ios-auth)# umap admin
admin@ncs(config-umap-admin)# remote-name XXXXXX
admin@ncs(config-umap-admin)# remote-password XXXXXX
admin@ncs(config-umap-admin)# remote-secondary-password XXXXXX
admin@ncs(config-umap-admin)# commit
Commit complete.
admin@ncs(config-umap-admin)# end

次にルータのIPや接続プロトコルを設定することでデバイスの登録ができる。

admin@ncs# config
Entering configuration mode terminal
admin@ncs(config)# devices device ios1
admin@ncs(config-device-ios1)# authgroup ios-auth
admin@ncs(config-device-ios1)# address 192.168.100.23
admin@ncs(config-device-ios1)# port 23
admin@ncs(config-device-ios1)# device-type cli ned-id cisco-ios-cli-6.69
admin@ncs(config-device-ios1)# device-type cli protocol telnet
admin@ncs(config-device-ios1)# state admin-state unlocked
admin@ncs(config-device-ios1)# commit
Commit complete.
admin@ncs(config-device-ios1)# end

バイス確認

バイス登録ができたか下記コマンドにて確認ができる。

admin@ncs# show devices list
NAME  ADDRESS         DESCRIPTION  NED ID              ADMIN STATE
------------------------------------------------------------------
ios1  192.168.100.23  -            cisco-ios-cli-6.69  unlocked

ルータに接続

下記コマンドにてCiscoルータ(IOS)に接続

admin@ncs# devices device ios1 connect
result true
info (admin) Connected to ios1 - 192.168.100.23:23

configの同期

下記コマンドにてciscoルータのconfig取り込み。

admin@ncs# devices device ios1 sync-from
result true

コンフィグ修正

・NCS CLIで書き換え
NCS CLIでconfig変更手順は下記です。

admin@ncs# config
Entering configuration mode terminal
admin@ncs(config)# devices device ios1 config
admin@ncs(config-config)# interface GigabitEthernet 0
admin@ncs(config-if)# ip address 192.168.3.5 255.255.255.0
admin@ncs(config-if)# commit
Commit complete.

configを変更できたかルータにログインして確認

ios1#show int gigabitEthernet 0
GigabitEthernet0 is down, line protocol is down 
  Hardware is PQII_PRO_UEC, address is e05f.b923.8ecc (bia e05f.b923.8ecc)
  Internet address is 192.168.3.5/24
  MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Auto Duplex, 1Gbps, media type is RJ45
  output flow-control is XON, input flow-control is XON
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts (0 IP multicasts)
     0 runts, 0 giants, 0 throttles 
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 watchdog, 0 multicast, 0 pause input
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 1 interface resets
     0 unknown protocol drops
     0 babbles, 0 late collision, 0 deferred
     1 lost carrier, 0 no carrier, 0 pause output
     0 output buffer failures, 0 output buffers swapped out

・webuiで書き換え
webuiでも同様にconfig変更できるのでやってみた。

config変更するにはwebuiログインを行いDevice Managerを選択 f:id:HiRo1325:20210314024607p:plain

次に、configurationを選択。 f:id:HiRo1325:20210314024401p:plain

configuration配下に対象インターフェースのアドレスにて設定箇所がある為、直接書き換える。 f:id:HiRo1325:20210314050140p:plain

変更後のアドレスはこちらです。 f:id:HiRo1325:20210313013649p:plain

CLIと同様にcommitを行うことで繁栄される。 commitを行うにはCommit managerにて行う。 f:id:HiRo1325:20210314032446p:plain

Commit managerにて修正前と修正後の差分確認も行える。 f:id:HiRo1325:20210314044756p:plain

commit f:id:HiRo1325:20210314033148p:plain

ルータにて確認

ios1#show int gigabitEthernet 0
GigabitEthernet0 is down, line protocol is down
  Hardware is PQII_PRO_UEC, address is e05f.b923.8ecc (bia e05f.b923.8ecc)
  Internet address is 192.168.6.5/24
  MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Auto Duplex, 1Gbps, media type is RJ45
  output flow-control is XON, input flow-control is XON
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts (0 IP multicasts)
     0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 watchdog, 0 multicast, 0 pause input
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 1 interface resets
     0 unknown protocol drops
     0 babbles, 0 late collision, 0 deferred
     1 lost carrier, 0 no carrier, 0 pause output
     0 output buffer failures, 0 output buffers swapped out

参考にしたサイト

評価版 Cisco NSO を使ってみよう [2020年版]

評価版 Cisco NSO を使ってみよう NED 活用編 [2020年版]

評価版 Cisco NSO を使ってみよう NED 活用編 [2020年版]

さいごに

今回はデバイス一つに対して行ってみたが、次はJuniperも使って複数デバイスに対して設定できる記事を作成予定

AnsibleでZabbixサーバにホスト登録してみた。

はじめに

前回はAnsibleにてZabbixサーバに登録されている、とあるホストの削除を行った

前回の記事 hiro1325.hatenablog.com

今回はAnsibleにてホスト登録を行う。
登録するホストは前回削除対象となったホストと同等の設定内容とする。

環境

環境は前回使用したものとは若干異なる。
前回はZabbixサーバが導入されているRaspberry pi 4 BにてAnsibleを使用した。
今回、Zabbixサーバは前回と同様にRaspberry pi 4 B上に構築したものを使用するが、 Ansibleを実行するサーバは下記を使用する。

サーバの詳細
・ハード:Dell Poweredge R610
・OS: Ubuntu on VMware ESXi
・Ansibleバージョン:3.0

プレイブック

作成したプレイブックはこちらになります。

---
- hosts: zabbix
  user: root
  connection: local
  tasks:
    - name: create host 
      local_action:
        module: zabbix_host
        server_url: http://192.168.100.14/zabbix
        login_user: Admin
        login_password: zabbix
        host_name: router
        visible_name: router
        description: hostmake
        host_groups: cisco_router
        link_templates: Template Net Cisco IOS SNMPv2
        status: enabled
        state: present
        inventory_mode: disabled
        ipmi_authtype: null
        ipmi_privilege: 2
        interfaces:
          - bulk: 1
            details:
                community: '{$SNMP_COMMUNITY}'
            type: '2'
            main: 1
            useip: 1
            ip: "192.168.100.23"
            dns: ""
            port: "161"
        macros:
          - macro: '{$SNMP_COMMUNITY}'
            value: router

実行

実行してみた。 f:id:HiRo1325:20210221213140p:plain

確認

・ホストが作成されていることを確認 f:id:HiRo1325:20210221213401p:plain

・ホストの設定が期待値であることを確認 f:id:HiRo1325:20210221213541p:plain

・テンプレート設定が期待値であることを確認 f:id:HiRo1325:20210221213652p:plain

・マクロ設定が期待値であることを確認 f:id:HiRo1325:20210221213722p:plain

IPMI設定が期待値であることを確認 f:id:HiRo1325:20210221213750p:plain

上記の確認内容から手動でのホスト登録時の設定内容と同等のことができていると言える!!

おわりに

今回はホスト登録のみ行った。

次はciscoルーターSNMP設定まで一通りを自動化してみる。

ansibleでzabbixのホストを削除してみた。

はじめに

前回、zabbixにて手動で作成したホストがある。
このホスト(router)をansible-playbookにて自動削除してみる。

前回の記事はこちら

hiro1325.hatenablog.com

作成したプレイブック

作成したプレイブックはこちら。

---
- hosts: localhost
  connection: local
  tasks:
    - name: Create a new host or update an existing host's info 
      local_action:
        module: zabbix_host
        server_url: http://192.168.100.14/zabbix
        login_user: Admin
        login_password: zabbix
        host_name: router
        visible_name: router
        state: absent

実行

実行すると失敗したみたいです。

f:id:HiRo1325:20210217001738p:plain

調べてみるとzabbix-apiをpip installする必要があるみたい。

pi@raspberrypi:~/tool$ pip3 install zabbix-api
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting zabbix-api
  Downloading https://www.piwheels.org/simple/zabbix-api/zabbix_api-0.5.4-py3-none-any.whl
Installing collected packages: zabbix-api
Successfully installed zabbix-api-0.5.4

zabbix-apiがインストールされたことを確認。

pi@raspberrypi:~/tool$ pip3 list | grep zabbix
zabbix-api        0.5.4      

プレイブックの再度実行。
どうやら成功したみたい。

f:id:HiRo1325:20210217001536p:plain

zabbixにて確認してみた

無事、前回登録したホスト(router)は削除された。

f:id:HiRo1325:20210217002310p:plain

今回ホストグループの削除は行っていない。
その為、ホストグループ(cisco_router)が残っていることも確認。

f:id:HiRo1325:20210217002522p:plain

おわりに

次はansibleでzabbixにホスト登録の記事を書くことを考えている。

Zabbixに監視ホストを登録してみた

はじめに

今更ながらZabbixに監視ホストの登録方法を記事にする。
特に意味はない。
ブログで管理した方が楽だと思ったから。

環境

・ハードウェア:Raspberry pi 4 Model B ・Zabbixバージョン:5.0
・監視対象機器:Cisco(iOS)-892 サービス統合型ルータ

インストール

ダウンロードパッケージとインストール方法は公式ページを参照ください。

www.zabbix.com

ホストグループの作成

ログインすると次のような画面になる。
※初回ログイン時は英語表記になっている為、ユーザープロファイルにて日本語に変更を行ってください。

f:id:HiRo1325:20210214162127p:plain

メニューバーのホストグループにてホストグループを作成する。
名前は何でもよい。

f:id:HiRo1325:20210214162306p:plain

ホスト作成

次にメニューバーの設定(ホスト)について記載する。

ホストの新規登録

まず初めに登録対象の監視ホストを登録する。 下図のホストタブを参考にホスト名、グループ名、インターフェースの登録を行う。
ホスト名は任意に設定を行い、グループ名はホストグループで作成した名前を選択。
インターフェースはSNMP設定にて監視ホストのIPアドレスSNMPバージョン、マクロの設定を行う。
詳細は下図を参照。

f:id:HiRo1325:20210214173951p:plain

※ここでインターフェースの設定を誤るとテンプレート作成時にエラーが発生する。

テンプレート作成

次にホスト設定のテンプレートタブにてリンクさせるテンプレートを設定。
テンプレートタブの新規テンプレートをリンクの選択。

f:id:HiRo1325:20210214170425p:plain

リンクさせるテンプレートはTemplate/Network DevicesのホストグループからTemplate Net Cisco IOS SNMPv2を選択。

f:id:HiRo1325:20210214174105p:plain

マクロの設定

次にマクロの設定 マクロはホスト登録時と同様に{$SNMP_COMMUNITY}を設定。

f:id:HiRo1325:20210214172610p:plain

登録したマクロがこちらになります。 f:id:HiRo1325:20210214174239p:plain

ルーターの設定

監視対象のCisco(iOS)-892 サービス統合型ルータのSNMPの設定は下記に示す。

(config)#snmp-server host 192.168.100.14 router
(config)#snmp-server community router RO
(config)#snmp-server enable traps

グラフの確認

設定はこれにて完了。
ここからは正しく設定されてるかの確認を行う。

メニューバーの監視データのホストのグラフにより表示されることを確認。

f:id:HiRo1325:20210214183127p:plain

※グラフ確認はダッシュボードでも設定可能

障害通知の確認

ルーターにtrapの設定を行ったので障害通知の確認もやってみる。
監視対象機器のケーブルを抜いて障害通知があるか試してみる。

f:id:HiRo1325:20210214182552p:plain

正しく通知された。

おわりに

次のZabbixの記事はAnsibleと組み合わせた記事を考えている。

pyATS/Genieを導入して遊んでみる

やること

pyATS/GenieをインストールからCisco(IOS)-892サービス統合型ルータのバージョンを参照してみる。

環境構築

今回はVMware ESXiの仮想マシン(ubuntu)にpyATS/Genieを導入。 仮想マシンは下図を参照。

VMware ESXiに仮想マシン登録の記事はかけてない為、余力があれば記事を作成し本記事の更新を行う。

f:id:HiRo1325:20210211165724p:plain

まず最初に仮想環境を作る。

その為にpython3-venvのインストールを行う。

$ apt install python3-venv

pyatsディレクトリにて仮想環境を作成

$ python3 -m venv .

次にActivate

$ source bin/activate

ここまで出来たら、pyATS/Genieをインストールする。

インストールは下記コマンドで行う。

$ pip install pyats[full]

$ pip install genie[library]

$ pip install  xlrd xlwt xlsxwriter

Cisco(IOS)-892サービス統合型ルータのバージョン参照

Cisco(IOS)-892統合型ルータのホスト名、ユーザ名、IPアドレスを事前に設定しておく

ホスト名:R3 ユーザ名:cisco IPアドレス:192.168.100.23

次にgenie createコマンドにて対象機器のyamlファイルを作成する。 下記コマンド実行時に対話的に機器の情報を入力する必要がある。 詳細は下記を参照ください。

$ genie  create testbed --output yaml/testbed.yaml --encode-password

Start creating Testbed yaml file ...
Do all of the devices have the same username? [y/n] n
Do all of the devices have the same default password? [y/n] n
Do all of the devices have the same enable password? [y/n] n

Device hostname: R3
   IP (ip, or ip:port): 192.168.100.23
   Username: cisco
   Default Password (leave blank if you want to enter on demand): 
   Enable Password (leave blank if you want to enter on demand): 
   Protocol (ssh, telnet, ...): telnet
   OS (iosxr, iosxe, ios, nxos, linux, ...): ios
More devices to add ? [y/n] n
Testbed file generated: 
yaml/testbed.yaml 

ここまできたらようやくgenie parseにてshowコマンドを使用することができる。 genie parseコマンドの引数にshowコマンド、genie createで作成したyamlファイル、デバイスのホスト名を指定する。 今回はshow versionを行う。

$ genie parse "show version" --testbed-file yaml/testbed.yaml --devices R3

  0%|                                                                                               | 0/1 [00:00<?, ?it/s]{
  "version": {
    "chassis": "892",
    "chassis_sn": "FHK1451705J",
    "compiled_by": "prod_rel_team",
    "compiled_date": "Sun 02-Dec-18 13:05",
    "curr_config_register": "0x2102",
    "hostname": "R3",
    "image_id": "C890-UNIVERSALK9-M",
    "image_type": "production image",
    "last_reload_reason": "power-on",
    "last_reload_type": "Normal Reload",
    "license_level": "advipservices",
    "license_type": "Permanent",
    "license_udi": {},
    "main_mem": "498688",
    "mem_size": {
      "non-volatile configuration": "256"
    },
    "next_reload_license_level": "advipservices",
    "number_of_intfs": {
      "FastEthernet": "9",
      "Gigabit Ethernet": "1",
      "ISDN Basic Rate": "1"
    },
    "os": "IOS",
    "platform": "C890",
    "processor_board_flash": "250880K",
    "processor_type": "MPC8300",
    "returned_to_rom_by": "power-on",
    "rom": "System Bootstrap, Version 12.4(22r)YB3, RELEASE SOFTWARE (fc1)",
    "rtr_type": "892",
    "system_image": "flash:c890-universalk9-mz.150-1.M3.bin",
    "uptime": "4 weeks, 2 days, 19 hours, 1 minute",
    "version": "15.8(3)M1",
    "version_short": "15.8"
  }
}
100%|███████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  2.06it/s]

今回genie parseコマンドで指定するオプションなどはここまでとする。 別記事にて他のオプションを使用した記事を作成していく。 例えばoutputオプションなど。

参考ページ

参考にしたサイトは下記です。 genie parseで使用できるshowコマンドの記載がある。

developer.cisco.com

AristaのcEOS-lab環境を構築してみた

tarファイルのダウンロード

AristaのcEOS-labをdockerとして構築を行う。

まずdocker-imageを作成するためのtarファイルをダウンロードする。

ダウンロード先はこちらからダウンロードを行う。 アカウントが無い人は作成後ダウンロード可能になる。

www.arista.com

今回ダウンロードしたバージョンはEOS-4.25.1F

f:id:HiRo1325:20210201200410p:plain

docker-イメージの作成

ダウンロードしてきたtarファイルからdocker-イメージを作成する。

docker import  cEOS-lab-4.25.1F.tar ceos:latest  

イメージの作成できているかdocker imagesで確認。

REPOSITORY                               TAG                            IMAGE ID       CREATED          SIZE
ceos                                     latest                         a699767f6e07   12 minutes ago   1.69GB`

docker-コンテナの作成

ダウンロードページのcEOS-lab-README-generic.txtを参考に下記のように構築を行った。

docker-イメージ:  ceos:latest
docker-コンテナ名:  ceos2

※docker-イメージやコンテナ名は任意なので、個人の環境に合わせてください。

docker create --name=ceos2 --privileged -e INTFTYPE=eth -e ETBA=1 -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 -e CEOS=1 -e 
EOS_PLATFORM=ceoslab -e container=docker -i -t ceos:latest /sbin/init systemd.setenv=INTFTYPE=eth 
systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 
systemd.setenv=EOS_PLATFORM=ceoslab systemd.setenv=container=docker

コンテナ接続用のネットワークの作成

cEOSのコンテナが接続するネットワークの作成するコマンドです。 接続するネットワーク分作成を行う。

今回はお試しに3つ作成。

docker network create net1
docker network create net2
docker network create net3

ネットワークに接続

新しく作ったネットワークにceos2コンテナを接続

docker network connect net1 ceos2
docker network connect net2 ceos2
docker network connect net3 ceos2

コンテナの起動

コンテナを起動します。

docker start ceos2

Cliログイン

Cliログインを行う

docker exec -it ceos2 Cli

3つのネットワークに接続したことで、3つのインターフェースを使用することが可能。 次のコマンドで確認ができる。

localhost#show int status
Port       Name   Status       Vlan     Duplex Speed  Type            Flags Encapsulation
Et1               connected    1        full   unconf EbraTestPhyPort
Et2               connected    1        full   unconf EbraTestPhyPort
Et3               connected    1        full   unconf EbraTestPhyPort

最後に

いろいろ調べてるとSRも扱えそうに見えた。 次は実際にルーティングをしてみる。

localhost(config)#mpls label range ?
  bgp-sr   Specify labels reserved for BGP SR global segment identifiers (SIDs)
  dynamic  Specify labels reserved for dynamic assignment
  isis-sr  Specify labels reserved for IS-IS SR global segment identifiers (SIDs)
  l2evpn   Specify labels reserved for L2 EVPN routes
  srlb     Specify labels reserved for SR local segment identifiers (SIDs)
  static   Specify labels reserved for static MPLS routes