DS-Lite und CGNAT: Server trotzdem erreichbar machen
Portfreigabe geht bei DS-Lite oder CGNAT nicht? So machst Du Deinen Server trotzdem erreichbar: per IPv6, Tailscale, Cloudflare Tunnel oder VPS-Relay.
Von Nathan Base
Du hast die Portfreigabe in der FRITZ!Box sauber eingetragen, der Server läuft, im Heimnetz ist alles erreichbar, und von außen kommt trotzdem nichts an. Sehr oft liegt das nicht an Dir, sondern am Anschluss: Viele Glasfaser- und Kabelanbieter geben Privatkunden keine eigene öffentliche IPv4-Adresse mehr, sondern nur noch DS-Lite oder CGNAT. Eine IPv4-Portfreigabe hat dann schlicht kein Ziel.
Hier erfährst Du, wie Du Deinen Anschlusstyp in zwei Minuten sicher erkennst, welche fünf Wege es trotzdem gibt und welcher davon zu Deinem Fall passt. Den Weg, der ohne Zusatzdienst auskommt, die IPv6-Freigabe, zeige ich Schritt für Schritt am Beispiel einer FRITZ!Box mit FRITZ!OS 8. Die anderen Wege sind ausführlich in eigenen Anleitungen beschrieben, auf die ich an der passenden Stelle verweise.
Warum die Portfreigabe ins Leere läuft
Eine klassische Portfreigabe funktioniert so: Eine Anfrage aus dem Internet trifft auf die öffentliche IPv4-Adresse Deines Routers, und der Router reicht sie an den Rechner im Heimnetz weiter. Das setzt voraus, dass diese öffentliche Adresse Dir allein gehört.
Bei DS-Lite (Dual-Stack Lite, beschrieben in RFC 6333) ist das nicht der Fall. Dein Anschluss bekommt eine vollwertige IPv6-Verbindung, aber IPv4 läuft nur noch durch einen Tunnel zu einem großen NAT-Router beim Provider. Dort teilst Du Dir eine öffentliche IPv4-Adresse mit vielen anderen Kunden. Kommt von außen eine Anfrage an diese Adresse, weiß der Provider-Router nicht, zu welchem Kunden sie gehört, und verwirft sie.
CGNAT (Carrier-Grade NAT) funktioniert ähnlich, nur ohne IPv6-Tunnel: Dein Router bekommt auf der Internetseite eine Adresse aus dem Bereich 100.64.0.0/10, den RFC 6598 genau für diesen Zweck reserviert. Diese Adresse ist im Internet nicht erreichbar.
Die gute Nachricht: Bei DS-Lite ist IPv6 nicht eingeschränkt. Jedes Gerät in Deinem Heimnetz hat eine weltweit eindeutige IPv6-Adresse, und genau darauf baut der erste Lösungsweg auf.
Den Anschlusstyp erkennen
In der FRITZ!Box siehst Du es am schnellsten in der Übersicht der Benutzeroberfläche unter http://fritz.box. Bei den Verbindungen steht bei DS-Lite ausdrücklich, dass IPv4 über DS-Lite läuft, oft mit dem Zusatz „DS-Lite-Tunnel“. Ausführlicher zeigt es Internet > Online-Monitor, wo die IPv4- und die IPv6-Verbindung getrennt aufgeführt sind.
Unabhängig vom Router klappt der Vergleich im Terminal. Öffne auf dem Mac das Terminal (oder auf einem Linux-Rechner eine Shell) und frag ab, mit welcher Adresse Du im Internet auftauchst:
curl -4 https://ifconfig.co
curl -6 https://ifconfig.coDer erste Befehl zeigt Deine öffentliche IPv4-Adresse, der zweite Deine öffentliche IPv6-Adresse. Vergleich das Ergebnis mit der IPv4-Adresse, die die FRITZ!Box im Online-Monitor für ihre Internetverbindung anzeigt:
- Beide IPv4-Adressen stimmen überein: Du hast eine eigene öffentliche IPv4-Adresse, eine normale Portfreigabe funktioniert. Liegt das Problem trotzdem vor, prüf die Firewall auf dem Server.
- Die FRITZ!Box zeigt eine Adresse zwischen
100.64.0.0und100.127.255.255oder gar keine öffentliche IPv4-Adresse: Du hast CGNAT oder DS-Lite. - Der zweite Befehl liefert eine Adresse, die mit
2oder3beginnt: IPv6 funktioniert, und die IPv6-Freigabe ist für Dich eine Option. Kommt dort eine Fehlermeldung, hat Dein Rechner keine IPv6-Verbindung ins Internet.
Die fünf Wege im Überblick
| Weg | Was er löst | Voraussetzung | Laufende Kosten |
|---|---|---|---|
| Echte IPv4 beim Provider | alles, wie früher | Provider bietet es an | je nach Tarif |
| IPv6-Portfreigabe | Zugriff von IPv6-fähigen Geräten | IPv6 am Anschluss | keine |
| Tailscale | privater Zugriff für Dich und Deine Familie | App auf jedem Gerät | im privaten Rahmen kostenlos |
| Cloudflare Tunnel | öffentliche Websites und Web-Apps | eigene Domain bei Cloudflare | kostenlos für den Grundbedarf |
| VPS als Relay | alles inklusive Spieleserver, per IPv4 | kleiner Server mit IPv4 | ein paar Euro im Monat |
Weg 1: Beim Provider nachfragen
Der direkteste Weg ist ein Anruf. Manche Anbieter stellen auf Nachfrage auf echtes Dual-Stack mit eigener IPv4-Adresse um, teils kostenlos, teils gegen Aufpreis oder nur in Geschäftskundentarifen. Frag konkret nach „Dual-Stack mit öffentlicher IPv4-Adresse statt DS-Lite“. Die Bedingungen ändern sich regelmäßig, deshalb lohnt der Anruf auch dann, wenn ein Bekannter beim selben Anbieter vor zwei Jahren eine Absage bekommen hat.
Weg 2: IPv6-Freigabe
Bei DS-Lite hat Dein Server bereits eine öffentliche IPv6-Adresse. Die FRITZ!Box blockiert eingehende Verbindungen nur mit ihrer Firewall, und eine IPv6-Freigabe öffnet genau einen Port für genau ein Gerät. Das kostet nichts und braucht keinen fremden Dienst. Der Haken: Nur Geräte mit IPv6 erreichen den Server. Die großen deutschen Mobilfunknetze liefern IPv6, viele Hotel-, Firmen- und Gäste-WLANs dagegen nicht. Die Schritte folgen weiter unten.
Weg 3: Tailscale für private Zugriffe
Tailscale baut ein privates Netz aus WireGuard-Verbindungen zwischen Deinen Geräten auf. Weil jedes Gerät die Verbindung von sich aus aufbaut, spielt DS-Lite keine Rolle, und es ist kein einziger Port offen. Für alles, was nur Du und ein paar Vertraute nutzen, also Home Assistant, NAS, SSH oder eine Kamera, ist das der sicherste und einfachste Weg. Auf einem Linux-Server ist Tailscale laut offizieller Installationsanleitung mit zwei Befehlen eingerichtet:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upDer zweite Befehl gibt einen Link aus, mit dem Du den Server in Deinem Tailscale-Konto anmeldest. Wie das am Beispiel Home Assistant im Detail aussieht, zeigt der Artikel Home Assistant von unterwegs: Tailscale oder Cloudflare.
Weg 4: Cloudflare Tunnel für Webdienste
Soll eine Website oder Web-App öffentlich erreichbar sein, ohne dass jeder Besucher eine App installiert, ist ein Cloudflare Tunnel die bequemste Lösung. Das Programm cloudflared läuft bei Dir zu Hause, baut eine ausgehende Verbindung zu Cloudflare auf und nimmt darüber die Anfragen an Deine Domain entgegen. Du brauchst dafür eine eigene Domain, deren DNS bei Cloudflare liegt. Zwei Einschränkungen solltest Du kennen: Cloudflare entschlüsselt den Verkehr auf seinen Servern und sieht ihn damit im Klartext, und für Nicht-Web-Dienste wie Spieleserver ist der Tunnel nicht gedacht.
Weg 5: Ein VPS als Relay
Der universelle Weg ist ein kleiner gemieteter Server mit eigener öffentlicher IPv4-Adresse. Dein Heimserver baut zu ihm einen WireGuard-Tunnel auf, und der VPS reicht ausgewählte Ports durch diesen Tunnel nach Hause weiter. Für die Außenwelt sieht das aus wie eine normale Portfreigabe, auch für reine IPv4-Geräte und auch für Spieleserver. Die Konfiguration steht weiter unten.
Welcher Weg für welchen Fall
| Du willst … | Empfehlung |
|---|---|
| Home Assistant, NAS oder SSH nur für Dich und die Familie | Tailscale |
| eine Website oder einen Blog öffentlich betreiben | Cloudflare Tunnel |
| Nextcloud oder Immich für Freunde, die keine App installieren sollen | VPS als Relay, sonst Cloudflare Tunnel |
| einen Minecraft- oder anderen Spieleserver betreiben | VPS als Relay |
| ohne fremden Dienst auskommen und alle Nutzer haben IPv6 | IPv6-Freigabe |
| dass einfach alles wie früher funktioniert | beim Provider nach Dual-Stack fragen |
Meine Empfehlung für die meisten Heimnetze: Tailscale für alles Private und erst dann einen zweiten Weg, wenn wirklich Fremde zugreifen sollen.
IPv6-Freigabe in der FRITZ!Box Schritt für Schritt
Die folgenden Schritte gelten für FRITZ!OS 8. Auf älteren Versionen heißen die Menüs ähnlich, nur einzelne Schaltflächen sind anders angeordnet.
- Öffne
http://fritz.boxim Browser und melde Dich an. - Geh zu
Internet > Freigabenund dort auf den ReiterPortfreigaben. - Klick auf
Gerät für Freigaben hinzufügenund wähle Deinen Server aus der Liste. - Im Dialog siehst Du unten die IPv6-Adressen des Geräts und die IPv6 Interface-ID. Das ist der hintere Teil der Adresse, der auch dann gleich bleibt, wenn Dein Provider das IPv6-Präfix wechselt. Die FRITZ!Box nutzt die Interface-ID, damit die Freigabe einen Präfixwechsel übersteht.
- Klick auf
Neue Freigabeund wählePortfreigabe. - Wähle als Anwendung
Andere Anwendung, gib einen Namen ein, als ProtokollTCPund als Port den Dienst Deines Servers, zum Beispiel443für HTTPS. - Setz das Häkchen für die Freigabe über IPv6. Das IPv4-Häkchen bringt bei DS-Lite nichts.
- Bestätige mit
OKund speichere den Gerätedialog ebenfalls mitOK.
Auf dem Server selbst muss der Dienst auf IPv6 lauschen und die lokale Firewall den Port erlauben. Bei einem Linux-Server mit aktivem ufw erledigt das:
sudo ufw allow 443/tcpPrüf anschließend, welche globale IPv6-Adresse der Server dauerhaft nutzt:
ip -6 addr show scope globalNimm die Adresse ohne den Zusatz temporary. Temporäre Adressen wechseln regelmäßig aus Datenschutzgründen und sind für einen Server ungeeignet. Stimmt ihr hinterer Teil mit der Interface-ID aus der FRITZ!Box überein, passt alles zusammen.
Damit Du Dir die lange Adresse nicht merken musst, brauchst Du einen Hostnamen, der auf sie zeigt. Am einfachsten geht das mit einer MyFRITZ!-Freigabe für das Gerät oder mit einem DynDNS-Dienst, der einen AAAA-Eintrag aktualisiert. Wichtig ist, dass der Name auf die IPv6-Adresse des Servers zeigt und nicht auf die der FRITZ!Box.
So prüfst Du, ob es funktioniert
Ein Test aus dem eigenen WLAN sagt nichts aus, weil die Anfrage die FRITZ!Box-Firewall gar nicht von außen passiert. Schalte am Smartphone das WLAN aus, sodass es über das Mobilfunknetz surft, und öffne die Adresse dort im Browser. Alternativ testest Du von einem anderen Anschluss aus im Terminal:
curl -6 -I https://dein-server.example.deErsetze dein-server.example.de durch Deinen Hostnamen. Antwortet der Server mit einer Zeile wie HTTP/2 200 oder einer Weiterleitung, ist die Freigabe aktiv.
VPS-Relay mit WireGuard: das Grundgerüst
Für diesen Weg brauchst Du einen kleinen Linux-Server mit öffentlicher IPv4-Adresse, etwa ein Droplet bei DigitalOcean (Affiliate Link) mit Ubuntu. Die kleinste Größe reicht, weil der VPS nur Pakete weiterreicht. Wie Du WireGuard auf dem Droplet installierst und Schlüssel erzeugst, erklärt die Anleitung WireGuard-VPN auf einem Ubuntu-Droplet einrichten. Hier geht es nur um die Konfiguration, die aus dem VPN ein Relay macht.
Installiere WireGuard auf beiden Seiten und erzeuge auf jeder Seite ein eigenes Schlüsselpaar:
sudo apt install wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickeyAuf dem VPS legst Du mit sudo nano /etc/wireguard/wg0.conf diese Datei an. Das Beispiel leitet den Minecraft-Port 25565 nach Hause weiter:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = VPS_PRIVATE_KEY
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.2:25565
PostUp = iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.2:25565
PostDown = iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
[Peer]
PublicKey = HEIM_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32Ersetze VPS_PRIVATE_KEY durch den Inhalt der Datei privatekey auf dem VPS und HEIM_PUBLIC_KEY durch den Inhalt von publickey auf dem Heimserver. eth0 ist bei DigitalOcean die Netzwerkkarte mit der öffentlichen Adresse, bei anderen Anbietern prüfst Du den Namen mit ip addr. Die MASQUERADE-Zeile sorgt dafür, dass die Antworten Deines Heimservers zuverlässig durch den Tunnel zurückgehen. Speichere mit Strg + O, bestätige mit Enter und schließe mit Strg + X.
Auf dem Heimserver sieht /etc/wireguard/wg0.conf so aus:
[Interface]
Address = 10.8.0.2/24
PrivateKey = HEIM_PRIVATE_KEY
[Peer]
PublicKey = VPS_PUBLIC_KEY
Endpoint = VPS_IP:51820
AllowedIPs = 10.8.0.1/32
PersistentKeepalive = 25VPS_IP ist die öffentliche IPv4-Adresse des Droplets. PersistentKeepalive hält den Tunnel offen, denn bei DS-Lite kann nur Dein Heimserver die Verbindung aufbauen, nicht umgekehrt. Starte den Tunnel auf beiden Seiten und richte ihn als Dienst für den Systemstart ein:
sudo systemctl enable --now wg-quick@wg0Mit sudo wg show siehst Du auf beiden Seiten einen Eintrag latest handshake mit einer Zeit von wenigen Sekunden, wenn der Tunnel steht. Ist auf dem VPS ufw aktiv, gibst Du dort noch UDP-Port 51820 und den weitergeleiteten Port frei. Für eine Website leitest Du statt 25565 die Ports 80 und 443 weiter und lässt den A-Eintrag Deiner Domain auf die IP des VPS zeigen. Das Zertifikat holt sich dann weiterhin Dein Heimserver, weil Let’s Encrypt ihn über den weitergeleiteten Port 80 erreicht.
Diese Konfiguration ist das Grundgerüst nach der offiziellen WireGuard-Schnellstartanleitung. Sie leitet bewusst nur die Ports weiter, die Du einträgst, sodass der VPS sonst nichts von Deinem Heimnetz preisgibt.
Wenn es trotzdem nicht klappt
- Die IPv6-Freigabe funktioniert nur im eigenen WLAN: Der Test lief nicht von außen. Teste über Mobilfunk ohne WLAN.
- Nach ein paar Tagen ist der Server unter IPv6 nicht mehr erreichbar: Der Provider hat das Präfix gewechselt, und Dein DNS-Eintrag zeigt noch auf die alte Adresse. Prüf, ob die MyFRITZ!-Freigabe oder Dein DynDNS-Dienst den AAAA-Eintrag aktualisiert.
- Manche Freunde erreichen den Server, andere nicht: Die anderen haben kein IPv6. Für sie hilft nur Tailscale, ein Cloudflare Tunnel oder das VPS-Relay.
- Der WireGuard-Tunnel steht, aber der weitergeleitete Port antwortet nicht: Prüf mit
sudo iptables -t nat -L -n -v, ob die DNAT-Regel angelegt ist, und ob der Dienst auf dem Heimserver auch auf der Tunneladresse10.8.0.2lauscht und nicht nur auf127.0.0.1.
Wenn Du den Server ohnehin nur selbst nutzt, lohnt ein Blick auf den Artikel Tailscale Exit Node: unterwegs über den Pi surfen. Dort wird aus demselben Tailscale-Netz zusätzlich ein Werbeblocker für unterwegs, und Du hast mit einer einzigen Einrichtung zwei Probleme gelöst.
Weiterlesen.
-
Raspberry Pi & LinuxHome Assistant von unterwegs: Tailscale oder Cloudflare
Home Assistant ohne Portfreigabe von unterwegs erreichen, auch mit DS-Lite: Tailscale, Cloudflare Tunnel und Nabu Casa im Vergleich, mit Anleitung.
Nathan Base -
Raspberry Pi & LinuxWireGuard-VPN auf einem Ubuntu-Droplet einrichten
Eigenes VPN mit WireGuard: Server auf einem Ubuntu-Droplet einrichten und Mac oder iPhone verbinden. Schlüssel, Konfiguration, Firewall und Test.
Nathan Base -
Raspberry Pi & LinuxTailscale Exit Node: unterwegs über den Pi surfen
Raspberry Pi als Tailscale Exit Node: im Hotel-WLAN sicher über den eigenen Anschluss surfen und Pi-hole auch unterwegs auf dem iPhone nutzen.
Nathan Base -
Web & CodeClickHouse selbst hosten: Analysen in Millisekunden
ClickHouse wertet Milliarden Zeilen in Sekundenbruchteilen aus, ist Open Source und läuft per Docker. Was die Datenbank anders macht und wann sie passt.
Nathan Base -
Web & CodeAirbyte selbst hosten: Daten automatisch zusammenführen
Airbyte holt Daten aus über 600 Quellen wie Stripe, HubSpot oder Postgres an einen Ort. Was das Open-Source-Tool kann und wie Du es selbst hostest.
Nathan Base -
Web & CodeAnleitung: linkding mit Docker selbst hosten
linkding ist ein schlanker Bookmark-Manager zum Selbsthosten. So richtest Du ihn mit Docker Compose ein und verbindest die Browser-Erweiterung.
Nathan Base