見出し画像

「体験しながら学ぶ ネットワーク技術入門」で紹介されているtinetのネットワークをcontainerlabへ変換するツールを作っています

今朝は4時前に助手の猫さんが起こしてくれました。今朝の起こし方はかなりマイルドでした。猫さんはご飯を食べたあと、かみさんの布団で二度寝しています。

今朝は

で考えた計画の中からtinetの構成ファイルをcontainerlabのスペックファイルへ変換するツールを作ることにしました。
前から方法は考えていましたが、諸々、別の開発で後回しになっていました。やっと、作ることができました。

ちなみにtinetは、

containerlabは

です。どちらもコンテナ(Dcoker)技術を利用したネットワークテスト環境構築のツールです。
tinetは、日本の人が開発しているようです。containerlabは、たぶんノキアの人が作っているようです。フィンランドの人だと思います。

containerlabのマニュアルを日本語に翻訳している人を見つけました。

ありがたいことです。

tinetのネットワーク構成(スペック)ファイルの仕様は

にあります。
conainerlabのネットワーク構成(トポロジー)ファイルの仕様は

です。
全部完璧に変換できるようにするのは、ものすごく大変なので、今回は、tinetのサンプルにある

---
nodes:
- name: R1
  image: tinynetwork/pmacctd:develop
  interfaces:
  - { name: net0, type: direct, args: R2#net0 }
  - { name: net1, type: direct, args: R3#net0 }
  - { name: net2, type: direct, args: R4#net0 }
- name: R2
  image: tinynetwork/pmacctd:develop
  interfaces:
  - { name: net0, type: direct, args: R1#net0 }
- name: R3
  image: tinynetwork/pmacctd:develop
  interfaces:
  - { name: net0, type: direct, args: R1#net1 }
- name: R4
  image: tinynetwork/pmacctd:develop
  interfaces:
  - { name: net0, type: direct, args: R1#net2 }

node_configs:
- name: R1
  cmds:
  - cmd: ip addr add 10.2.0.1/24 dev net0
  - cmd: ip addr add 10.3.0.1/24 dev net1
  - cmd: ip addr add 10.4.0.1/24 dev net2
- name: R2
  cmds:
  - cmd: ip addr add 10.2.0.2/24 dev net0
  - cmd: ip route add default via 10.2.0.1
- name: R3
  cmds:
  - cmd: ip addr add 10.3.0.2/24 dev net0
  - cmd: ip route add default via 10.3.0.1
- name: R4
  cmds:
  - cmd: ip addr add 10.4.0.2/24 dev net0
  - cmd: ip route add default via 10.4.0.1

を変換できるぐらいのプログラムを作ることにしました。
tinetの構成ファイルの読み込みは、tinetのソースコードから転用しました。containerlabのトポロジーファイルの出力は、最初まじめにYAMLのパッケージを使って作ろうと思っていましたが、やめました。テキストで出力したほうが楽なので簡単な方法に逃げました。変換した結果は、

name: test
topology:
  nodes:
    R1:
      kind: linux
      image: tinynetwork/pmacctd:develop
      exec:
        - ip addr add 10.2.0.1/24 dev net0
        - ip addr add 10.3.0.1/24 dev net1
        - ip addr add 10.4.0.1/24 dev net2
    R2:
      kind: linux
      image: tinynetwork/pmacctd:develop
      exec:
        - ip addr add 10.2.0.2/24 dev net0
        - ip route add default via 10.2.0.1
    R3:
      kind: linux
      image: tinynetwork/pmacctd:develop
      exec:
        - ip addr add 10.3.0.2/24 dev net0
        - ip route add default via 10.3.0.1
    R4:
      kind: linux
      image: tinynetwork/pmacctd:develop
      exec:
        - ip addr add 10.4.0.2/24 dev net0
        - ip route add default via 10.4.0.1
  links:
    - endpoints: ["R1:net0","R2:net0"]
    - endpoints: ["R1:net1","R3:net0"]
    - endpoints: ["R1:net2","R4:net0"]

です。
containerlabで起動してみると

ip routeコマンドでエラーがでているようですが、起動はできて、R1からR4へpingはOKでした。

root@R1:/# ping 10.4.0.2
PING 10.4.0.2 (10.4.0.2) 56(84) bytes of data.
64 bytes from 10.4.0.2: icmp_seq=1 ttl=64 time=2.93 ms
64 bytes from 10.4.0.2: icmp_seq=2 ttl=64 time=0.362 ms

containerlabで出力したトポロジーは

のようになりました。
なんとなくできたので、今朝はここまでにします。

明日に続く

ソースコードは、gistにあります。


いいなと思ったら応援しよう!

twsnmp
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。