![見出し画像](https://assets.st-note.com/production/uploads/images/166046953/rectangle_large_type_2_94795f3145c0469bccd435399a7e5b5d.png?width=1200)
「体験しながら学ぶ ネットワーク技術入門」で紹介されている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で起動してみると
![](https://assets.st-note.com/img/1734385664-VEAmIONUZSfJk2BjFLqiWtzv.png?width=1200)
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で出力したトポロジーは
![](https://assets.st-note.com/img/1734385851-7H1SCGzpekWZ6BKj8Rbt3Jlv.png?width=1200)
のようになりました。
なんとなくできたので、今朝はここまでにします。
明日に続く
ソースコードは、gistにあります。
いいなと思ったら応援しよう!
![twsnmp](https://assets.st-note.com/production/uploads/images/14333815/profile_ee1accba5615957e5029db85d57fdb0a.jpg?width=600&crop=1:1,smart)