IPv4 ist doch legacy, oder?

Ja, genau! Und deswegen sollten wir uns schleunigst mit IPv6 befassen.

Hier lernst du an einem praktischen Beispiel, wie du Docker mit IPv6 auf einem Hetzner Cloud Server zum Laufen bekommst.

Die Test Umgebung

Als Test-Server verwende ich einen CX11 Cloud-Server von Hetzner. Bei anderen Hostern wie AWS oder deinem Rechenzentrum des Vertrauens geht das nat├╝rlich genau so, Voraussetzung ist lediglich IPv6 Support und Linux.

Ich habe bei meinem CX11 die ├Âffentliche IPv4 Adresse deaktiviert. Dies spart nicht nur 60ct / Monat, sondern beweist auch, dass wir wirklich mit IPv6 arbeiten.

L├Ąuft denn IPv6 ├╝berhaupt?

Das l├Ąsst sich ganz einfach ├╝berpr├╝fen, ├╝ber Google ­čÄë

Google unterst├╝tzt den Zugriff ├╝ber IPv4 und IPv6 gleicherma├čen, allerdings gibt es einen speziellen Endpunkt ipv6.google.com welcher - wie der Name schon sagt - nur ├╝ber IPv6 erreichbar.

Diesen k├Ânnen wir mit dem ping command ansprechen, wenn wir eine Antwort bekommen wissen wir, dass IPv6 funktioniert.

~> ping ipv6.google.com -c1
PING ipv6.google.com(fra16s52-in-x0e.1e100.net (2a00:1450:4001:812::200e)) 56 data bytes
64 bytes from fra16s52-in-x0e.1e100.net (2a00:1450:4001:812::200e): icmp_seq=1 ttl=116 time=3.90 ms

--- ipv6.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 3.903/3.903/3.903/0.000 ms

Konfiguration Docker

Der einfachheit halber, gehe ich hier davon aus, dass du Docker bereits auf einem Server installiert hast. Wenn dem nicht so ist, folge dieser Anleitung von Docker

In den Standard Konfiguration von Docker ist IPv6 nicht aktiviert und muss gesondert aktiviert werden. Au├čerdem gibt es die M├Âglichkeit die notwendige ip6tables Konfiguration von docker ├╝bernehmen zu lassen.
Hierf├╝r m├╝ssen zus├Ątzlich die Flags ip6tables und experimental auf true gesetzt werden.

Folgende Konfiguration kannst du in einer /etc/docker/daemon.json verwenden.

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00::/80",
  "experimental": true,
  "ip6tables": true
}

Um die Änderungen der Konfiguration zu übernehmen, musst du den Docker-Daemon neu starten. Dies geht auf den meisten Systemen mit dem Befehl systemctl restart docker.

Hinweis: Auf machen Systemen muss der komplette Host neu gestartet werden, um die Änderungen zu übernehmen.

Ausprobieren!

Nun ist alles vorbereitet, und wir k├Ânnen testweise einen Docker-Container starten und die Verbindung ausprobieren.

Kopiere hierf├╝r diese docker-compose.yaml auf deinen Server

version: "3"

services:
   httpd:
     image: "registry.ipv6.docker.com/library/httpd"
     restart: "unless-stopped"
     ports:
      - "80:80"

Diese definiert einen httpd service, welcher einen Apache2 Web-Server startet.
Beachte hierbei, dass wir als Image registry.ipv6.docker.com/library/httpd anstelle von nur httpd verwenden.

Dies hat den Hintergrund, dass der offizielle Docker Hub (noch) kein IPv6 unterst├╝tzt. Bis dies offiziell unterst├╝tzt wird, gibt es einen eigenen Endpunkt unter registry.ipv6.docker.com.

Nun kannst du mit den Commands

docker compose pull
docker compose up

den entsprechenden Docker-Container starten.

Sobald der Container l├Ąuft, kannst du die IPv6 Adresse in die Address-Zeile deines Browsers eingeben und auf den Container zugreifen. Beachte hierbei, dass du IPv6 Adresse im Browser mit eckigen Klammern angeben musst.
In meinem Fall z.B. [2a01:4f8:1c0c:6e23::1]