Docker und IPv6 – es wird endlich besser

Ich habe ja schon einige Berichte und auch einige GitHub-Kommentare zum Thema Docker und IPv6 verfasst. Die meisten davon waren durch die Enttäuschung geprägt, dass eine eigentlich sehr moderne Virtualisierungslösung seit mehr als zehn Jahren in Sachen moderner Netzwerk-Protokolle und Verwaltung nur sehr langsam zu Potte kam. Die Unterstützung von IPv6 war lange Zeit rudimentär bis stiefmütterlich.

Zur kurzen Einordnung: Per default setzt Docker (noch immer) auf das IPv4-Protokoll, dessen Grenzen hinsichtlich der weltweit verfügbaren Adressen mittlerweile erreicht bzw. sogar überschritten sind. Angesichts der Tatsache, dass Docker im Jahr 2013 gegründet wurde und um 2015 herum langsam an Popularität gewonnen hat, war es doch sehr verwunderlich, dass von Haus aus erst einmal nur das alte IPv4 unterstützt wurde. Immerhin automatisierte Docker an dieser Stelle bereits einiges an Firewall und Forwarding-Regeln. Aber auch automatisierte Workarounds sind und bleiben Workarounds: In die Presche hinein gesprungen sind dann unter anderem Reverse Proxies wie z.B. Traefik, um das Problem zu lösen dass man einen Port (für HTTP 80, für HTTPS 443) pro IP-Adresse immer nur einmal verwenden kann. HTTP an dieser Stelle schon seit Jahrzehnten Virtual Hosts, eingesetzt habe ich das bereits zu Schulzeiten für den Schulserver (damals noch ein Apache 2.2.x) – mit SNI kam für HTTPS dann auch ca. 2009 verbreitet auf, mittlerweile ist es erprobt und stabil.

Aber wie gesagt, all die Workarounds sind mit IPv6 nicht mehr notwendig, das neue Protokoll bietet IP-Adressen in einer Fülle die wohl wahrlich bis ins nächste Jahrhundert ausreichen sollte – bis dahin hat man dann hoffentlich aus der schleppenden Umstellung gelernt und es wird mit IPv7 (oder dann doch gleich IPv8) dann einfacher mit der Umstellung. Selbst in der Standard-Ausführung bekommt man in der Regel 64 Bit Adressraum zur freien Verfügung, ggf. auch noch etwas mehr. Continue reading

Microservices: Ende-zu-Ende, IPv6, Docker und HTTPS / TLS / SSL

IPV6, das neue IP-Protokoll kommt, langsam aber sicher. Amazon ist mit seiner AWS-Cloud voran geprescht und verlangt mittlerweile Aufpreis für externe IPv4-Adressen. Diese werden zunehmend knapper und somit sind auch die Kosten verständlich. Auch bei diversen Hosting-Anbietern hat man seit einiger Zeit zumindest einmal Vorbereitungen getroffen entsprechende Kosten an den Kunden dezidiert weitergeben zu können. Unter anderem wird ein IPv6-only-Betrieb vergünstigt angeboten. Leider ist er auch für mich noch keine wirkliche Option, bereits der Blog benötigt um gut erreichbar zu sein immer noch eine externe IPv4-Adresse, ich möchte ja eine möglichst große Reichweite haben und potentielle Leser nicht aufgrund ihrer IP-Version diskriminieren.

Nun habe ich ja mittlerweile auch einige Dinge nach aktuellem Stand der Technik per Docker virtualisiert (genauer gesagt ist es ja nur eine Paravirtualisierung). IPv6 ist in Docker immerhin angekommen, der Support lässt allerdings immer noch deutlich zu wünschen übrig. Halbwegs tragbar ist der Aufwand wenn man eine feste, öffentliche IPv6-Range hat und mit docker compose bzw. eigenen Docker-Netzwerken arbeitet. Man muss sich dann nur mit der Problematik der Netzwerkaufteilung Gedanken machen. Entgegen der häufig gelesenen Aussage ist aber bei /64-Netzwerken nicht Schluss mit dem Subnetting in IPv6. Derartige Ranges bekommt man in der Regel bei den Hosting-Anbietern im Standard-Paket. Für mich selbst haben sich /80er Aufteilungen für Docker-Netzwerke bisher ganz gut bewährt, das kann man aber je nach Bedarf noch größer oder kleiner schneiden. Continue reading

PowerDNS mit Pi-Hole auf RasPi

Eines der etwas länger schon mal angedachten Projekte, welches ich dann aufgrund Zeitmangels und auch etwas Frustration in die Ecke gelegt hatte ist ein eigener, lokaler DNS-Server den man auch schnell aktualisieren kann – wer häufiger in verschiedenen Projekten arbeitet weiß es zu schätzen wenn man den Stall der Entwicklungs-Container nicht per IP-Adresse auswendig lernen muss, sondern ihn per sprechenden Namen ansprechen kann. In diesem Post geht es erst einmal darum die Grundlagen zu schaffen, auch das ist bereits etwas mehr Arbeit als ich gedacht hätte.Wichtige Eckpunkte / Material zum Nachbauen:

  • Raspberry Pi (inklusive Netzteil)
  • als DNS-Server kommt PowerDNS zum Einsatz
  • MySQL/MariaDB als Datenbank für die DNS-Einträge
  • DNS-Dist als Loadbalancer für DNS-Queries
  • PiHole als Resolver mit Blacklist
  • Docker als Virtualisierung für alle Services
  • IPv6 als primäres Netzwerkprotokoll, IPv4 nur als Fallback

Continue reading

Container und IPv6 – Basics zum Verständnis / Netzwerkzuschnitt

In diesem Beitrag erläutere ich erst einmal die grundlegenden Probleme welche sich beim Einsatz von Container-Lösungen im Netzwerk ergeben und wie man sie sinnvoller Weise technisch lösen kann. Schlüssel hierfür ist die Verwendung von IPv6 anstelle von IPv4. In einem weiteren Artikel beschreibe ich dann die konkrete Umsetzung. Wer sich mit IPv6 und Containern bereits sicher fühlt kann diesen Artikel ggf. überspringen.

Container sind der aktuelle Stand der Technik was die Auslieferung und die Laufzeitumgebung für Serversoftware betrifft. Die Para-Virtualisierung löst einige Probleme die man typischer Weise hatte, unter anderem das Alles-oder-Nichts-Problem, wenn es darum geht Systemsoftware zu aktualisieren. Mit jedem größeren Versionssprung gibt es die Gefahr, dass bestimmte Teile des eigenen Codes nicht mehr laufen. Aktuell gibt es immer noch genügend Projekte und Software welche auf ältere (um nicht zu sagen teilweise uralte) Versionen von PHP angewiesen sind um zu funktionieren. Mit dem Versionssprung von 5.x nach 7.0 sind einige Altlasten und Funktionen über Bord geworfen worden, unter anderem auch der gesamte Stack für die MySQL-Anbindung, was einigen Anwendungen dann doch das Genick bricht. Häufig stand man nun vor dem Problem, für einen Teil des gehosteten Angebots die Version anheben zu wollen, aber die Altlasten müsste man dafür erst einmal auf Stand bringen. Das ist nicht immer ohne weiteres möglich. Mit Containern schafft man sich hier ggf. kleinere Services mit jeweils ihrer maßgeschneiderten Umgebung – inklusive abgeschottetem Datenbankserver, den sich nicht mehr alle Angebote teilen müssen (über die Vor- und Nachteile von Datenbanken in Containern kann man einen eigenen Artikel schreiben).

Continue reading