IPv6 aus IPv4-Netz erreichen (Urlaubsvorbereitung!)

Worum geht es

Da hat man nun zu Hause den schönen neuen Glasfaseranschluss, der eigene Nextcloud-Server ist über IPv6 erreichbar. Und dann das: Im Hotel gibt es nur IPv4, und auch das Mobilfunknetz bietet kein IPv6.
Wer da vorgesorgt hat, kann beruhigt in den Urlaub fahren.


Das Problem mit IPv4 und IPv6

Kurz zusammengefasst: Im Internet gibt es 2 Arten der Adressierung:

- Die alte IPv4 Adresse - zum Beispiel 149.112.112.10
- Die neue IPv6 Adresse - zum Beispiel 2620:fe:0:fe:10

Die beiden Adressierungsverfahren sind inkompatibel! Wenn 2 Geräte in Kontakt treten wollen, müssen beide eine IPv4 oder beide eine IPv6 - Adresse haben. Ein "gemischter" Betrieb ist nicht möglich! Keine Verbindung nach Hause

Die IPv6 Adressierung wurde eingeführt, weil es nicht mehr genug IPv4 Adressen für alle Teilnehmer gibt.

Wer heute einen neuen Internetanschluss bekommt, bekommt in der Regel nur noch eine echte IPv6-Adresse.

Die IPv4-Adresse, die man zu Hause dennoch sieht, ist eine Art "Gemeinschaftsadresse", die man sich mit anderen teilt. Sie ist nicht geeignet, um seinen Server zu Hause zu erreichen. Näheres siehe in diesem Post


Die Lösung: Externer Portmapper


Ohne eine externen Dienst geht es nicht. Ein solcher Dienst heißt Portmapper, weil er in der Regel nur einzelne Ports (Dienste) von IPv4 nach IPv6 übersetzt.

Ein Beispiel:

Keine Verbindung nach Hause
- In diesem Beispiel würde ich gerne vom Hotel aus meinen Server mit https://mein_zu_hause.de ansprechend (was aufgelöst wird in https://[2a01:598:66ff:3d0::20e:fed0:1]:443.
Da das aber eine IPv6 Adresse ist, funktioniert es nicht.
- Statt dessen rufe ich https://mein_portmapper.de:51330 auf - eine IPv4 Adresse.
- Der Portmapper leitet den Datenverkehr an https://[2a01:598:66ff:3d0::20e:fed0:1]:443 weiter - IPv6.
- Der Rückverkehr funktioniert natürlich auch

Im Folgenden werde ich 2 Möglichkeiten zeigen, einen Portmapper aufzusetzen

Ein Portmapper ist ein externer Dienst und kostet deshalb in der Regel Geld. Man muss von 2 -5 Euro pro Monat ausgehen (Stand 2025) Um den Portmapper aufzusetzen, muss man natürlich seine eigene IP (oder eigene Domäne) kennen. Wie man das macht, hat nichts mit dieser Thematik zu tun, ich gehe darum nicht darauf ein.

Lösung A: Internet-Dienste

Im Internet finde man einige Dienste, die diese Aufgabe erledigen.

Im folgenden werde ich mal auf das Einrichten bei feste-ip.net eingehen. Bei anderen Diensten läuft es ähnlich.

Vorgehen

  1. Einen Account erstellen (Nutzername, Passwort). Der wird für die Abrechnung benötigt.
  2. Man gibt an, welche Verbindungen man benötigt. Dazu gehört
    a. Eine Zieladresse. Das kann sein
    -> die absolute IPv6 - Adresse des Gerätes zu Hause, also [2a00:ceff:03b4:...]. Ich verwende das für meine IT so, da sich bei mir der IPv6 Präfix (und damit die vollständigen IPv6-Adressen) in den letzten 3 Jahren nicht geändert haben. Aber das ist abhängig von Provider (ISP)
    -> eine Adresse, die per DNS aufgelöst werden kann. Also die eigene Domäne (so man denn hat), eine Adresse eines DynDNS-Dienstes, oder für Nutzer von Fritzboxen die Adresse für externe Fritzbox-Dienste
    b. Optional ein "Hostname" (genauer gesagt: eine Subdomäne des Dienstleisters). Das macht das Lesen einfacher. Beispiel hier: webcam.feste-ip.net
    c. Die Ports zu Hause, die man gemappt haben möchte. Also zum Beispiel 8080 für eine Webcam, 443 für einen Nextcloud-Server usw. (Natürlich sind diese Ports zu Hause im Router per Portforwarding freigeschaltet ;-)
    Beispiel bei feste-ip.net:

    Portmapping_anlegen

  3. Man erhält eine Mapping - Tabelle: Mappingtabelle
    Die Webcam, die man im IPv6-Netz unter "webcam.abcdefghijkl.myfritz.net:8080" erreicht, erreicht man jetzt aus dem IPv4 - Netz mittels Portmapper unter "meinecam.feste-ip.net:22167"

Das Portmapping über einen Internetdienst hat Vor- und Nachteile:

Vorteile

  • Der Dienst ist schnell eingerichtet, was bei Bedarf sogar erst aus dem Hotelzimmer möglich ist
  • Das Einrichten ist einfach, man muss nur die heimischen Ports kennen

Nachteile

  • Der IPv4 Port wird in der Regel vom Anbieter festgelegt (im Beispiel 22167). Viele Hotels und öffentliche Einrichtung sperren nach meiner Erfahrung Ports über 1024 grundsätzlich - warum auch immer. Die hier beschriebene Beispielsverbindung zu einer Webcam würde nicht funktionieren
  • Einige Provider (auch feste-ip.net) bieten nur das Mapping von TCP - Ports an. Eine Wireguard - VPN- Verbindung nach Hause - was eine sichere und elegante Lösung wäre - ist also nicht möglich, da Wireguard UDP verwendet.

Lösung B: Virtueller Root Server

Flexibler ist man, wenn man einen virtuelle Root Server anmietet. Das ist nicht teurer als ein Internet Dienst, aber das Einrichten ist aufwendiger.

Vorgehen

  1. Man mietet einen virtuellen Root Server bei einem Anbieter. Die Anforderungen daran sind:
    -> Kleinste Ausstattung ist ausreichend: 1 CPU, 4 GB RAM, ...
    -> Im Angebot MUSS eine IPv4 - Adresse enthalten sein
    (ersatzweise eine Domäne, die aus dem IPv4 - Netz erreichbar sein muss). Keine vorgegebene Ports!
    -> Ausreichende tägliche Datenmenge für die eigenen Anforderungen
    -> Ein minimales Linux-System. Eine grafische Oberfläche braucht man nicht. Root - Zugriff ist erforderlich.

  2. Das Mapping erfolgt über das Tool "socat". Das muss erst installiert werden. In einem Debian - System hieße das
    apt install socat

  3. Man erstellt ein Shellscript, z.B. portmapper.sh, mit folgendem Inhalt (Beispiel):

    >#! /bin/sh
    ># Webcam
    > socat TCP4-LISTEN:8080,fork,su=nobody TCP6:webcam.abcdefghijkl.myfritz.net:8080 &<br>
    > # Wireguard<br>
    > socat UDP4-Listen:286,fork,su=nobody UDP6:[2a01:6a20:810d:9b11:ec84:adc0f:fec8:a1c4]:59286 &

Der erste socat - Befehl ist der Zugriff auf die Webcam wie im Beispiel oben. Die Aufschlüsselung der Parameter:
- TCP4-LISTEN:8080 Es wird auf dem TCP IPv4 Port 8080 gelauscht.
- fork,su=nobody Wenn was empfangen wurde, wird ein Kindprozess gestart, der keine superuser (root) - Rechte hat
- TCP6:webcam.abcdefghijkl.myfritz.net:8080 Das Empfange wird auf TCP IPv6 Port 8080 an die Fritzbox zu Hause weitergeleitet
- & Der Kindprozess läuft eigenständig weiter (wichtig, sonst würde das Script hier warten, bis die Übertragung beendet wird

Der zweite socat - Befehl ist ein UDP - Mapping. Es funktioniert wie das TCP - Mapping (UDP4-LISTEN statt TCP4-LISTEN usw.)
Wichtiger Unterschied:
-T 3600 Da UDP eine Verbindung nicht aktiv beendet, würde der Kindprozess immer weiter laufen, aber bei neuen Verbindungen ein neuer Prozess hinzukommen. So würde langsam der Speicher volllaufen. -T 3600 bewirkt, dass der Prozess nach 3600s (1h) beendet wird.
Man sieht auch: Der Prozess lauscht auf dem Port 270, also unter 1024, so dass die Chance, aus dem Hotelzimmer herauszukommen, größer ist.

  1. Das Script automatisch beim Booten starten. Dazu in crontab eintragen (crontab -e):

    @reboot /bin/bash /root/portmapper.sh

Vorsichtsmaßnahme (bei Bedarf):

In meiner Installation kommt es alle paar Wochen mal vor, dass ein Prozess "verschwindet". Ursache unbekannt. Ich habe deshalb einen Watchdog installiert.

Das Script watchdog.sh sieht so aus:

``

> #! /bin/sh
> #Wireguard 
>no_of_processes=$(ps -ax | grep --count UDP4-LISTEN:286)
>if [ $no_of_processes -le 1]
>then
>echo $? "Neustart UDP_LISTEN:287" >> /var/log/check_socat.log
>socat UDP4-Listen:286,fork,su=nobody UDP6:[2a01:6a20:810d:9b11:ec84:adc0f:fec8:a1c4]:59286 &
>fi

``

Zur Erläuterung: ps -ax | grep --count UDP4-LISTEN:286 ermittelt, wieviele Prozesse mit dem Parameter "UDP4-LISTEN:286" laufen. Wenn alles ok ist, müssen es mindestens 2 sein: Der durch "portmapper.sh" gestartete Prozess und dieser (ps). Wenn zu wenige Prozesse laufen, wird der socat - Prozess neu gestartet.

Dieser Prozess muss in crontab eingebunden werden:

30 * * * * /bin/bash /root/watchdog.sh

Alle 30 Minuten wird überprüft, ob noch alle Prozesse laufen.

Auch das Portmappen über einen virtuellen Root hat Vor- und Nachteile:

Vorteile

  • TCP und UDP möglich
  • Weitgehend freie Wahl der Ports
  • Man kann mit einem Root-Servern auch anderen Personen (Freunden, Verwanden) mit dem gleichen Problem helfen
  • Geringe Kosten

Nachteile

  • Linux Grundkenntnisse erforderlich
  • Einrichten ist zeitaufwendig
  • Regelmäßige Wartung des Servers (z.B. Einspielen von Updates) erforderlich

Weitere Ideen, Verbesserungen und Korrekturen gerne an mich über meine Kontaktmöglichkeiten.