🎨

NW図 as Code(7) nwdiagを試す

2022/06/16に公開

はじめに

論理ネットワーク構成図をコードで書きます。

テキスト形式から物理ネットワーク図を作るのはいろんなツールでやってみたのですが、論理ネットワーク図はこれが最初です。
PlantUMLでnwdiagが使えるので、その機能で描いています。

結果

描いた図がこちらです。

元になるコードはこちら。オンラインエディタ

@startuml
<style>
nwdiagDiagram {
  network {
    BackGroundColor Orange
  }
  server {
    BackGroundColor LemonChiffon
    LineColor black
    FontStyle bold
    Shadowing 1
  }
  arrow {
    FontSize 12
    FontColor Red
    FontStyle bold
    LineColor Chocolate
  }
}
</style>
nwdiag {
  network lan0{
    address = "10.0.0.0/24";
    router0 [address = "10.0.0.10"];
    router1 [address = "10.0.0.11"];
  }
  network lan1{
    address = "10.0.10.0/24";
    router0 [address = "10.0.10.2"];
    router1 [address = "10.0.10.3"];
    firewall0 [address = "10.0.10.252"];
    firewall1 [address = "10.0.10.253"];
  }
  network lan2{
    address = "10.0.11.0/24";
    firewall0 [address = "10.0.11.2"];
    firewall1 [address = "10.0.11.3"];
    l3sw0 [address = "10.0.11.252"];
    l3sw1 [address = "10.0.11.253"];
  }
  network lan3{
    address = "10.0.12.0/24";
    lb0 [address = "10.0.12.252"];
    lb1 [address = "10.0.12.253"];
    l3sw0 [address = "10.0.12.2"];
    l3sw1 [address = "10.0.12.3"];
  }
  network lan4{
    address = "10.0.13.0/24";
    l3sw0 [address = "10.0.13.2"];
    l3sw1 [address = "10.0.13.3"];
    host1 [address = "10.0.13.128"];
    host2 [address = "10.0.13.129"];
  }
}
@enduml

ノード、ネットワークセグメントの書き方

構文はいたってシンプルです。
network ネットワーク名 { ~ }でひとつのネットワークセグメント(L2ネットワーク)を表現します。
~の部分にノード名とIPアドレスを記載します。

@startuml
nwdiag {
  network lan0{
    address = "10.0.0.0/24";
    router0 [address = "10.0.0.10"];
    router1 [address = "10.0.0.11"];
  }
}
@enduml

複数セグメントに接続

ネットワーク機器は複数のネットワークセグメントに足を出していることが多いですよね。
二つ目のネットワークlan1を追加しました。
router0とrouter1はlan0とlan1の両方に接続されている状態です。

@startuml
nwdiag {
  network lan0{
    address = "10.0.0.0/24";
    router0 [address = "10.0.0.10"];
    router1 [address = "10.0.0.11"];
  }
  network lan1{
    address = "10.0.10.0/24";
    router0 [address = "10.0.10.2"];
    router1 [address = "10.0.10.3"];
    firewall0 [address = "10.0.10.252"];
    firewall1 [address = "10.0.10.253"];
  }
}
@enduml

うまいことネットワーク機器から複数セグメントに接続している図が描けました。

スタイル

スタイル(色、太さ等)の書き方はこんな感じです。

<style>
nwdiagDiagram {
  network {
    BackGroundColor Orange
  }
  server {
    BackGroundColor LemonChiffon
    LineColor black
    FontStyle bold
    Shadowing 1
  }
  arrow {
    FontSize 12
    FontColor Red
    FontStyle bold
    LineColor Chocolate
  }
}
</style>

セグメントとノードを追加していくと簡単に図が描けます。

まとめ

論理ネットワーク図を描くツールというのがあまり見つかりませんでした。
簡単な図なら本記事のように書けるのですが、ホスト数が多くなるとどんどん図が横に長くなるという点がつらいなと思います。

関連記事

Discussion