見出し画像

「体験しながら学ぶネットワーク管理技術入門」のテストネットワークをtinetからcontainerlabへ変える実験:4日目

今朝は3時16分に自力で起きました。助手の猫さんはリビングにいませんでした。寒すぎて、かみさんの布団に潜っているのかもしれません。「休憩!」とも言いに来ないようです。

さて、今朝早く目が覚めたのは、昨日のDNSの問題を調べるためです。トラブルシュートは何となく好きです。
まずは、問題のおさらい

家庭内のPC(cl1) からインターネットのwww.example.com(fw1)にPINGしました。DNSで名前解決できないエラーになりました。

# ping www.example.com
ping: www.example.com: Temporary failure in name resolution

cl1のDNS設定を確認してみました。

root@cl1:/# cat /etc/resolv.conf
nameserver 192.168.11.254

rt1がcl1のDNSサーバーに設定されてました。
そこで、rt1でpingを実行してみると同じDNSのエラーです。どうやらrt1のDNS設定に問題があるようです。設定を確認してみると

root@rt1:/# cat /etc/resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 192.168.1.1

でした。どうやら Docker Engineが私の自宅のローカル環境のルーターをDNSサーバーに設定しているようです。昨日、network_mode: noneに設定したので、ネットワークは分離されていて、このルーターとは通信できません。なるほど!
そこで、本来設定されるテストネットワークないのDNSサーバーを

root@rt1:/# cat /etc/resolv.conf

nameserver 10.1.2.53

のように設定するとrt1からは名前解決できようになりました。
cl1からは、まだできませんでしたが

root@rt1:/# /etc/init.d/dnsmasq stop
 * Stopping DNS forwarder and DHCP server dnsmasq                                                          [ OK ]
root@rt1:/# /etc/init.d/dnsmasq start
 * Starting DNS forwarder and DHCP server dnsmasq                                                          [ OK ]

のようにDNSをリレーするサーバーを再起動して解決です。
「体験しながら学ぶネットワーク管理技術入門」のP36にゴールと書いている

root@cl1:/# curl -k https://www.example.com
sv1.example.com

もできました。めでたし、めでたし。
DNSの設定に関してtinetのspecファイルを見直すと、

  - name: rt1
    image: frr-iptables-dnsmasq_arm_nm
    buildfile: Dockerfile_rt1
    interfaces:
      - { name: net0, type: direct, args: rt2#net0 }
      - { name: net1, type: direct, args: sw1#port4 }
    dns: 10.1.2.53
    mounts: /mnt/c/tinet:/tmp/tinet

のようにdnsの設定がありました。この部分に変換ツールは対応していませんでした。これが原因でした。
containerlabのDNS設定は

なので変換できるように対応しました。
その他変換ツールでいろいろ見つけた問題を修正しました。

  • network_modeをnoneにする

  • execコマンドの\$を$$にする

  • dnsの変換に対応

  • mountsをbindsに変換する

  • ポートの公開に対応する

  • docker buildはコメントで追加する

これで「体験しながら学ぶネットワーク管理技術入門」のネットワーク構成ファイルは、うまく変換できるはずです。
ネットワーク管理対応したファイルもいけるはずです。

これからやってみようと思いますが、今朝はここまで

明日に続く

夜追記

やってみたら、あっさり動きました。
変更したソースコードは

です。
とりあえず、目的達成です。


も書きました。

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

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