【初心者向け】Dockerで自分だけのL2ネットワークを作ってみよう!コマンド数行でスイッチ構築を体験

docker

「ネットワークの勉強をしたいけど、実機のスイッチやルーターを買うのはハードルが高い…」 「CCNAの参考書を読んでも、L2スイッチが実際どう動いているのかイメージが湧かない…」

そんな悩みを持つ方に朗報です。実は、Dockerを使えば、無料かつコマンド数行で「仮想のL2スイッチ」と「そこに繋がるPC」を、あなたの手元のPC上に作ることができます。

物理機器も、難しいネットワーク機器の設定画面も一切不要。今回は、Dockerのdocker network機能を使って、L2ネットワークの基本である「同一セグメント内の通信」を実際に手を動かしながら体験していきます。

エンジニアとしてスキルアップしたい方はもちろん、資格の勉強で得た知識を体に染み込ませたい方にも、必ず役立つ内容になっています。それでは早速始めていきましょう。

この記事で学べること

  • Dockerのネットワーク機能を使って仮想L2スイッチを構築する方法
  • コンテナ同士がPing(ICMP)で通信できることの確認方法
  • Dockerが裏側でMACアドレスやIPアドレスをどう管理しているかの覗き見方法

演習に使うツール:nicolaka/netshoot

今回の演習では nicolaka/netshoot というDockerイメージを使用します。

これは、ping、ip、tcpdumpなど、ネットワークエンジニアが調査や検証で使う定番コマンドがあらかじめ全部入っている「特製の作業用PC」のようなイメージです。

普通のLinuxコンテナだとこれらのコマンドが入っておらず自分でインストールする手間が発生しますが、netshootなら一切不要。ダウンロードしてすぐに検証を始められます。

事前準備として、お使いのPCにDockerがインストールされ、起動していることを確認しておいてください。

Step 1:仮想のL2スイッチを作成する

まずは、192.168.10.0/24 というネットワークアドレスを持つ、仮想のL2スイッチを作成します。

bash

docker network create --subnet=192.168.10.0/24 my_bridge1

コマンド解説

コマンド・オプション役割
docker network create新しいネットワーク(仮想スイッチ)を作るコマンド
–subnet=192.168.10.0/24このスイッチに所属する機器が使うIPアドレスの範囲を指定
my_bridge1作成する仮想スイッチに付ける名前

このコマンド一発で、あなたのPCの中に「192.168.10.0/24」という1つのブロードキャストドメイン(同一セグメント)が誕生しました。物理的なハブやスイッチを買わなくても、これだけでL2の土台が完成します。

Step 2:L2スイッチに繋がったPC(コンテナ)を2台立ち上げる

次に、作成した my_bridge1 スイッチに、hostA と hostB という2台のコンテナを、LANケーブルで繋ぐイメージで接続・起動します。

bash

docker run -d --name hostA --net my_bridge1 nicolaka/netshoot sleep infinity
docker run -d --name hostB --net my_bridge1 nicolaka/netshoot sleep infinity

コマンド解説(初心者向けポイント)

コマンド・オプション役割
docker runコンテナを作って動かすコマンド
–name hostAコンテナにhostAという名前を付ける
–net my_bridge1どの仮想スイッチ(LAN)に接続するかを指定
nicolaka/netshoot使用するコンテナイメージ名(OSや工具が入った金型)
sleep infinity「何もせずずっと起きていてね」という指示。これを入れないと、コンテナは一瞬で仕事を終えて終了してしまいます

これで、同じスイッチ(my_bridge1)にLANケーブルで繋がった2台のPCが起動した状態になりました。

Step 3:各コンテナ(PC)に割り当てられたIPアドレスを確認する

Dockerが自動でコンテナに割り振ったIPアドレスを確認してみましょう。

bash

docker exec -it hostA ip -4 addr show eth0
docker exec -it hostB ip -4 addr show eth0

実行結果の見方

192.168.10.2/24 や 192.168.10.3/24 のようなIPアドレスが表示されていれば成功です!

コマンド解説

コマンド・オプション役割
docker exec -it [コンテナ名] [実行したいコマンド]起動中のコンテナの中に潜り込んで、直接コマンドを実行させる指示
ip -4 addr show eth0Linuxのネットワーク設定確認コマンド。eth0(第1ネットワークカード)のIPv4アドレスを表示する

DHCPサーバーを自分で立てたわけでもないのに、Dockerがサブネット内から自動でIPアドレスを払い出してくれていることがわかります。

Step 4:コンテナ間で通信してみる(Ping)

いよいよ本番です。hostAからhostBのIPアドレスに向けて、Ping(ICMP Echo Request)を送信してみましょう。

※ここではhostBのIPアドレスが192.168.10.3だと仮定します。Step 3で表示された実際のIPアドレスに置き換えて実行してください。

bash

docker exec -it hostA ping -c 3 192.168.10.3

コマンド解説

コマンド・オプション役割
ping -c 3Pingを3回だけ送信する

以下のように応答が返ってくれば、L2スイッチ経由で無事に通信ができています!

64 bytes from 192.168.10.3: icmp_seq=1 ttl=64 time=0.083 ms

普段何気なく使っている「Ping」ですが、その裏では宛先IPアドレスからMACアドレスを特定するARP(Address Resolution Protocol)が動き、L2スイッチがMACアドレステーブルを参照してフレームを転送しています。

今回はDockerがその処理をすべて肩代わりしてくれているというわけです。

Step 5:裏側の構造(仮想L2スイッチ)を覗いてみる

最後に、Dockerが裏側でどうやってこれらを管理しているのか、ホストOS側から覗いてみましょう。

bash

docker network inspect my_bridge1

注目ポイント

出力されるJSONデータの中に “Containers”: { … } という部分があります。そこにhostAとhostBの名前、MACアドレス、IPアドレスが並んでいるはずです。

これはまさに、L2スイッチが管理しているMACアドレステーブルやポート管理情報そのものです。

物理スイッチの管理画面で確認するような情報が、コマンド一発で手元に表示される。これがDockerで学ぶネットワーク演習の面白さです。


今週のまとめと確認

今回の操作で、あなたは物理機器を一切触らずに「L2スイッチを置き、LANケーブルを2本挿し、2台のPCにIPを振って同一セグメント通信をさせる」というネットワーク構築を、コマンド数行で完了させました。

ステップやったこと対応する物理機器の作業
Step 1docker network createL2スイッチを新品開封して電源を入れる
Step 2docker run –netPC2台をLANケーブルでスイッチに接続
Step 3ip addr show各PCのIP設定を確認
Step 4ping実際に通信できるかテスト
Step 5docker network inspectスイッチのMACアドレステーブルを確認

コマンド操作自体は数分で終わりますが、この一連の流れの中に「同一セグメントとは何か」「L2スイッチはどう機器を管理しているか」というネットワークの基礎がぎゅっと詰まっています。

参考書で読んだだけの知識と、実際に手を動かして確認した知識では、記憶への定着度が大きく変わってきます

後片付け

演習が終わったら、以下のコマンドで作成したコンテナとネットワークを削除しておきましょう。

bash

docker rm -f hostA hostB
docker network rm my_bridge1
この記事をSNSでシェア!

コメント