inet-henge 利用例: Batfish ネットワークトポロジーの可視化
inet-henge を使うと、ネットワーク図を簡単に描画できます。
必要なのは「このデバイスは、あのデバイスとつながっている」という構成情報のみ。
{ "nodes": [ { "name": "A" }, { "name": "B" } ], "links": [ { "source": "A", "target": "B" } ] }
このエントリーでは、Batfish が持っているネットワークトポロジーをinet-henge をつかって可視化してみます。 たとえば、👇のようなネットワーク図が描けます。
Batfish とは
Batfish はネットワークコンフィグ分析ツールで、実機に投入せずとも confiuration validation / 各種プロトコルの状態確認 / ルーティングテーブルやACL分析が可能です。
その一環として、IPアドレスを元に layer-3 interface adjacencies を判定しネットワーク構成をデータ化する、ということもやっています。
詳細は こちら をご覧ください。
API で、Batfish ネットワークトポロジーを取得する
Batfish が持っているネットワークトポロジーは、👇のようなURLからAPIで取得できます。
http://<batfish_server>:9996/v2/networks/<network>/snapshots/<snapshot>/topology
チュートリアルの Getting Started with Batfish を試す場合でいえば、Batfish サーバーである 9996/tcp
を公開しておけばOKです。
$ docker run --rm -p 8888:8888 -p9996:9996 batfish/allinone [I 17:02:05.649 NotebookApp] Writing notebook server cookie secret to /data/.local/share/jupyter/runtime/notebook_cookie_secret [I 17:02:05.892 NotebookApp] Serving notebooks from local directory: /notebooks [I 17:02:05.892 NotebookApp] The Jupyter Notebook is running at: [I 17:02:05.892 NotebookApp] http://(5df00b13e028 or 127.0.0.1):8888/?token=2a0b09ed8f6a1aea73fc1f4e9360696224ec1d4bcbe646b5 [I 17:02:05.892 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [W 17:02:05.895 NotebookApp] No web browser found: could not locate runnable browser. [C 17:02:05.895 NotebookApp] To access the notebook, open this file in a browser: file:///data/.local/share/jupyter/runtime/nbserver-9-open.html Or copy and paste one of these URLs: http://(5df00b13e028 or 127.0.0.1):8888/?token=2a0b09ed8f6a1aea73fc1f4e9360696224ec1d4bcbe646b5
APIリクエストにX-Batfish-Version: 0.36.0
のようなHTTPヘッダーが必要な点にもご注意ください。
レスポンス例
$ curl -H "X-Batfish-Version: 0.36.0" http://localhost:9996/v2/networks/example_network/snapshots/example_snapshot/topology [ { "node1" : "as1border1", "node1interface" : "GigabitEthernet0/0", "node2" : "as1core1", "node2interface" : "GigabitEthernet1/0" }, { ...
inet-henge による可視化
Batfish が吐くデータ構造を、inet-henge が期待する形に変換します。
サンプルをこちらに掲載しますが、さほど複雑ではありません。 https://gist.github.com/codeout/07f3f711a7f0b5adec7fc8065b0f3958
コマンド等による前処理が面倒なため、ブラウザからBatfish APIを呼んでいます。
inet-henge によるネットワーク図
拡大するとインターフェイス名が現れます。
チュートリアル中にあるネットワーク図
まとめ
inet-henge によるネットワーク図は オートレイアウトのため、ひょっとすると好みの出力を得られないかもしれません。しかしながら「見てわかる」程度のネットワーク図を描くことが可能です。
HTMLをひとつ置いておくだけで、前処理なしでBatfish のネットワーク図が見れるというのは便利ですね!