nwdiag にルーティング表示機能を追加
テキストベースでネットワーク構成図を作成する手段が無いものかと色々探したところ、 nwdiag が良さそうな感じだったのですが、 残念なことにパケットのルーティング周りに関して図示する機能がありませんでした。
他に良さそうなものがなかったのと、
それっぽい用途向けと思われる
route ステートメントが途中まで実装されていた状態だったので、
nwdiag にルーティングを図示する機能を追加してみました。
pull request が受理されるまでは
pip install git+https://github.com/flying-foozy/nwdiag@make-route-statement-available
等で私の公開リポジトリ経由でインストールしてください。
機能追加版の nwdiag を使うことで、 以下のようなテキスト記述から:
diagram {
inet [shape = cloud];
inet -- router;
network internal {
address = "192.168.0.0/24";
router [address = "192.168.0.1"];
client01 [address = "192.168.0.101"];
client02 [address = "192.168.0.102"];
}
route {
client02 -> router -> inet;
inet -> router -> client01 [path = "rb", color = "blue"];
}
}
以下のような図を生成できます。

ルーティングの描画は
"la" (Left-Above), "lb" (Left-Below), "ra" (Right-Above), "rb" (Right-Below)
の4通りの値のいずれかを path 属性に指定することで、
ネットワーク接続線に対する描画の相対位置を指定できます。
他にも、色(color)/強調の有無(thick)/線種(style)/
ネットワーク描画からのパディング(pad)が指定可能です。
diagram {
inet [shape = cloud];
inet -- router;
network {
router;
client01;
client02;
}
route {
client02 -> client01 [path = "rb", pad = 4, color = "green"];
client01 -> router [path = "lb", thick, color = "blue"];
router -> client01 [path = "ra", color = "maroon"];
client01 -> client02 [path = "la", pad = 4, style = "dotted"];
inet -> router [ pad = 1];
}
}
