docker で新規で作った bridge が「外に出れない」「同じ bridge に繋がってる container同士で通信できない」とかいう現象に遭遇しまして… いやもう大迷走。 ワイは Windowsアプリ屋 な上に、Linux はおろか network / routing も専門分野じゃないんですけおーーー!!
というわけで、彷徨った記録です。備忘録です。もしかしたら bad know how かも… 記事書いててすごいそんな気がしてきた…
環境
- ubuntu server 22.04 および 20.04 両方で問題が発生。
- Hyper-V 上で運用
- docker.io 20.10.21 // …なんですが、試行錯誤中に docker-ce とか入れて彷徨ってました。 環境としてはとても怪しい(めんご!
問題の現象
- 新規の bridge (下側) のネットワークが極めて怪しい
- docker0 のネットワークの中は問題無く通信できる
現象としては こちら と同じです。 mac address は相手の container のが取れてました
俺的問題の解決方法
マシンが起動したら (docker.service ではなく) docker.socket
の daemon を再起動します。
sudo systemctl restart docker #一応… sudo systemctl restart docker.socket
何故こんなことをするのか?
こうするとどうにも docker network 一覧がごっそり変わる? 再起動前に restore される? っぽいんですよ。 network id が一新される…というより、仮想ブリッジ周りを含めて全体的に再起動前のものになるっぽい? 本当か?? 謎
$ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 0309364816a9 bridge bridge local 1c08f30a1771 host host local 36dbe0d6fbdd none null local 63e20c2e1376 photoprism_default bridge local $ sudo systemctl restart docker.socket # 再起動 $ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 2aebe8cf626f bridge bridge local 2ad5f7ddefde host host local fa9119c7fd97 none null local 5deda7e225a8 photoprism_default bridge local
更に言うと、おそらく docker.socket
を再起動する 【前】 は、docker が iptables へ自動で追加してくれるハズの rule が入ってくれないっぽく色々怪しい。 自前で適宜 rule 追加するのも厳しいし…
リンク先記事でも問題は解決出来た
上記のリンク記事にあるとおり net.bridge.bridge-nf-call-iptables
を 0
にした所、通信できるようになりました
sudo sysctl -w net.bridge.bridge-nf-call-iptables=0
…が、この対応は良いのかなぁ…という疑問。 iptables を経由しなくなる(?)ってのは、後々の運用で別の苦労が発生するような事は無いんですかねぇ…?的な。 ワイは Windowsアプリ屋 なのでわかんなーい☆ ちぇるーん☆*1
格闘した記録
通信できねぇなぁと格闘してた格闘記録。 iptables で packet を trace。 mangle:forward
で packet が lost する謎現象。 そこまで来たら nat:forward
まで行ってくれてもえぇんやないの…? …という所ですごーーく怪しい感じがモリモリ出てました。
May 16 03:20:43 ubuntu2000 kernel: [284836.212921] TRACE: mangle:FORWARD:policy:1 IN=br-61ca521b8ed5 OUT=br-61ca521b8ed5 PHYSIN=veth8863771 PHYSOUT=veth2a972e0 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50616 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=905 May 16 03:20:44 ubuntu2000 kernel: [284837.213030] TRACE: raw:PREROUTING:policy:2 IN=br-61ca521b8ed5 OUT= PHYSIN=veth8863771 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50732 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=906 May 16 03:20:44 ubuntu2000 kernel: [284837.213038] TRACE: mangle:PREROUTING:policy:1 IN=br-61ca521b8ed5 OUT= PHYSIN=veth8863771 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50732 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=906 May 16 03:20:44 ubuntu2000 kernel: [284837.213042] TRACE: nat:PREROUTING:rule:1 IN=br-61ca521b8ed5 OUT= PHYSIN=veth8863771 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50732 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=906 May 16 03:20:44 ubuntu2000 kernel: [284837.213050] TRACE: nat:PREROUTING:policy:3 IN=br-61ca521b8ed5 OUT= PHYSIN=veth8863771 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50732 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=906 May 16 03:20:44 ubuntu2000 kernel: [284837.213057] TRACE: mangle:FORWARD:policy:1 IN=br-61ca521b8ed5 OUT=br-61ca521b8ed5 PHYSIN=veth8863771 PHYSOUT=veth2a972e0 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50732 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=906 May 16 03:20:45 ubuntu2000 kernel: [284838.213428] TRACE: raw:PREROUTING:policy:2 IN=br-61ca521b8ed5 OUT= PHYSIN=veth8863771 MAC=02:42:ac:14:00:03:02:42:ac:14:00:02:08:00 SRC=172.20.0.2 DST=172.20.0.3 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50791 DF PROTO=ICMP TYPE=8 CODE=0 ID=37 SEQ=907
rp_filter = 0
すれば?見たいな話もチラ見したんですが、ワイの問題には全然関係ありませんでした :-]
雑感
インフラわからん
*1:マホマホ & ミミちゃん派です