VPN越しのlinuxマシンにpingが通らない原因がdocker0だった


3ヶ月くらいずっと原因不明だったのがやっと解決したので備忘録として書き留めておく。

事象

⭕ローカルmac <-> ローカルmac
⭕ローカルmac <-> ローカルlinux
⭕ローカルmac <-> VPN越しmac
❌VPN越しmac <-> ローカルlinux

要は リモートで何故かlinuxマシンに接続できない! という状況が発生していた。

結論

VPN配下のIPアドレスとdocker0のIPアドレスが衝突していることが原因だった。

  • 今回の環境でVPN配下に割り振られるアドレス: 172.17.XXX.0/21
  • docker0のIPアドレス初期値: 172.17.0.1/16

これをdocker0のIPアドレス設定を変更し、dockerサービスを再起動することで解決した。

(情シスはこの事象既知なんだろうか)

やったこと

わかっていること

  • VPN越しmac -> ローカルlinuxへping: Request timeout for icmp_seq XX
  • ローカルlinux -> VPN越しmacへping: From 172.17.0.1 icmp_seq=XX Destination Host Unreachable

事前に試してダメだったことのおさらい

今回の件には結局関係なかったけど一応チェックしといてねって箇所

  • そもそもicmpが塞がれていないか(検証手段が正しいのか)
    • mac同士のpingは通るので塞がれていないことがわかる
  • host.allow および host.deny の設定見直し
    • hosts.allow172.19.と記述しても変化なかった
  • firewall設定
    • 無効化しても変化なかった

自身のアドレスを確認

pingのエラーメッセージから、 172.17.0.1とかいうよくわからん経路でコケてることは分かっていた

ふとdocker周りのネットワークが気になったので、自身のアドレスをすべて確認してみることにする

$ hostname -I
172.19.XXX.XXX 172.17.0.1 172.18.0.1 192.168.XXX.XXX ...

172.17.0.1がいる???なんで???

$ ip a
### 略 ###

2: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.30.0.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 XXXX::XXXX:XXXX:XXXX:XXXX/64 scope link 

### 略 ###

docker0とかいう仮想インターフェイスがガッツリIPアドレス被りしている模様なので、これを変更してみる

ちなみにdocker0はdocker for linuxのみでしか生成されず、これがlinuxへの疎通のみNGという理由にもなっていた

docker0の設定変更

先人の大変ありがたい資料があるので、参考に設定を進める
https://qiita.com/msi/items/d9cc1a2fd3f0fed3a901

$ sudo vi /etc/docker/daemon.json
{
    "bip": "172.30.0.254/24"
}

$ sudo systemctl restart docker

$ ip a show docker0
2: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 172.30.0.254/24 brd 172.30.0.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 XXXX::XXXX:XXXX:XXXX:XXXX/64 scope link 

ping

# VPN越しmac -> ローカルlinux
$ ping 172.19.XXX.XXX
64 bytes from 172.19.XXX.XXX: icmp_seq=0 ttl=60 time=192.154 ms
64 bytes from 172.19.XXX.XXX: icmp_seq=1 ttl=60 time=238.941 ms
64 bytes from 172.19.XXX.XXX: icmp_seq=2 ttl=60 time=292.419 ms
64 bytes from 172.19.XXX.XXX: icmp_seq=3 ttl=60 time=257.762 ms

✌️success✌️