Herald: Hallo und herzlich willkommen auf dem FEM Kanal und zu unserem ersten Talk heute von margau. Margau hat irgendwann mal angefangen bei Freifunk und ist dann irgendwann immer professioneller geworden und inzwischen beim C3 Infrastructure Team angekommen. Kümmert man sich also jetzt genau gerade um die RC3 World und das ganze was es dahinter gibt. Aus genau dem Grund gibt es heute auch kein Q&A bei dem Talk, denn der Talk ist aufgezeichnet. Margau ist busy mit dem Betrieb, so. Es geht um IPv6 und zwar nicht wie sonst immer mit ... v4 zusammen, sondern standalone. Also quasi das, was der Traum eines jeden Netzwerkers unter 40 Jahren ist. Er wird ein paar Erfahrungen weitergeben und Tipps, falls wir das auch alle mal machen wollen, dann... for the English speaking viwers, there will be a translation. To listen to it, select on the language selection select the first translated option to hear the english translation. Und jetzt viel Spaß beim Talk mit Margau. [placeholder remove me in amara] margau: Ja hallo, ich bin margau. Schön, dass ihr eingeschaltet habt zu meinem Talk "Legacy IP gibt es nicht mehr, aber kein Netz ist auch keine Lösung" hier beim RC3 2021. Genau. Worum geht es bei meinem Talk heute? Wie betreibe ich ein richtiges Netz mit IPv6-Focus oder soweit es geht IPv6-Only. Bisschen, meine Erfahrungen. Welche Probleme habe ich gefunden, welche Lösungen und natürlich auch ein bisschen Inspiration, was ihr für eure Netze für eure Dienste mitnehmen könnt, damit vielleicht auch ihr dann in der Lage seid IPv6-Only zu sprechen, wenn ihr es noch nicht macht. Vorher, bevor wir loslegen aber erst mal ein Disclaimer. In dem Talk und auch bei meinem Netz geht es um, ich sage mal, echtes Internet. Das heißt, wir haben einen AS, wir haben IP-space der BGP mit dem Rest des Internets spricht. Das ganze ist kein Spielzeug! Betrieb eines AS's ist deutlich mehr als einfach nur irgendwo eine virtuelle Maschine klicken und da einen Linux drauf zu installieren und einen Webserver hochzuziehen oder so. Also überlegt euch wirklich gut, ob ihr das könnt, ob ihr die Verantwortung tragen könnt und ja, ob ihr das auch braucht, an der Stelle. Passt auf, dass ihr wisst was ihr tut. Weil, wenn es erst mal nur ums Üben und ums Spielen mit BGP, mit Internet, mit Routing geht, gibt z.B. das den DN42, das ist ein virtuelles Overlay- Netz und das ist dafür sehr gut geeignet. Aber das sollte man nicht direkt produktiv im Internet tun. Genau, dann nachdem der Formalkram geklärt is, machen wir mal weiter mit der Terminologie. Ich werde in dem Talk ein paar Begriffe häufig nutzen, nämlich IP oder richtiges IP meint natürlich IPv6, das Moderne die 128 Bit Variante und wenn ich von Legacy IP spreche, meine ich damit IPv4, die alter 32 Bit Variante. Genau. Aber wie hat das ganze eigentlich angefangen? Irgendwann in 2020 habe ich mir gedacht, so Infrastruktur betreibe ich eigentlich schon lange genug, mehrere Jahre. Das DN42 und auch bei anderen Möglichkeiten, Routing etc. auch schon einiges an Erfahrung gesammelt. Es hat sich in ein ganzer Zoo an Diensten angesammelt, der mal einen ordentlichen Neubau brauchte. Von daher so langsam lohnt sich eigentlich ein richtiges Netzwerk, oder? Was brauche ich denn für ein richtiges Netzwerk? Ich brauche erst mal ein Autonomes System. Das kann ich, wenn ich nicht selbst RIPE- Mitglied werde, von einem Sponsoring LIR bekommen. Ich brauche Konnektivität. Also irgendwie muss ich ja meine IP Adressen meines Autonomen Systems ins Internet bringen. Da gibt es virtuelle Maschinen mit IXP, also Internet Exchange Points Anbindung. Es gibt virtuelle Maschinen mit BGP Upstream. Also auch das ist nicht das Problem. Zuletzt brauche ich natürlich im Netz noch IP Adressen. Richtiges IP, also IPv6, auch kein Problem. Gibt es zu Hauf, von RIPE bekommt man /48 PI als Provider Independent und das ist an einen selbst oder an die Organisation gebunden, aber nicht an den Provider, der jemandem das bereitstellt. Genau. Also v6 Adressen haben wir. Legacy IP-Adressen oder auch IPv4 Adressen genannt. Jetzt wird es langsam interessanter, gibt es nämlich nicht mehr. Wenn man mal auf die Seite der RIPE guckt, wie die RIPE-Mitglieder auf neue IPv4-Adressen warten, sieht man der Graph, die Warteliste steigt stetig an. Und ja, vermutlich hat es heute einen neuen Höchststand wie gestern, wie vorgestern, wie letzte Woche etc. Und auch der Gebrauchtmarkt, nenne ich es mal, für IPv4-Adressen ist jetzt nicht gerade so toll, da bezahlt man definitiv einen zweistelligen Betrag in mittlerer Größe für eine IPv4-Adresse, natürlich auch je nach Präfixgröße etc. Aber IPv4 ist eigentlich für so ein privates Best Effort Projekt allein aus finanzieller Sicht schon keine wirkliche Lösung mehr. Was macht man also? Einfach nur IPv6? Weil IPv6 haben wir ja. Ist kein Problem oder ist kein Problem, das zu bekommen. Machen wir IPv6 only. Als nächstes habe ich mir überlegt, was soll mein Netz eigentlich machen? Ich habe dann so eine kleine Liste an Diensten, die ich betreibe, die auch in dieses Netz dann umziehen sollen. Natürlich ein klassischer Webserver mit einem Blog dahinter, eine Nextcloud, einen Hedgedoc, über den übrigens gerade diese Präsentation hier läuft. Mailserver, kommen wir später noch zu und auch noch das eine oder andere, je nachdem wie gerade Bedarf ist. Aber wenn man sich diese Liste anguckt, merkt man das nutzen tatsächlich Menschen. Also es ist nicht nur für mich, um es zu haben, da greifen tatsächlich Menschen drauf zu und wollen vielleicht das eine oder andere Mal mit diesen Diensten interagieren. Was macht man jetzt aber, wenn die Nutzer der Dienste nur Legacy IP haben? Wir haben ja eben gesagt, wir machen ein IPv6 only Netz. Kann man in mehreren Stufen lösen. Step 1, so mittelmäßig ernst gemeint, Awareness schaffen. Ihr seht hier diese schönen Banner auf meinem Blog. Falls ihr das nicht lesen könnt, da steht drin: Du besuchst diese Seite mit einem veralteten IPv4-Internetzugang. Möglicherweise treten in Zukunft Probleme mit der Erreichbarkeit und Performance auf. Bitte frage deinen Internetanbieter oder Netzwerk- Administrator nach IPv6-Unterstützung. Was ist die Idee dahinter? Wenn das genug Leute machen, wirds zu einem Marketing Problem wenn ein Netz oder ein Provider kein IPv6 kann, also kein richtiges IP anbieten. Und damit wird sich das Problem lösen, weil dann hoffentlich mehr richtiges IP anbieten etc. Das ist eine schöne Diskussion für Twitter, wenn ich ehrlich bin. Wie gesagt, ist nicht so ganz ernst gemeint, aber falls ihr das auch machen wollt, wie habe ich das Ding gemacht? nginx hat eine Weiche drin. Ob der Request per richtigem IP oder per Legacy IP kam. Und wenn er herausfindet, dass der Request per Legacy IP kam, ersetzt er den schließenden Body-Tag mit diesem Banner und natürlich einem schließenden Body-Tag. Aber in Summe ist eine nette Spielerei, hilft aber nichts, solange das nicht sehr sehr viele Webseiten etc. machen. Naja, also Step 1 naja. Brauchen wir also doch Legacy IP überall? Nein, weil dafür gibt es Step 2, den Layer 4 Proxy. Und da ist die Idee, dass eine geringe Anzahl an Kisten doch noch eine Legacy IP Adresse bekommt. Bei mir heißen die Gateways, kann man nennen wie man will. Genau. Und auf diesen Kisten läuft dann ein nginx und der verteilt quasi die Anfragen an die Legacy IP Adresse nach Port. Heißt, wenn eine Anfrage an TCP Port 80 kommt, über Legacy IP weiß nginx, schickt es an an den und den Server mit richtigem IP etc. weiter. Nachteil ist dann natürlich, man braucht für jeden Dienst der einen auf dem schon belegten Port was macht, eine neue IP Adresse oder neue Public V4 Adresse, weil sonst kann man es ja nicht, sondern auseinander sortieren. Heißt natürlich besonders für http und https, dass ich mir da ein zentrales Reverse Proxy Gateway gebaut habe, weil ich sonst viel zu viele Gateways brauche, um das auseinander zu sortieren. Ich habe da auch mal ein Beispiel-Config. Man sieht hier den nginx stream Block, das ist nicht der standard nginx http Teil, sondern eben auf Layer 4, also TCP oder UDP. Man spezifiziert dann hier ein upstream DNS-UDP-Backend in dem Beispiel. Also hier geht es um DNS. Ein Server, in dem Fall v6-only natürlich, mit einem Port, wo das ganze hingeschickt werden soll und sagt dem nginx dann: Hier bitte auf dieser IP Adresse UDP und Port, hört, das ist in dem Fall natürlich die public v4, sollte das sein. Die 10.1.2.3 ist einfach nur ein Example und das ganze andere, das dann an das entsprechende Backend weiterleitet. Das ganze gibt es hier drunter noch mal für die TCP Variante, genau. Also, eigentlich auch kein Hexenwerk, das ganze zu machen. Wie sieht das praktisch aus? Interne Dienste, die nicht von außen erreichbar sein sollen oder müssen, haben bei mir generell nur eine Public V6 Adresse. Das heißt, wenn wir beim DNS bleiben, ein hidden Primary hat nur eine einzige V6 Adresse. Das ist auch die drauf konfigurierte, darunter ist er erreichbar, aber er brauch ja kein V4, wenn keine Endnutzer von V4, die nur V4 haben, von außen drauf zugreifen müssen. Nehmen wir mal ein Beispiel den Secondary, der von Endnutzern erreichbar sein soll. Der Hostname und die IP, die die Kiste selbst hat, ist weiterhin v6 only, wie man hier im oberen Beispiel erkennen kann. Die Endnutzer kriegen dann aber einen anderen Hostnamen, hier z.B. ns1.example.com. Und der geht für richtiges IP einmal direkt auf die konfigurierte Adresse. Da hängt kein Gateway mehr dazwischen etc. Das ist natürlich direkte Ende zu Ende Kommunikation. Genau. Und die V4 Adresse geht an dieses nginx stream Gateway, was wir eben gesehen haben, was dann natürlich entsprechend konfiguriert sein muss, dass es auf Port 53 eingehende Anfragen entsprechend behandelt. Das Thema Wie sprechen Endnutzer mit den Servern ist jetzt gelöst. Wie sprechen aber jetzt die Server nach außen? Das Problem ist, manche Endpunkte haben kein richtiges IP. Da gibt es nur sehr sehr bekannte GIT Webseite, die aktuell noch nicht per IPv6-only bedienbar ist oder erreichbar ist. Was macht man also? The same procedure as every time. Wenn man ein Netzwerkproblem hat und insbesondere ein Adressierungsproblem macht man natürlich NAT. Diesmal nur nicht ganz so schlimm. Wir machen nicht NAT 44, sondern wir machen NAT 64. Das heißt wir NATen im Prinzip Adressen zwischen dem IPv6-Adressraum und dem IPv4-Adressraum. Das ganze will ich jetzt nicht im Detail erklären. Das ist ein eigener Talk. Da gibt es auch mehr als genug Infos und Literatur dazu, wie dieses NAT 64 eigentlich funktioniert. Zumindest wenn ihr im Telekom-Mobilfunknetz seid, ist die Chance, dass ihr das unwissentlich schon benutzt relativ groß, weil meines Wissens macht die das Telekom das per Default oder bietet das per default an. Genau, die Realisierung bei mir ist: Ich habe diesen Common Präfix, diesen V6 Präfix, wo der gesamte IPv4 Adressraum drin abgebildet werden kann. Dieser /96 Präfix wird im internen Netz von den 64-Gateways announced um quasi den Devices die Routen dahin anzubieten, also per ITP genau. Und wenn eine IPv6-only Kiste jetzt auf eine IPv4-only Resource im Internet zugreifen will, macht sie eine Anfrage an einen entsprechend konfigurierten DNS resolver, der genau eine Adresse in diesem Range zurückgibt. So Resolver gibt es haufenweise, kann man selbst hosten. Google hat da was, Cloudflare hat da was, das ist auch alles ein gelöstes Problem, einfach mal DNS 64 resolver googlen, da findet man was. Also sind wir eigentlich fertig. Wir können von innen nach außen kommunizieren und von außen nach innen. Gucken wir uns die Übersicht noch mal an. Von erstmal unten haben wir unser großes IPv6-only-Netzwerk. Bei mir läuft es mit OSPF und IBGP. Wir haben den ganz normalen Edge-Router, der die Adressen ins Internet routet und umgekehrt. V6 Enduser gehen direkt über diesen Edge-Router Ende zu Ende zu dem Dienst unten auf der rechten Seite. Oben sehen wir noch Legacy End User. Der muss den Umweg über unser TCP UDP Legacy to V6 Proxy nehmen. Das ist die nginx stream Config, die wir eben gesehen haben. Auf der linken Seite nochmal zusammengefasst das, was ich eben kurz erklärte, wie Native V6 only Services mit Legacy only Ressourcen kommunizieren, nämlich über ein Nat64 Gateway, was quasi auch an der Kante des IPv6-only Netzes steht. Und vorher müssen sie noch einen DNS64-Resolver natürlich fragen, um erst mal die Adresse zu bekommen. Wäre natürlich zu schön, wenn das ganze out of the box funktioniert und man nicht den ein oder anderen problematischen Dienst an der Stelle hätte. Womit hatte ich Probleme? Wie habe ich die gelöst? Mail ist an sich kompliziert, weil Reverse-DNS etc., das muss alles passen, sonst werden E-Mails abgelehnt. Gleichzeitig ist E-Mail für mich ein sehr kritischer Dienst. Von da habe ich einfach von Anfang an gesagt Der lebt nicht IPv6-only, der kriegt eine eigene V4 und oder läuft sogar ganz außerhalb. An der Stelle noch mal, überlegt euch gut, ob ihr einen eigenen Mailserver betreiben wollt. Wenn ihr das noch nicht macht, das ist administrativ nicht ganz einfach, wenn nicht sogar das Komplizierteste an der ganzen Geschichte hier, einen verfügbaren funktionierenden Mailserver zu betreiben. Ein weiteres Problem, was ich hatte mit der netten Software Matrix Synapse, ein Home Server für Matrix, also Instant Messaging. An sich läuft das Ding IPv6 only. Es gibt da nur eine komische Library, die E-Mails verschickt und die kann kein Happy Eyeballs. Das heißt, wenn die versucht sich zu diesem SMTP Server, der eine V4 oder V6 Adresse hat zu connecten, ähm aber den über Legacy nicht erreichen kann, weil eine V6-only Kiste natürlich keine default route für eine legacy IP-Adresse hat, hört die einfach auf zu funktionieren. Also es gibt ein Timeout, sie kann es nicht erreichen. Habe ich noch nicht gelöst. Gibt ein GitHub issue dazu, müsste man wahrscheinlich mal etwas viel Zeit rein investieren und dann ist auch das Thema gefixt. Aber aktuell ist es noch kaputt. Docker ist auch so ein Thema. Wenn man das entsprechend konfiguriert und die Zeit reinsteckt, läuft es dann per V6, per Default nicht so wirklich, ist eher anstrengend, sich um Docker in V6-only zu kümmern, geht aber wenn man will. Weniger toll ist das ganze mit Gitlab Runnern. Ich habe mal versucht ein GitLab Run in dieses V6-only Netz zu stellen. Die Kommunikation zwischen Containern klappte dann irgendwie nicht, wenn man Docker in Docker gemacht hat und dann noch irgendwie docker Service containern brauchte. Eventuell muss ich das Ding auf V4 only zurückbauen und dann irgendwie so eine CLAT da hinstellen. Also ohne jetzt ins Detail zu gehen. Alles ganz schrecklich. Ist aktuell weiterhin kaputt. Noch so ein Thema, wenn ich per https ins Heimnetz will, aber das eben nicht über einen Dyn-DNS machen will, sondern über einen direkt angebundenen, über VPN angebundenen Jumphost, nenne ich es mal, ist das ein bisschen kompliziert, je nachdem, wie man sein Netz aufbaut. Mein OpenVPN-Server steht im IPv6-only Teil. Das funktioniert auch. Kam trotzdem nicht drumrum, ein Reverse Proxy Channing, also quasi ein NAT für HTTP zu bauen. Ist nicht schön, ginge bestimmt anders. Anders wäre das halt deutlich zeitaufwändiger. Dann kommen wir mal zum letzten wichtigen Teil: Konnektivität, Routing und Administration. Das ist jetzt nicht mehr so stark auf IPv6-only bezogen. Eher generell. Ich habe zwei Standorte mit BGP-Konnektivität nach außen, eine IXP-VM in Frankfurt und einmal eine VM nur mit Transit. Transit für V6 ist relativ günstig. Gratis v6-Transit ist zumindest für kleine Projekte auch verfügbar. Und dann habe ich noch weitere Projekte, weitere Standorte mit billigem Compute. Also die ganze Rechenleistung steht, wo ich aber leider kein BGP habe, zum Beispiel Hetzner. Heißt ich muss irgendwie zwischen diesen beiden Standorten kommunizieren können. Da musste ich mir, weil ich nichts besseres habe, einen Wireguard, also ein VPN-Overlay bauen. WAN-intern, läuft da getrennt über Policy Based Routing. iprule is your friend. VRFs wären besser, um quasi die Sicht des eigenen Netzes und die Sicht des Hetzner-Netzes zu trennen. Es gibt da auf der wireguard-Mailingliste eine Diskussion, die ist aktuell aber leider eher eingeschlafen. Also wireguard kann dieses VRF noch nicht. Mit iprule kriegt man das hin, das ist auch nicht sonderlich großartig und es frisst natürlich MTU. Also Wireguard. Ihr wollt, wenn ihr so was macht, strikte Firewall-Regeln haben um Leaks zu unterbinden. Das heißt ihr wollt nicht versehentlich aus eurem internen Netz Pakete mit eurer source IP an das Hetzner Default-Gateway senden. Das wäre uncool. Weil Hetzner weiß ja nicht, oder kennt ja euer AS nicht oder euer NAT nicht. Für Hetzer ist das ja ein externes Netz, weil ihr da kein BGP upstream habt. Also da wirklich aufpassen, was ihr da baut. Vorher verstehen und dann bauen. Mein Routing mache ich mit bird2 unter Linux, OSPF als interior gateway- Protokoll, IBGP zwischen allen größeren Standorten. Ist im wesentlichen Geschmackssache, wie man das baut. Da gibt es auch verschiedenste Möglichkeiten. Weiterhin das Thema Administration. Benutzt Konfigurationsmanagement. Ich benutz Saltstack mit Ansible oder anderen Tools geht das garantiert auch. Nur das wächst so schnell an, da kriegt ihr dann in die BGP-Filter, in die BGP- Konfiguration, in die Firewall Regeln keine Konsistenz mehr rein, wenn ihr das nicht, ich sage mal systematisch ausrollt und per config management sicherstellt, dass das System stabil und konsistent läuft. Kommen wir so langsam zum Ende. Was wäre noch cool für das Projekt? Weg von den IXP-VMs, hin zum echten Blech, was da steht und Pakete routet oder auch Dienste hostet. Ist natürlich aufwendiger und teurer, das mit echtem Blech zu machen. Ist eine Option für die Zukunft. Und echter Layer 2 Transport statt Overlay wäre natürlich auch cool. Frisst mir dann nicht mehr die MTU weg und so weiter. Ist aber gerade was Standorte, Konnektivität etc. betrifft nicht ganz trivial und auch nicht ganz billig. Sollte man definitiv machen, wenn das Netz produktiv wird, solange es irgendwie ein Best Effort Bastelnetz ist oder Privat-Netz ist, ist das so eigentlich in Ordnung. Fazit: Würde ich es noch mal machen? Definitiv, v6-only mit wenigen Legacy IP-Adressen auf den Edges ist durchaus sinnvoll machbar. Kostentechnisch ist es eh schon interessant. Gerade Hetzner hat jetzt vor kurzem ja angekündigt, dass v4 zukünftig extra kosten wird oder es ohne V4 billiger wird. Also ja, das mache ich definitiv weiter so und würde das auch in neuen Projekten so machen, dass ich V4 nur noch auf den Edges habe, auch im privaten Umfeld. Ihr habt ja gesehen, dass ist nicht sonderlich kompliziert. Der Aufbau mit diesen IXP-VMs und Tunneln dazwischen ist okay für private best effort services. Ihr hört schon, ich bin nicht so ganz überzeugt. Also es ist nicht für wirklich produktive Produktiv-Netze geeignet. Also nichts, was Geld verdient etc. Dafür Layer 2 Transport, ordentliche Peerings, ordentlicher Transit, ordentliche Hardware. Aber das ist ja hier an der Stelle auch nicht Ziel des Ganzen. Und damit bin ich am Ende. Vielen Dank fürs Einschalten, fürs Zuhören. Und wenn ihr Fragen habt, sendet gerne eine Mail an rc3 at ipv6.church. Herald: Und dann sind wir wieder zurück hier. Vielen Dank an margau für den Talk. Es gibt leider kein Q&A, weil margau mit der C3 Infrastruktur beschäftigt ist. Aber wie ihr gesehen habt, könnt ihr ihr eine Mail schreiben an die gerade eingeblendete Email-Adresse. Hier auf dem FEM-Channel geht es jetzt gleich weiter um 19 Uhr mit der nächsten Herald News Show und um 20:15 Uhr mit votti zu NetBox als Datenquelle für Netzwerkinfrastruktur. Bis dahin. Untertitel erstellt von c3subtitles.de im Jahr 2023. Mach mit und hilf uns!