paloma blog

NWエンジニアやってます。技術の備忘など。Pythonもちょっと。タイトルは好きなカクテルから。

nwdiagでNW構成図を自動生成

日付変わって10月最終日です。
今月全然記事書いてない!
というわけで最終日に1つ書きます。


本ブログはNWエンジニアの技術ブログとして始めましたが、業務の関係上設計や資料の持ち出しがNGでNW関連のことがあまり書けませんでした。
そんな中やっとNW系で面白そうなものを発見しました。

nwdiag

ブロック図生成ツール blockdiag — blockdiag 1.0 ドキュメント

python製の自動ブロック図生成パッケージです。
NW構成図のほかにも別タイプの描画ができるようです。

最近NW界隈でもConfigのオートメーションとか色々話題に出ていますが、構成図も自動で作れたら楽ですよね。

今の現場は担当しているシステムの規模も大きく、担当がはっきり分かれており構成図もNW屋の成果物となっています。
(SIはどこもそうかもしれないけど)

SIerだとvisioで書くのが主流ですかね。
PJみんなで共有する資料になるので、なるべくかっこよく書かなければいけません。 見栄え上線の傾き、オブジェクト位置のずれなども気にする必要があります。

しかしnwdiagを使えば自動でいい感じに生成できるので試してみます。

インストール

サブ機ubuntu desktopにいれます。

masashi@PC-ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

専用コンテナ立てるか…とおもったけどサーバでもないしわざわざ作らなくてもいいかな。

というわけでpython仮想環境にインストール

masashi@PC-ubuntu:~$  python3 -m venv homenwdiag
masashi@PC-ubuntu:~$ 
masashi@PC-ubuntu:~$ cd homenwdiag/
masashi@PC-ubuntu:~/homenwdiag$ source bin/activate
(homenwdiag) masashi@PC-ubuntu:~/homenwdiag$ 
(homenwdiag) masashi@PC-ubuntu:~/homenwdiag$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (o
r define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
pkg-resources (0.0.0)
setuptools (39.0.1)

公式に前提パッケージが乗っていますが、pipで一緒に入るようです。

(homenwdiag) masashi@PC-ubuntu:~/homenwdiag$ pip install nwdiag
Collecting nwdiag
  Downloading https://files.pythonhosted.org/packages/8e/06/42e672cc4b0efddd40f0c0de412dda7c29f8a971afb54b3d77579c
28aa29/nwdiag-1.0.4-py2.py3-none-any.whl (7.7MB)(homenwdiag) masashi@PC-ubuntu:~/homenwdiag$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (o
r define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
blockdiag (1.5.4)
funcparserlib (0.3.6)
nwdiag (1.0.4)
Pillow (5.3.0)
pip (9.0.1)
pkg-resources (0.0.0)
setuptools (39.0.1)
webcolors (1.8.1)

これで準備OK。

自宅環境を書いてみる

そろそろdraw.ioでも使って自宅環境書くかーと思っていたところ、

という素晴らしい要素がそろっていたので、これでメンテしていきます。
as codeとしてバージョン管理できるしね。

インプットファイルを書く

diagファイルに書いてコマンドでアウトプットします。

  • home.diag
nwdiag {

  Internet [shape=cloud]
  Internet -- RT
  
  network HomeNW {
      address = "192.168.0.0/24"

      RT [address = "192.168.0.1"];
      Windows10 [address = "192.168.0.23"];
      Ubuntu18.04 [address = "192.168.0.10"];
      TVRecodeSV [address = "192.168.0.13"];
      RaspberryNAS [address = "192.168.0.19"]
  }
}

出力!

nwdiagコマンドで出力します。
オプションはいろいろありますが、困るまではデフォルトで行きます。

(homenwdiag) masashi@PC-ubuntu:~/homenwdiag$ nwdiag home.diag 
(homenwdiag) masashi@PC-ubuntu:~/homenwdiag$ ll
合計 60
drwxr-xr-x  6 masashi masashi  4096 1031 00:51 ./
drwxr-xr-x 42 masashi masashi 16384 1031 00:51 ../
drwxr-xr-x  2 masashi masashi  4096 1031 00:20 bin/
-rw-r--r--  1 masashi masashi   331 1031 00:51 home.diag
-rw-r--r--  1 masashi masashi 12769 1031 00:52 home.png  # これが出力される
drwxr-xr-x  2 masashi masashi  4096 1031 00:20 include/
drwxr-xr-x  3 masashi masashi  4096 1031 00:20 lib/
lrwxrwxrwx  1 masashi masashi     3 1031 00:20 lib64 -> lib/
-rw-r--r--  1 masashi masashi    69 1031 00:20 pyvenv.cfg
drwxr-xr-x  3 masashi masashi  4096 1031 00:20 share/

開いてみる

Linuxだと透明色は市松模様で出るらしくちょっと見にくいですね。
背景色の記述がなく変更方法がわかりませんでした。
Windowsで試したときは背景白で綺麗に見えたのですが・・・。

自分用にはギリ許容できますが、人様に見せるには色とフォントを改良する必要がありますね。

f:id:paloma69:20181031005352p:plain

それにしてもセグメントすくねーw
図面に起こすレベルじゃないですねw

お恥ずかしながらNWエンジニアの身であるにも関わらず自宅環境は1セグメントしかありません。
しかもISPのレンタルルータのみという体たらく。
主要マシンにしかAnti Virusは入れてないので、この環境にウイルス入っちゃったらやばいですね。

いいわけ

サーバ環境やpythonに興味が移っているだけで、
家でOpenflow走らせるとか、VXLAN使いたいとか野望はあるんですよ。

NW機器って単体だけだと役に立たないんで、最低でもルータ、スイッチの2台は無いといけません。
冗長構成組みたいならその倍・・・。

でもNW機器買うならサーバとかにお金使いたいよね。
ルータも仮想ルータで事足りるし。

今静音サーバ購入を検討中なので、サーバ買ったら仮想NWをバンバン作ろうと思います。

感想

NW構成図を自動で生成できるということですごい便利なツールだと思いますが、
ファイルの記述法はそんなに難しくなく、さくっと図が作れてしまいました。

大規模NW等をこれで制御するのは難しそうですが、小規模オフィスとかなら十分間に合いそうです。

急成長企業など、設計が追いつかなくて複雑になってしまったNW環境のconfigからIPを抜いて、
これで再作成してドキュメントの答え合わせみたいな使い方もできそうです。

今日はnwdiagコマンドだけですが、別のコマンドで別のブロック図が作れるようなので、また時間があれば試してみたいと思います。

こういう可視化のツールを作れる人は本当に天才だと思います。私は頑張ってもこの領域には届かなそう。