Docker 18.09 spricht nicht IPv6 (unter Ubuntu 18.04)


6

Brandneue und vollständig gepatchte Ubuntu 18.04-Instanz (auf einem Linode VPS) mit Docker 18.09.0 (Build 4d60db4), das vom offiziellen Docker-Repo installiert wurde.

Das IPv4-Netzwerk funktioniert einwandfrei, sowohl zwischen Containern als auch zwischen intern und extern (nachdem ich es festgelegt hatte net.ipv4.ip_forward=1).

IPv6 kommuniziert jedoch nicht einmal zwischen Containern, geschweige denn extern.

Ich habe viele Dinge ausprobiert, fand aber, dass dieser Leitfaden der beste ist (außer dass er nicht funktioniert :-))

Als solches habe ich ...

/etc/docker/daemon.jsonMit folgendem aktualisiert und neu gestartet:

{
“ipv6”: true,
“fixed-cidr-v6”: “2001:db8:1::/64”
}

MTU überprüft.

Führen Sie zwei Docker-Container aus, die zum Testen eingerichtet wurden:

sudo docker run -itd ajeetraina/ubuntu-iproute bash
sudo docker run -itd ajeetraina/centos-iproute bash

Beide zeigen intern perfekte Konnektivität:

$ sudo docker exec -it b1cbb63b4e88 ifconfig eth0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:acff:fe11:3  prefixlen 64  scopeid 0x20<link>
        inet6 2001:db8:1::242:ac11:3  prefixlen 64  scopeid 0x0<global>
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 7  bytes 746 (746.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ sudo docker exec -it 57da37ca7f79 ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          inet6 addr: 2001:db8:1::242:ac11:2/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1086 (1.0 KB)  TX bytes:726 (726.0 B)

und pingen sich gegenseitig über IPv4 an:

$ sudo docker exec -it b1cbb63b4e88 ping -c 4 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.134 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.091 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.113 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.120 ms

--- 172.17.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3060ms
rtt min/avg/max/mdev = 0.091/0.114/0.134/0.018 ms

aber nichts über IPv6:

$ sudo docker exec -it b1cbb63b4e88 ping6 -c 4 2001:db8:1::242:ac11:2
PING 2001:db8:1::242:ac11:2(2001:db8:1::242:ac11:2) 56 data bytes
From 2001:db8:1::242:ac11:3 icmp_seq=1 Destination unreachable: Address unreachable
From 2001:db8:1::242:ac11:3 icmp_seq=2 Destination unreachable: Address unreachable
From 2001:db8:1::242:ac11:3 icmp_seq=3 Destination unreachable: Address unreachable
From 2001:db8:1::242:ac11:3 icmp_seq=4 Destination unreachable: Address unreachable

--- 2001:db8:1::242:ac11:2 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3065ms

Ich habe gelesen, dass Dockersysctl in neueren Versionen von Docker mit IPv6 herumgespielt hat, also habe ich den Host überprüft:

$ sudo sysctl -a | grep disable_ipv6
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.docker0.disable_ipv6 = 0
net.ipv6.conf.eth0.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

und habe versucht, die Container mit zu betreiben, --sysctl net.ipv6.conf.all.disable_ipv6=0aber bisher hat nichts funktioniert.

Alle Hilfe sehr dankbar erhalten. Vielen Dank im Voraus.


Der Vollständigkeit halber: Die v6 IP- und v6-Route auf dem Host und die v6-Routen in den Containern werden erstellt?
Lenniey

Absolut. Kann nichts falsch mit dem Host-Routing sehen
Dogsbody

Antworten:


2

Ich hatte auch dieses Problem und es stellte sich heraus, dass es mit der IPv6 FORWARD-Kette von iptables zusammenhängt. Es sieht so aus, als würde Docker es einfach nicht so einrichten wie IPv4.

Sie können testen, ob dies der Fall ist, indem Sie Folgendes ausführen: sudo ip6tables -P FORWARD ACCEPT

Dies ist eine schlechte Lösung, da sie die Vorwärtskette blind öffnet.

Docker ist nicht für eine großartige Integration von iptables bekannt ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.