inet-hengeを使ってネットワーク構成図を自動作成してみる

スポンサーリンク

はじめに

技術の進歩は凄まじいもので、昨今巷ではネットワーク構成図を自動作成するところまで来ているようです。今回はinet-hengeを使ってネットワーク構成図を自動作成してみようと思います。

inet-hengeのgithub

inet-hengeでネットワーク構成図を自動作成する場合どのネットワーク機器同士が接続しているかを表すjsonファイルが必要になります。今回は

A. jsonファイルを用意する方法

B. jsonファイルを用意せずにbatfishでどうにかする方法

の2つを試してみます。

参考サイト

Bのjsonファイルを用意せずにbatfishを使う方法はこちらを参考にさせていただきました。

inet-hengeのカスタマイズ用

使用するネットワークと機器のconfigについて

構成図にするネットワークは以前batfishを触ってみたときに作った適当なネットワーク+αを使いました。

drawioで描いたネットワーク構成図はこんな感じです。Switch0,1は以前は名前を付けてなかったんですが便宜上付けました。configは初期設定からhostnameだけ変更したものなので省略します。

+αはchannel表記を見るためだけに作ったChannel-Switch0,1の2台です。自動的に構成図が作成される際にchannelの図が見たかったので追加しました。以前のrouter1,2,3,4とは接続せず2つのSwitch間をchannelで接続しているだけです。一応Channel-Switch0のconfigを載せておきます。Channel-Switch1.cfgはhostnameとIPアドレス箇所以外変わりません。

Channel-Switch0.cfg

diff Channel-Switch0.cfg Channel-Switch1.cfg

A. jsonファイルを用意してbatfishを使わないパターン

まずはbatfishを使用せずにinet-hengeだけで構成図を作ってみます。

A-1. inet-hengeの準備

まずは適当なディレクトリにinet-hengeをgit cloneします。git cloneしたらinet-henge/exampleに移動します。

git clone https://github.com/codeout/inet-henge.git

cd inet-henge/example

A-2. htmlとjsonファイルの用意

htmlファイルを作成します。handmade.htmlとしてます。index.htmlを参考に作成しました。

handmade.html

色が変わっている行にあるbundle: trueは機器間の接続を多重化(要はchannelを表示)するために設定しています。

width: 1280, height: 1024はブラウザでネットワーク構成図を表示する範囲を広げるために設定しました。

次にhandmade.jsonを作成します。こちらもindex.jsonとか参考にして一生懸命手書きしました。

handmade.json

nodeが表示されるnodeですね(そのまんま)

linksが接続している線ですね(そのまんま)

説明不要なくらいわかりやすい形してますねw

A-3. webサーバの起動

git cloneしたinet-hengeディレクトリに移動してwebサーバを起動します。

python3が入っているなら以下コマンドを実行します。この辺はgithub参照。

python3 -m http.server

A-4. 動作確認

webブラウザ立ち上げて先ほど立ち上げたwebサーバにアクセスします。私はchromeを使いました。

awsのec2で実行しているのでpublic ipにアクセスします。このときは54.199.84.108でした。

http://54.199.84.108:8000

アクセスするとこんな画面になります。

ちなみにここでexampleをクリックするとindex.htmlにアクセスすることになり、inet-hengeのサンプルを見ることができます。shownet.htmlもサンプルの様子。

http://54.199.84.108:8000/example/index.html
http://54.199.84.108:8000/example/shownet.html

先ほど作ったhandmade.htmlにアクセスしてみます。

http://54.199.84.108:8000/example/handmade.html

うまく行くとこんな感じの構成図が表示されます↓

少し位置を調整して拡大するとこんな感じになります↓

draw.ioで作った構成図とほぼ同じ図が作成されています!

channel部分も二重に接続されているのが表現されています。すごいですねinet-henge!

B. jsonファイルを用意せずにbatfishでどうにかする方法

今度はjsonファイルの代わりにbatfishからtopologyデータを取得して表示する方法です。まんま参考サイトのままですが試してみます。

B-1. batfishをpybatfishから起動

まずbatfishを動かします。今回はpybatfishを使う方法にしていますが、同じ設定のJupyter NotebookをRunさせても構成図を自動作成してくれます。

まずは以前と同様にでbatfish/allinoneのコンテナを起動させます。

docker-compose up -d

以下コマンドでpython3を起動させます。

docker exec -it batfish python3

その後以下のコマンドを実行します。

ログはこちら

重要なのはNETWORK_NAMEとSNAPSHOT_NAMEです。ここまでコマンドを実行したら画面放置で次へ進みます。

B-2. inet-hengeの準備

先ほどと同じようにinet-henge/example配下にhtmlファイルを用意します。jsonファイルは用意しません。ファイル名は参考サイトと同様にbatfish.htmlとしています。

batfish.html

const response = await fetch・・・箇所で指定しているアドレスはawsのIPv4 パブリック IPです。mynetwork、mysnapshotはpybatfishで指定したNETWORK_NAMEとSNAPSHOT_NAMEです。

B-3. webサーバの起動

jsonファイルを用意するほうと同じです。inet-hengeディレクトリで以下コマンドを実行します。

python3 -m http.server

B-4. 動作確認

同じように先ほど作成したbatfish.htmlにアクセスします。

http://54.199.84.108:8000/example/batfish.html

うまく行くと無事ネットワーク構成図が表示されます。

何も表示されない場合、右クリックから検証を選択してエラーの内容を確認すると原因がわかるかも? ※batfish.html内のIPアドレスはlocalhostにしてアクセスできないときに重宝しました。

表示されるのはこんな感じの図です。

位置を調整して拡大するとこんな感じになります。

jsonファイルをハンドメイドした場合と違ってだいぶ違う図になってますね。理由はjsonファイルの内容が違うからのようです。

B-おまけ:jsonなしバージョンでcurlで取得している情報について

curlでbatfishから取得している情報をjqで見やすくしたものを載せておきます。

これをbatfish.html内のjavascriptでjsonデータとして加工してくれています。

channel-switch0と1の接続IFはPort-Channel1と表示されています。L3ベースなのかな?

※つまりこの情報を強化すればもっと意図したネットワーク構成図が作れるかも?でもbatfishよくわからん。。

最後に

2つの例でinet-hengeを使ってみました。

個人的にはAのjsonファイルを細かく作るほうが意図した構成図を作れるので好きです。ただ大規模なネットワークでは厳しいかなと思いましたがその辺は工夫すれば何とかなるじゃないかなと。小規模ならハンドメイドでも良いですしね。

将来的にbatfishがもっといい感じになってBパターンで出来たら楽ですけどね。知らないだけで既に出来るなら最高。

関連コンテンツ



シェアする

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

フォローする