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.

Mädchen für alles
quelle
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 ...

pwnyrainbow
quelle