docker-composeで動かしたBatfishをpybatfishから使う

スポンサーリンク

はじめに

Batfishというossのネットワーク構成分析ツールがあるのを知ったので使ってみました。

今回はbatfish/allinoneに入っているpybatfishを使い、自分が用意したciscoルータのconfigを分析(と言ってもIPアドレス抽出とかですが)してみたいと思います。

pybatfishをGUIで見れるJupyter Notebookは次回使います。今回はまったく使いません。

ciscoルータのconfigはCisco Packet Tracerで作ってみました。このシュミレーター、便利すぎてやばいと言う言葉しか出て来ませんでした。CCNAどころかCCNPくらいまでは使えるんじゃないかな?欠点はter len 0が使えないくらいかな。

参考サイト

Batfishに詳しい日本語のサイト。Batfishって何?という方はこちらのサイトがおすすめ。

公式のPybatfishのGetting started

quesions一覧。ここを見て色々作っていく感じ。

quesions一覧日本語版。参考になりました。

Cisco Packet Tracer ダウンロードの方法

Cisco Packet Tracerの使い方全般。

使ったconfig

適当なネットワークを組んでみました。構成図はdraw.io使ってます。
※さくっと作ったので構成に関する細かい突っ込みは勘弁してください。。

各種configはこんな感じです。SWは何も設定してないので割愛。

Router0.cfg

Router1.cfg

Router2.cfg

Router3.cfg

Batfishを動かすための構成

AWSのEC2でubuntu18.04を使いました。

構成

docker-compose.yaml

ちなみにdockerは18.09.8 docker-composeは1.24.1を使用してます。

docker-composeのversionが古いとversion3.7は動かないかも。version3.0とかでも普通に動くとは思います。

batfishのallinoneの方を使います。pybatfishも入っているのでコンテナ内に入ればそのままpybatfishが使えます。Jupyter Notebookも入っていますが今回は使いません。次回さわります。

mynet配下に自分で用意したconfigをdockerコンテナ内の/notebooks/mynetworksに配置してます。

コンテナ起動&pybatfishの実行

各ファイル、ディレクトリを用意したら以下コマンドでdockerを起動します。

docker-compose up -d

※停止はdocker-compose down

続いてコンテナ内でpythonの実行します。

docker exec -it batfish python3

※終了はCtrl + D

ここから公式のGetting startedの通りに実行します。

まずpybatfishのimport。

from pybatfish.client.commands import *

from pybatfish.question.question import load_questions, list_questions

from pybatfish.question import bfq

question読み込み。

load_questions()

volumesで指定したmynetを/notebooks/mynetworks/としてsnapshotの取得

bf_init_snapshot('/notebooks/mynetworks/')

以下ここまでのlog

ここまででお膳立て終了。実際に動かす面白いところはここから。

各configのIFにあるIPアドレスを取得します。

ip_owners_ans = bfq.ipOwners().answer()

ip_owners_ans.frame()

.head()つけると上から5行表示するみたい。確認用かな?とりあえずパス。

router0のGigabitEthernet0/0の情報を取得。

iface_ans = bfq.interfaceProperties(nodes='router0', interfaces='GigabitEthernet0/0', properties='all_prefixes').answer()

iface_ans.frame()

これで動作確認完了。でももうちょっと遊んでみます。

Jupyter NotebookにあったGetting started with Batfish.ipynbより以下を拝借。全configのルーティングテーブルが出てくる・・・すごい・・・

routes_ans = bfq.routes().answer()

routes_ans.frame()

node指定してみます。

routes_ans = bfq.routes(nodes="router0").answer()

routes_ans.frame()

一応router0のログだけPacker Tracerと見比べてみたけど同じでした。

最後に

batfishとpybatfishを動かしてみました。

これは面白い!

次はjupyter notebookからpybatfishを動かしてみます。

関連コンテンツ



シェアする

  • このエントリーをはてなブックマークに追加

フォローする