前提。前回インストールした Kali LinuxとBadTodoのコンテナ間で通信できるようにします。
Dockerコンテナの確認
PS C:\> docker ps -a (抜粋) CONTAINER ID IMAGE ~(中略)~ NAMES 11da21e5a036 kalilinux/kali-rolling ~(中略)~ Kali-Linux 2cbf8393604d badtodo-nginx ~(中略)~ badtodo-nginx 29b72abfec32 badtodo-mail ~(中略)~ badtodo-mail f9d0ff6a67a1 badtodo-apache ~(中略)~ badtodo-apache b4dbf9e7515f badtodo-db ~(中略)~ badtodo-db
Dockerネットワークの確認
PS C:\> docker network ls NETWORK ID NAME DRIVER SCOPE 0285c3dece76 badtodo_internal bridge local e7fcc0b85be5 bridge bridge local c52f2b6c7a83 host host local 06b4a538de42 none null local
bridge: コンテナ起動時にネットワークインターフェースを指定しなければ自動的にこれが割り当てられる。コンテナが属するネットワークとホスト側のネットワークを中継するもの。
host: ホストマシンと同一のネットワークインターフェースを使用する
none: ネットワークインターフェースを使用しない
Kali Linuxの起動後。ネットワークを指定していないので bridge に入る。
PS C:\> docker network inspect bridge (抜粋) "Containers": { "Name": "Kali-Linux", "IPv4Address": "172.17.0.2/16",
BadTodoの起動後。badtodoプロジェクトとして docker-compose.yml で networks: internal: と指定されているため「badtodo_internal」が作成されそこに入る。
PS C:\> docker network inspect badtodo_internal (抜粋) [ { "Name": "badtodo_internal", { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } "Containers": { "29b72abfec3201881d44ad14f7f28a0015bee360690e5475a89a5273ebe46120": { "Name": "badtodo-mail", "IPv4Address": "172.18.0.2/16", }, "2cbf8393604d06c994bdb06c0567c70eb384edf9402be6d1906e1901993054e4": { "Name": "badtodo-nginx", "IPv4Address": "172.18.0.5/16", }, "b4dbf9e7515f0d118782cc76126652340faeccebfba31ac40e9770f074c43c4c": { "Name": "badtodo-db", "IPv4Address": "172.18.0.4/16", }, "f9d0ff6a67a175ac00c4c6e9764a7e9c5b18ffe2e0d016a838a4df6ef1706cb1": { "Name": "badtodo-apache", "IPv4Address": "172.18.0.3/16", } }, } ]
このように所属するネットワーク(サブネット)が違う場合は通信できません。
KaliからBadTodoのApacheへのPingは通りません。(Pingコマンドが入っていない場合はapt install iputils-ping net-tools
でインストールしてください)
# ping -c 3 172.18.0.3 PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data. From 172.18.0.3 icmp_seq=1 Destination Host Unreachable From 172.18.0.3 icmp_seq=2 Destination Host Unreachable From 172.18.0.3 icmp_seq=3 Destination Host Unreachable --- 172.18.0.3 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2117ms
そこで同じネットワークに所属させます。今回は新たに一つネットワークを作ることにしました。
PS C:\> docker network create kali_badtodo 70cc585af973575696ebe49d08513daf70de01b7902522516a30db1ab1a0a55d PS C:\> docker network ls NETWORK ID NAME DRIVER SCOPE 0285c3dece76 badtodo_internal bridge local e7fcc0b85be5 bridge bridge local c52f2b6c7a83 host host local 70cc585af973 kali_badtodo bridge local ← 増えました 06b4a538de42 none null local
PS C:\> docker network inspect kali_badtodo (抜粋) [ { "Name": "kali_badtodo", "Scope": "local", "Driver": "bridge", "Config": [ { "Subnet": "172.19.0.0/16", "Gateway": "172.19.0.1" } ] "Containers": {}, } ]
kali_badtodoネットワークにKaliとBadTodoのApacheコンテナを追加します。
PS C:\> docker network connect kali_badtodo Kali-Linux PS C:\> docker network connect kali_badtodo badtodo-apache PS C:\> docker network inspect kali_badtodo (抜粋) [ { "Name": "kali_badtodo", "Scope": "local", "Driver": "bridge", "Config": [ { "Subnet": "172.19.0.0/16", "Gateway": "172.19.0.1" } "Containers": { "11da21e5a0366f551e2937a6fe3d819400d66b39bb82736e858c5558fd620f4d": { "Name": "Kali-Linux", "IPv4Address": "172.19.0.3/16", }, "f9d0ff6a67a175ac00c4c6e9764a7e9c5b18ffe2e0d016a838a4df6ef1706cb1": { "Name": "badtodo-apache", "IPv4Address": "172.19.0.2/16", } }, } ]
172.19.0.0/16で新しいサブネットができています。
Kaliのターミナルでも確認。172.17.0.0 (bridge)と172.19.0.0 (badtodo-apache)の2つのネットワークに接続できることが分かります。
# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever 47: eth2@if48: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:13:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.19.0.3/16 brd 172.19.255.255 scope global eth2 valid_lft forever preferred_lft forever
再度KaliからBadTodoへping
# ping -c 3 172.19.0.2 PING 172.19.0.2 (172.19.0.2) 56(84) bytes of data. 64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.070 ms 64 bytes from 172.19.0.2: icmp_seq=2 ttl=64 time=0.089 ms 64 bytes from 172.19.0.2: icmp_seq=3 ttl=64 time=0.060 ms --- 172.19.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2058ms rtt min/avg/max/mdev = 0.060/0.073/0.089/0.012 ms
通信できるようになりました。コンテナ名での名前解決もDockerの内部DNSサーバがやってくれます。
# ping badtodo-apache PING badtodo-apache (172.19.0.2) 56(84) bytes of data. 64 bytes from badtodo-apache.kali_badtodo (172.19.0.2): icmp_seq=1 ttl=64 time=0.050 ms 64 bytes from badtodo-apache.kali_badtodo (172.19.0.2): icmp_seq=2 ttl=64 time=0.094 ms 64 bytes from badtodo-apache.kali_badtodo (172.19.0.2): icmp_seq=3 ttl=64 time=0.090 ms ^C --- badtodo-apache ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2075ms rtt min/avg/max/mdev = 0.050/0.078/0.094/0.019 ms