kstm-su / isctsc2021Summer

ictsc2021夏の陣チームkstm用
0 stars 0 forks source link

10. dockerをインストールしただけなのに... #5

Closed kitakou0313 closed 3 years ago

kitakou0313 commented 3 years ago

概要

HostAにDockerをインストールした所、HostBとうまく通信できなくなった。原因を究明してHostAからHostBにsshができるようにしてほしい。

https://contest.ictsc.net/#/problems/e10642ac-a854-4ae9-a759-1ac1bd58ee24

kitakou0313 commented 3 years ago

とりあえずHostAからSSHする

user@Host-A:~$ ssh user@172.17.0.1
user@172.17.0.1's password:
██╗ ██████╗████████╗███████╗ ██████╗██████╗  ██████╗ ██████╗  ██╗
██║██╔════╝╚══██╔══╝██╔════╝██╔════╝╚════██╗██╔═████╗╚════██╗███║
██║██║        ██║   ███████╗██║      █████╔╝██║██╔██║ █████╔╝╚██║
██║██║        ██║   ╚════██║██║     ██╔═══╝ ████╔╝██║██╔═══╝  ██║
██║╚██████╗   ██║   ███████║╚██████╗███████╗╚██████╔╝███████╗ ██║
╚═╝ ╚═════╝   ╚═╝   ╚══════╝ ╚═════╝╚══════╝ ╚═════╝ ╚══════╝ ╚═╝
Last login: Sat Aug 28 14:10:59 2021 from 192.168.14.1
user@Host-A:~$

なんかHostAになっちゃう…

kitakou0313 commented 3 years ago

dockerのipレンジとHost2のipのレンジがかぶってるよね

user@Host-A:~$ ip a
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:6b:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.14.1/24 brd 192.168.14.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe32:6bb0/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:7a:61:32:5e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
kitakou0313 commented 3 years ago

dokerネットワーク用ののnicとHostBのIPが一致してるせいで結局自分に戻ってきてしまっている

kitakou0313 commented 3 years ago

dockerが使うIPのレンジを変更

user@Host-A:~$ sudo cat /etc/docker/daemon.json
{
        "bip": "173.20.0.254/24"
}
user@Host-A:~$

docker0のipも変更になった

user@Host-A:~$ ip a
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:6b:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.14.1/24 brd 192.168.14.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe32:6bb0/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:7a:61:32:5e brd ff:ff:ff:ff:ff:ff
    inet 173.20.0.254/24 brd 173.20.0.255 scope global docker0
       valid_lft forever preferred_lft forever
kitakou0313 commented 3 years ago

ざぁ〜こ♥ よわ〜い♥ 10分かからない♥

user@Host-A:~$ ssh user@172.17.0.1
user@172.17.0.1's password:
██╗ ██████╗████████╗███████╗ ██████╗██████╗  ██████╗ ██████╗  ██╗
██║██╔════╝╚══██╔══╝██╔════╝██╔════╝╚════██╗██╔═████╗╚════██╗███║
██║██║        ██║   ███████╗██║      █████╔╝██║██╔██║ █████╔╝╚██║
██║██║        ██║   ╚════██║██║     ██╔═══╝ ████╔╝██║██╔═══╝  ██║
██║╚██████╗   ██║   ███████║╚██████╗███████╗╚██████╔╝███████╗ ██║
╚═╝ ╚═════╝   ╚═╝   ╚══════╝ ╚═════╝╚══════╝ ╚═════╝ ╚══════╝ ╚═╝
Last login: Tue Aug  3 14:06:54 2021 from 172.17.255.254
user@Host-B:~$
kitakou0313 commented 3 years ago

お世話になっております。チームkstmです。

本事象の原因としては、以下の要因が考えられます。

事象

HostAからHostBへsshすると、HostA上に接続されてしまう

user@Host-A:~$ ssh user@172.17.0.1
user@172.17.0.1's password:
██╗ ██████╗████████╗███████╗ ██████╗██████╗  ██████╗ ██████╗  ██╗
██║██╔════╝╚══██╔══╝██╔════╝██╔════╝╚════██╗██╔═████╗╚════██╗███║
██║██║        ██║   ███████╗██║      █████╔╝██║██╔██║ █████╔╝╚██║
██║██║        ██║   ╚════██║██║     ██╔═══╝ ████╔╝██║██╔═══╝  ██║
██║╚██████╗   ██║   ███████║╚██████╗███████╗╚██████╔╝███████╗ ██║
╚═╝ ╚═════╝   ╚═╝   ╚══════╝ ╚═════╝╚══════╝ ╚═════╝ ╚══════╝ ╚═╝
Last login: Sat Aug 28 14:10:59 2021 from 192.168.14.1
user@Host-A:~$

原因

dockerはコンテナとホストの通信用にホスト側にdocker0のnicを作成しますが、これに割り当てられるIPアドレスはデフォルトでは172.17.0.1となっており、Host2のIPと一致していたためHostA自身に接続されていたと考えられます。

user@Host-A:~$ ip a
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:6b:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.14.1/24 brd 192.168.14.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe32:6bb0/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:7a:61:32:5e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

解消方法

/etc/docker/daemon.jsonにてdockerネットワークで使用されるIPアドレスのレンジをHostBと一致しないものとし、docker0nicに割り当てられたIPアドレスをHostBと異なるものとしました。

user@Host-A:~$ sudo cat /etc/docker/daemon.json
{
        "bip": "173.20.0.254/24"
}
user@Host-A:~$ ip a
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:32:6b:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.14.1/24 brd 192.168.14.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe32:6bb0/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:7a:61:32:5e brd ff:ff:ff:ff:ff:ff
    inet 173.20.0.254/24 brd 173.20.0.255 scope global docker0
       valid_lft forever preferred_lft forever

上記のように修正した結果、以下のようにHostAからHostBにssh接続ができることを確認しました。

user@Host-A:~$ ssh user@172.17.0.1
user@172.17.0.1's password:
██╗ ██████╗████████╗███████╗ ██████╗██████╗  ██████╗ ██████╗  ██╗
██║██╔════╝╚══██╔══╝██╔════╝██╔════╝╚════██╗██╔═████╗╚════██╗███║
██║██║        ██║   ███████╗██║      █████╔╝██║██╔██║ █████╔╝╚██║
██║██║        ██║   ╚════██║██║     ██╔═══╝ ████╔╝██║██╔═══╝  ██║
██║╚██████╗   ██║   ███████║╚██████╗███████╗╚██████╔╝███████╗ ██║
╚═╝ ╚═════╝   ╚═╝   ╚══════╝ ╚═════╝╚══════╝ ╚═════╝ ╚══════╝ ╚═╝
Last login: Tue Aug  3 14:06:54 2021 from 172.17.255.254
user@Host-B:~$

ご確認をお願いいたします。