はじめに
ルーター自作でわかるパケットの流れをDockerネットワークで試す
ゆくゆくは実際のマシンを使って何かしてみたい。
たとえば先駆者がすでにやっているような、HTTP上の画像をすり替える悪いルーターの制作とか。
「ルーター自作でわかるパケットの流れ」
ハッシュタグ#router_jisakuで検索すると、同じ本を読んだ人のツイートが確認できる
(本書の巻末に#router_jisakuでつぶやいてシェアしてください、と筆者コメント有り)
本記事は
- Dockerで1つネットワーク作成する
- その中に2つLinuxマシンを作る
- 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イメージを取得する
本書ではCentOSを使っているが、本記事ではUbuntuを使う
docker image pull ubuntu:latest
docker image ls
Ubuntuを採用した理由は
今後、実機(ラズパイ)を使った遊びもしてみたいので、apt
で書き残したいというのと
CentOSのサポート問題があるため(下記)
本書が書かれたのは2011年であるが、2023年現在ではCentOSはサポート終了が予定されている
Ubuntuバージョン確認
今回使用するイメージは、Ubuntuの 22.04.2
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 (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つが見えている
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
で調べられる ※一部抜粋
[
{
"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",
}
},