LoginSignup
7
15

More than 1 year has passed since last update.

Dockerネットワークで遊ぶ_その1_同セグPING編

Last updated at Posted at 2023-05-07

はじめに

ルーター自作でわかるパケットの流れDockerネットワークで試す
ゆくゆくは実際のマシンを使って何かしてみたい。
たとえば先駆者がすでにやっているような、HTTP上の画像をすり替える悪いルーターの制作とか。

「ルーター自作でわかるパケットの流れ」

ハッシュタグ#router_jisakuで検索すると、同じ本を読んだ人のツイートが確認できる
(本書の巻末に#router_jisakuでつぶやいてシェアしてください、と筆者コメント有り)

本記事は

  1. Dockerで1つネットワーク作成する
  2. その中に2つLinuxマシンを作る
  3. 2つマシン間でPING疎通確認をする

連載情報

連載 内容
その1 〈実践〉同じセグメント内のPING疎通確認
その2 〈コード〉イーサネットヘッダの中身をみてみる
その3 〈コード〉ARP,IP,ICMPの中身をみてみる
その4 〈実践〉IP,TCPをキャプチャする
その5 〈実践)ルーターを準備する
その6 〈実践〉別セグメントのWEBへアクセスをする

検証環境と前提

  • Dockerはすでにインストール済み
  • Windows 11のPowerShellからdocker ***コマンドを打つ
  • DockerコンテナはUbuntuを使う

Dockerネットワークを新規で作る

testnwを新規作成する

docker network create --driver bridge testnw
docker network ls

各コマンドを実行したあとにlsをするのは確認のため。省略可能。

デフォルトではbridgeという名前のネットワークが採用される
環境の汚染や、問題切り分けの観点から、今回の検証はすべてtestnwを使う。(あとでネットワークを追加する予定もある)

Docker コンテナ・ネットワークの理解

Dockerイメージを取得する

本書ではCentOSを使っているが、本記事ではUbuntuを使う

docker image pull ubuntu:latest
docker image ls

Ubuntuを採用した理由は
今後、実機(ラズパイ)を使った遊びもしてみたいので、aptで書き残したいというのと
CentOSのサポート問題があるため(下記)

本書が書かれたのは2011年であるが、2023年現在ではCentOSはサポート終了が予定されている

Ubuntuバージョン確認

今回使用するイメージは、Ubuntuの 22.04.2

cat /etc/issue
Ubuntu 22.04.2 LTS \n \l

Dockerコンテナを立ち上げる

サーバとクライアントを1台ずつ立ち上げる

docker container run -itd --privileged --mount type=bind,source=/d/200_Study/2304_Router_Jisaku,target=/app --net testnw --hostname Server1 --name myserver ubuntu:latest
docker container run -itd --privileged --mount type=bind,source=/d/200_Study/2304_Router_Jisaku,target=/app --net testnw --hostname Client1 --name myclient ubuntu:latest
docker container ls
  • 静的ルーティングを変更するために、特権--privilegedを付けている
  • /d/200_Study/2304_Router_Jisakuには本書が配布しているソースコードを入れている。そのコードをコンテナ内でmakeして実行する。

必要なパッケージをインストールする

PowerShellのウィンドウを2つ立ち上げて、サーバとクライアントの各コンテナの中に入る

docker container exec -it myserver /bin/bash
docker container exec -it myclient /bin/bash

ネットワーク系のパッケージはサーバ・クライアントの両方に入れておく

apt update
apt install -y iputils-ping traceroute ncat nmap iproute2 net-tools curl dnsutils

今回はどちらもインストールしたが、本来はnet-toolsではなくiproute2が推奨されている模様

make,gccなどプログラミング系のパッケージは、ひとまずクライアントだけに入れておく

apt install -y vim make build-essential

何かしようとしてコマンドが見つからないと怒られたら、その都度apt install xxxすればよい

pingで疎通確認する

クライアントからサーバ(Server1)に向けてpingを打つ

ping Server1
PING Server1 (172.18.0.2) 56(84) bytes of data.
64 bytes from myserver.testnw (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms

ARPでネットワーク内の機器を確認する

arpでテーブルを見ると、ゲートウェイとサーバの2つが見えている

arp -a
Address                  HWtype  HWaddress           Flags Mask            Iface
myserver.testnw          ether   02:42:ac:12:00:02   C                     eth0
172.18.0.1               ether   02:42:3a:07:58:80   C                     eth0

ネットワークのゲートウェイや所属するコンテナはinspectで調べられる ※一部抜粋

docker network inspect testnw
[
    {
        "Name": "testnw",
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
            "Containers": {
                "Name": "myserver",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
            },
                "Name": "myclient",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
            }
        },

糸冬了!!

7
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
15