IPv4, IPv6, Dual Stack und Dual Stack Lite

  Stefan   Lesezeit: 10 Minuten  🗪 4 Kommentare

IPv6 ist wie Kernfusion, seit Jahrzehnten angekündigt aber immer noch nicht richtig am Start. Nach diesem Artikel wird sich das grundligend ändern.

ipv4, ipv6, dual stack und dual stack lite

Gut, es funktioniert schon besser, als Kernfusion, aber durchgesetzt hat sich die Technik nicht annähernd. In meiner Firma kann man noch nicht einmal auf IPv6-only Seiten zugreifen ….

Ich versuche schon seit einigen Jahren immer mal wieder, mit dem Thema warmzuwerden, da ich befürchte, in Zukunft gar keine richtige IPv4 zu bekommen. Immerhin kann ich meine Server inzwischen über IPv6 erreichen.

Ich hoffe, dass wir zusammen hier einen guten Artikel hinbekommen, der einen vernünftigen Überblick über das Thema gibt. Ich würde hier allerdings das Thema DHCP für IPv6 außen vor lassen. Erstens, weil ich da noch gar nichts kapier, außer dass es zweitens, einen eigenen Artikel wert ist.

Wenn Ihr zwei Rechner in Eurem Intranet habt und die externen IPs ermittelt, dann stellt Ihr fest: die IPv4 ist gleich, die IPv6 ist unterschiedlich. Das ist für den Betrieb eines Servers auch schon der wesentliche Unterschied.

Ich gehe mal von mindestens zwei Servern aus. Die verfügbar gemacht werden sollen. Mit einem ist alles noch relativ simpel.

DNS

Wichtig bei dem Thema sind ein paar DNS Kenntnisse. Wenn man einen Server betreiben will, muss man seine IP irgendwo mit einem Namen verknüpfen. Das kann eine eigene Domain sein, oder eine eigene Subdomain, das spielt im Prinzip keine Rolle, solange man wiederum Subdomains anlegen kann. Wobei alles auch mit unterschiedlichen (Sub-)Domains funktioniert. Ich beschreibe hier mal alles mit einer eigenen Domain, zumal es so was für unter 10 € pro Jahr zu mieten gibt.

Beim Domain-Hoster müssen für IPv4 A-Records und für IPv6 AAAA-Records angelegt werden. Dabei wird jeweils ein Name, der auch Wildcards enthalten kann, mit einer IP-Adresse (Inhalt) verknüpft. Spezifischere Namen überschreiben Wildcards, die Reihenfolge ist nicht wichtig. Als Beispiel nehmen wir folgende Einträge:

  • Name: *.gnulinux.ch, Inhalt: ip1
  • Name: a1.gnulinux.ch, Inhalt: ip2

Dann gilt folgende DNS Auflösung:

  • www.gnulinux.ch -> ip1
  • a1.gnulinux.ch -> ip2

IPv4

Da man bei IPv4 nur eine IP-Adresse hat, machen mehrere Einträge nicht all zu viel Sinn. Es reicht also üblicher Weise ein Eintrag:

  • Name: *.gnulinux.ch, Inhalt: IPv4-Adresse des Routers

Dyn-DNS-Hoster setzen z.B. genau diesen Eintrag, man muss sich da um nichts kümmern.

IPv6

Bei IPv6 wird es komplizierter, sobald man mehrere Server hat. Da jeder Server eine eigene externe IP-Adresse hat, kann man da auch mehrere Einträge machen. Damit wird dann aber die interne Server-Struktur nach außen sichtbar gemacht, was eher ungünstig ist. Nichtsdestotrotz will ich diese Fälle mit betrachten. Folgende Einträge sind z.B. möglich:

  • Name: *.gnulinux.ch, Inhalt: IPv6-Adresse des Proxy
  • Name: matrix.gnulinux.ch, Inhalt: IPv6-Adresse des Servers, der matrix hostet

Die Adresse des Routers gibt’s natürlich auch noch. Ich habe bisher nicht versucht, irgendwas damit anzufangen. Vielleicht könnte man da ja auch wieder die IPv4-Port-Weiterleitung des Routers verwenden?

Routing

Das Routing will ich an ein paar Beispielen veranschaulichen. Dabei soll z.B. die Zeile

  • www.gnulinux.ch -> Router:80 -> Server:80

bedeuten: Der Browser ruft http://www.gnulinux.ch auf (implizit Port 80), wird vom DNS an die IP des Routers auf Port 80 weitergeleitet und dann per Port-Weiterleitung an den Server auf Port 80.

IPv4

Bei IPv4 gibt es nach außen nur eine einzige IP-Adresse, egal, wie viele Server erreicht werden müssen. D.h. jeder Port kann vom Router auch nur an einen einzigen Server weitergeleitet werden. Wenn man mehr als einen Server erreichbar machen will, muss man 'multiplexen'. Entweder, indem man bei der URL einen Port mit angibt oder, wie bei http/https möglich, einen Reverse Proxy verwendet. Dieser leitet eine eingehende Anfrage weiter. Man kann da einfach konfigurieren, welche URL an welchen Server weitergeleitet werden soll. Üblicherweise verwendet man dazu die Subdomain. Allen Subdomains wird mit der Wildcard die gleiche IP zugewiesen. Alle landen also beim gleichen Router, der die Anfrage dann an den Proxy weiterleitet. Der Proxy leitet dann die Anfrage je nach verwendeter Subdomain zum gewünschten Server weiter.

IPv4 mit 1 Http-Server

Es gibt eine Port-Weiterleitung für Port 80 zum Server. Alle Subdomains werden hierhin weitergeleitet:

  • www.gnulinux.ch -> Router:80 -> Server:80

IPv4 mit 2 Http-Servern

Es gibt eine Port-Weiterleitung für Port 80 zum Server1 und für Port 8080 zu Server2 auf Port 80. Alle Subdomains werden hierhin weitergeleitet:

  • www.gnulinux.ch -> Router:80 -> Server1:80
  • www.gnulinux.ch:8080 -> Router:8080 -> Server2:80

Diese Konfiguration ist eher eine Bastel-Lösung.

IPv4 mit 2 Http-Servern und Reverse-Proxy

Es gibt eine Port-Weiterleitung für Port 80 zum Proxy. Alle Subdomains werden hierhin weitergeleitet und dann vom Proxy verteilt:

  • server1.gnulinux.ch -> Router:80 -> Proxy:80 -> Server1:80
  • server2.gnulinux.ch -> Router:80 -> Proxy:80 -> Server2:80

Diese Lösung wird üblicherweise verwendet.

IPv6

Bei IPv6 hat jeder Server eine eigene IP-Adresse. Es können alle Server im Router als exposed konfiguriert werden. Das macht natürlich keiner, es macht aber für die Konfiguration keinen Unterschied. Es gibt also im Router keine Weiterleitung an irgendwelche Server oder Ports, sondern es können Zugriffe nur geöffnet oder gesperrt werden. Ich gehe hier mal von exposed hosts aus, d.h. die benötigten Ports für die verwendeten Server sind frei geschaltet.

Folgende AAAA-Records sollen konfiguriert sein:

  • *.gnulinux.ch: IP des Proxy
  • sub1.gnulinux.ch: IP von Server1
  • sub2.gnulinux.ch: IP von Server2

IPv6 mit 1 Http-Server

Der Fall ist wieder recht einfach. Zu beachten ist allerdings, das es sich bei der IP-Adresse nicht, wie bei IPv4 um die des Routers handelt, sondern um die des Servers.

  • sub1.gnulinux.ch -> Server1:80

IPv6 mit 2 Http-Servern

Erst wieder die Lösung ohne Proxy. Bei IPv6 kann aber auf den Port verzichtet werden.

  • sub1.gnulinux.ch -> Server1:80
  • sub2.gnulinux.ch -> Server2:80

Wenn man nur IPv6 verwendet, könnte das eine gute Lösung sein. Wenn man aber auch IPv4 verwendet, würde ich der Einheitlichkeit wegen die Lösung mit Proxy bevorzugen.

IPv6 mit 2 Http-Servern und IPv4 Reverse-Proxy

Die Subdomain-Namen der Server werden nicht verwendet, sondern nur die des Proxys, der dann die Anfragen intern über IPv4 oder IPv6 an die Server weiterleitet.

  • server1.gnulinux.ch -> proxy:80 -> Server1:80
  • server2.gnulinux.ch -> proxy:80 -> Server2:80

Dual Stack

Bei Dual-Stack hat man eine vollständige Anbindung für IPv4 und IPv6. Man kann beides konfigurieren oder nur eines. Wenn man beides benutzt, dann empfehle ich jedoch, beides mit Reverse-Proxy zu machen, da es sonst schnell unübersichtlich wird.

Dual Stack Lite

Bei Dual-Stack-Lite hat man keine eigene IPv4 mehr. Der eigene Router ist quasi in einem weiteren Intranet, das wiederum nur eine IPv4 Adresse hat. Für ein Port-Forwarding müsste also der äußere Router konfiguriert werden, was theoretisch möglich wäre, praktisch aber nicht. Man kann also Server-Dienste nur über IPv6 anbieten.

Fertig

So ich glaube, jetzt ist der Artikel wieder genauso wirr und unübersichtlich, wie die anderen hundert Artikel, die es schon gibt. Ein wenig IPv6 Kenntnisse sind aber für meinen nächsten Artikel von Vorteil, da es inzwischen bestimmt einige gibt, die keine richtige IPv4 mehr haben. Ich hoffe, durch Eure Kommentare noch mehr zu lernen und alle Fehler korrigieren zu können.

Quelle: https://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Tunnel-ipv6.svg/800px-Tunnel-ipv6.svg.png

Tags

Self Hosted, server, Selfhosting, DNS-Konfiguration, Routing

David
Geschrieben von David am 24. Januar 2024 um 16:17

Ich finde der Artikel hat einige Schwächen. Ich finde es dennoch lobenswert sich der Thematik zu widmen. Ich stecke nicht besonders tief in der Thematik drin, ich hab mit seit Jahren kein RFC mir mal angeschaut, also sehe ich das was ich hier schreibe auch nur als Halbwissen an und es sollte eher mit Vorbehalten gelesen werden.

Zitat aus diesem Artikel:

"Das Routing will ich an ein paar Beispielen veranschaulichen. Dabei soll z.B. die Zeile

www.gnulinux.ch -> Router:80 -> Server:80

bedeuten: Der Browser ruft http://www.gnulinux.ch auf (implizit Port 80), wird vom DNS an die IP des Routers auf Port 80 weitergeleitet und dann per Port-Weiterleitung an den Server auf Port 80."

Der DNS macht die Zuordnung aus dem Namen auf die IP-Adresse bzw mit PTR-Records auch, vom Bereitsteller der Daten vorgesehen, ist umgekehrt. Routing Informationen sind meines Wissens nach nicht explizit hinterlegt. Man möge mich bitte korrigieren. Routing ist sozusagen ist ein eigenes Thema. Wenn Router nicht gerade mit Firewall-Funktionalität aufgesetzt sind, sollten sie auch einfach die Pakete nur an weitere Router oder die Endadresse zustellen. Portnummern befinden sich außerhalb der IP-Protokollschicht, z.B. dem Anwender begnenen sie am häufigsten bei der Schicht TCP. Sie sind aus Perspektive des Routers zunächst nur ein Datenfeld im IP-Paket.d in gewisser Weise blind was Portnummern angeht.

Häufig, wenn man eine IP-Adresse Version 4 hat, verwendet man NAT (Network Address Translation) in diesem Fall kann man mehrere Server in einem "Heimnetz" mit eigenem Adress-Bereich, der nicht nach außen geroutet wird, wie beschrieben über ein Portnummern-mapping durch den letzten Router vor dem Server ansprechen. Es wurde auch beschrieben, aber das Stichwort sollte fallen.

Es gibt dann auch Mappings auf Applikationschicht z.B. bei http/https, einen sogenannten Reverse Proxy. Der Webserver kann dort sich in solchem Fall über mehrere Rechner verteilen. Oder auch eigene Protokolle, wie SOCKS die das ursprüngliche Applikationsprotokoll tunneln.

Juhu
Geschrieben von Juhu am 24. Januar 2024 um 22:21

Ich behaupte einmal: IP4 ist in iP6 aufgegangen. d.h. Alles was in IP4 funktionierte funktioniert auch in Ip6. Nur der Adressraum ist wesentlich größer und die Qualitiy-of-Services hinzugekommen. Ein paar Kleinigkeiten beim Routungprotokoll und das war es. OK das ist jetzt vielleicht etwas zu simpel aber für den Artikel reicht. Durch die lange Adressen (128bit) gegenüber den 32bit von IPv4 werden eine Menge von Hardware-/Software-Krüken hinfällig. Die erste ist das NAT. Ich muss mein 10er Netz nicht auf eine Internetadresse in der großen freien Welt mappen. Dadurch wurde das angesprochene Portmappen auch sinnlos. Die privaten IP-Adressen (10.0.0.0, etc) entfallen jetzt auch. Und damit auch die Aufteilung auf Class-A,B,C,D Netzwerke. 64Bit für das Netzwerk und 64Bit für Hosts reichen eine Weile.

Ihr werdet einsehen, dass sich durch diese Kleine Erweiterung jetzt eine Reihe von Anpassungen notwendig sind. DNS muß mit den Adressen umgehen können. Router, Firewalls Proxy müssen damit umgehen können . Also alles was über der Schicht 2 liegt.

DNS der Record Type A der den Namen zu einer IP auflöst wurde durch den Record-Typ AAAA ersetzt.
Und eine weitere Besonderheit: wenn du jetzt einen ping www.domain.at wird nachgeschaut ob ein AAAA Record existiert. Wenn er existiert, dann wird die Verbindung über diesen Weg aufgebaut. Wenn nicht wird, der A-Record gesucht.

Man kann i DNS auch 2 -Records mit der gleichen Domain/Host anlegen und unterschiedlichen IPs. Dann hast du die einfachste Form einer Lastverteilung. Nur das verwendet kaum mehr einer.

Achtung: Dadurch das es "keine NATs" mehr gibt, sind die Router u.U. offen wie eine Scheunentür.
Eine Firewall wird also in jede Haushalt wohl oder übel ein MUSS werden, so wie heute die NAT.

Ich hoffe, dass es übersichtlicher wird / bleibt

kwt
Geschrieben von kwt am 24. Januar 2024 um 23:51

hier: https://open.hpi.de/courses/ipv6-2018 gibt es einen super Onlinekurs zu ipv6. Da wir auch DHCP für v6 erklärt.

roteiro
Geschrieben von roteiro am 25. Januar 2024 um 11:37

Grandiose Podcastfolge zur Geschichte, Funktionsweise, Features etc von IPv6: https://cre.fm/cre197-ipv6 Sehr lang, aber auch sehr unterhaltsam und lehrreich.