Seit einiger Zeit beschäftige ich mich vermehrt mit Containern und wollte einen Podman Container von außen erreichen können.
Privat habe ich aktuell meine Internetverbindung von dem Provider Vodafone (BW) und dadurch leider keine echte IPv4 Adresse mehr, DS-Lite sei Dank. Allerdings bekommt man ein komplett natives IPv6 zu Verfügung.
Mittlerweile habe ich auf ziemlich allen Geräten die ich verwende IPv6 am Laufen, somit war klar, was nicht mit IPv4 geht ist somit IPv6 möglich, warum auch nicht?
Daher wollte ich rausfinden, wie man mit Podman IPv6/IPv4 in einem echten Dual-Stack betreibt.
Daraufhin habe ich die Anleitung gelesen und mich auch bei Github schlau gemacht und so richtig fündig wird man leider irgendwie nicht.
Es gibt verschiedene Beispiele, die aber nicht darauf abgezielt haben, das ganze zusätzlich per DHCP/RA zu realisieren, so dass ich die Netzwerkkonfiguration von meiner Vodafon-Station oder Fritzbox „dynamisch“ bekommen kann.
Vorraussetzungen
Wie oben schon erwähnt, benötigt man einen funktionieren DHCP Server und einen Router der eine gültige IPv6 Adresse zuteilt. Zusätzlich muss podman auf einen Linux System installiert sein. In meinem Fall hab ich die Installation auf einem Arch Linux gemacht per
pacman -S podman
Netzwerk anlegen & Container im Dual-Stack starten
Im ersten Schritt wird ein spezielles Netzwerk angelegt, welches die Außenanbindung an das Netzwerk realisiert.
podman network create --ipv6 --driver macvlan --opt parent=eno1 mynet
Hierbei muss man nachdem dem „parent=“ den Namen an das jeweilige Netzwerkinterface anpassen, welchen man zu Verfügung hat. „mynet“ bezeichnet den Namen des Netzwerks und kann frei gewählt werden. Weitere Informationen finden sich unter: podman-network-create
Jetzt kann man wie gewohnt seinen Container starten, wichtig sind zwei zusätzliche Parameter:
„–network=mynet“ womit man dem Container mitteilt, dass der Netzwerk „mynet“ anstatt dem regulären Netzwerk verwendet werden soll und eine MAC-Adresse per „–mac-address“ ist nicht verkehrt, damit der Container nicht bei jedem Start eine neue IP erhält.
Wenn man die MAC-Adresse nicht angibt, so wird bei jedem Start von dem Container eine neue zufällig generiert MAC-Adresse verwendet.
podman run -l "io.containers.autoupdate=registry" -d \
--name=test \
--network=mynet \
--mac-address 92:d4:de:ad:b3:3f \
--restart unless-stopped \
quay.io/libpod/banner
Nachdem der Container gestartet ist wird automatisch eine IPv4 und eine IPv6 zugewiesen. Wichtig hierbei zu wissen, dass „podman inspect“ zumindest in Version 3.4.4 die IPv6 nicht anzeigt, was leider recht nervig ist.
Per „ip neigh“ kommt man auch nicht an die IPv6 Adresse ran und ein Subnet-Scan mit nmap würde unter IPv6 einige Zeit dauern… somit kommt man eigentlich nur per „ip a“ an die IPv6-Adresse ran.
podman exec -it test ip a
Tipp: Manchmal kann es sein, dass der jeweilige Container es nicht implementiert hat, dann nimmt man einfach kurz einen der es integriert hat wie z.b. quay.io/libpod/banner
Sicherheitsbedenken
Generell konfiguriere ich meine Systeme immer mit aktivierter Firewall.
Was mit bei der Verwendung von MACVLAN aufgefallen ist, das an dem Punkt die Firewall (firewalld) von meinen System nicht greift und direkt alle Ports im Netzwerk sind.
Für Produktiv Systeme würde ich aktuell es nicht verwenden.