… oder: FTTH von extern erreichbar machen
Problem
Der Glasfaseranschluss von Deutsche Glasfaser ist ein Breitbandinternetzugang, der via FTTH (Fiber to the Home) bereitgestellt wird. Für Dienste wie surfen im Web, Emails abfragen, Downloads oder Video-Streams ansehen und VoIP-Telefonie ist das System problemlos und sofort nach dem Freischalten geeignet. Schwierig wird es, wenn man von außen auf Serverdienste im Heimnetzwerk zugreifen will. Dies können Webcams, Private Clouds, ein VPN Server oder eine simple Website sein, die man bisher an seinem DSL-Anschluss auch genutzt hat. Dies geht nicht mehr direkt, denn man bekommt keine öffentliche IPv4-Adresse (Internet Protocol Version 4) mehr zugewiesen. Die IPv4-Adressen die der Provider zuweist ist eine sogenannte private IP, die nicht direkt aus dem Internet erreichbar ist. Genau dies war mein Problem. Ich verfolge mit diesem Artikel nicht den Zweck, alle Details technisch zu erklären, sondern möchte eine Hilfestellung im Sinne eines Tutorials für technisch nicht so versierte Nutzer geben. Dennoch ist es erfoderlich, dass sich der Leser etwas mit der Materie – insbesondere der Technik des Internets – auseinandersetzt. Auch Nutzer von anderen Glasfaserprovidern und Inhaber von DS-Lite Anschlüssen, können einige der Dinge gebrauchen.
Ich zeige wie man kostenlos per IPv6 (Internet Protocol Version 6) und mit geringen Kosten auch mit einer eigenen Domain und/oder per IPv4 aus dem Internet erreichbar wird.
IPv6 einrichten
Als Beispiel nutze ich einen Linux-Rechner (hier Ubuntu-Server) als Server. Prinzipiell ist das Vorgehen aber auch mit Windows-Rechnern, Macintosh-Rechnern, einem NAS (Networt Attached Storage), oder anderen Geräten möglich. Am einfachsten ist es, wenn diese IPv6 direkt unterstützen. Das sollten die meisten modernen Betriebssysteme tun. So findet man die IPv6 Adresse(n) des Computers raus:
Windows:
Auf der Kommandozeile (Start –> Ausführen –> cmd) den Befehl
ipconfig
aufrufen.
Mac OS X und Linux bzw. Unix (auch auf vielen NAS läuft Linux):
Ein Terminal öffnen (unterschiedliche Wege möglich, je nach Betriebssystem) und den Befehl
ifconfig
aufrufen.
Bitte beachtet, dass ihr immer mehrere IPv6 Adressen habt. Eine Temporäre und eine Statische. Die temporäre IPv6 wird zum surfen genutzt, damit im Internet nicht lückenlos verfolgt werden kann, auf welchen Seiten ihr euch rumgetrieben habt. Ohne diese temporäre Adresse könnte sonst von jedem IPv6 Eigentümer ein lückenoses Bewegungsprofil angefertigt werden. Das wollte man bei der Neukonzeption der IP-Adressvergabe vermeiden. Die statische IPv6 Adresse, manchmal auch als global bezeichnet, ist also die richtige Wahl für die Serverdienste. Sie ist eindeutig, und das ist wichtig, damit euer Server immer gefunden werden kann.
Das Beste an der IPv6-Adresse von Deutsche Glasfaser ist, dass sie quasi statisch ist. Das heißt, dass sie sich nicht jedesmal ändert, wenn sich das Modem neu verbindet. In der Praxis bedeutet dies, dass die ersten 4 Tupel (der Prefix) der IPv6 Adresse immer gleich sind. Die letzten 4 Tupel der statischen IPv6 Adresse sind der Host-Teil, der sich aus der Hardwareadresse der Netzwerkkarte berechnet. Man bekommt seitens des Internetproviders also nicht nur eine Adresse zugewiesen wie bei IPv4, sondern im Prinzip einen gesamten Adressbereich mit mehreren hunderttausend möglichen IPv6 Adressen. Damit diese IPv6 Adressen aus dem Internet erreichbar sind, muss man die Firewall für einen spezifischen Computer mit IPv6 Adresse öffnen. Dieser ist dann ohne Portforwarding, wie es bei IPv4 früher üblich war, direkt erreichbar. Im Glasfaserrouter heißt dieses Freigeben der Firewall unglücklicherweise IPv6-Forwarding, obwohl dies technisch etwas anderes ist.
Wollte ihr also einen Serverdienst auf einem Gerät freigeben müsst ihr nur die globale IPv6 Adresse in den Glasfaserrouter eintragen. Im Screenshot seht ihr die Einträge für meinen Linux-Webserver, auf dem auch diese Website läuft. Die Ports die man angeben kann beziehen sich dabei auf die freigeschalteten Ports die man sich wie Fenster in der Wand (hier natürlich der Firewall) vorstellen kann. Hier ist Vorsicht geboten. Trägt man nichts ein, ist der gesamte Server ohne Schutz einer Firewall. Ich empfehle daher die Ports selektiv freizugeben. Für einen Standard-Webserver braucht man Port 80 (http) und/oder Port 443 (https). Hinweis: Wenn ihr eine eigene Webseite über https aufruft, wird der Browser eine Sicherheitswarnung anzeigen. Dies ist normal, da ihr an dieser Stelle sicherlich noch kein offiziell signiertes Zertifikat hinterlegt habt. Diese Zertifikate kosten leicht mehrere hundert Euro und lohnen sich für die private Website oft nicht. Daher könnt ihr diese Meldungen zunächst ignorieren, sofern ihr euren eigenen Server aufruft. Mittlerweile gibt es die Initiative Let’s Encrypt, die kostenlose, signierte SSL Zertifikate bereitstellt. Ab 2018 sollen sogar wildcard Zertifikate hinzukommen. Dann braucht ihr nicht für jede Subdomain ein eigenes Zertifikat. Eine gute Anleitung um Let’s Encrypt einzurichten (für Ubuntu 16.04 LTS) und den Webserver Apache findet man z.B. bei digitalocean.com.
Wenn ihr andere Serverdienste betreiben wollt, müsst ihr euch die entsprechende Dokumentation des Serverdienstes ansehen und die dann passenden Ports freigeben.
IPv6 testen
Bis hierher herzlichen Glückwunsch. Ihr seid jetzt im Internet der Zukunft und von jedem IPv6 fähigem Gerät in einem IPv6 fähigen Netz erreichbar.
Ihr könnt es jetzt erstmal direkt probieren. Gebt in einem Browser http://[IPv6-Adresse-des-Servers] ein. Achtung: Die eckigen Klammern sind wichtig, sonst interpretieren die Browser die Adresse als IPv4-Hostnamen. Wenn ihr die Website so nicht aufrufen könnt, müsst ihr in der jeweiligen Serverkonfiguration nachsehen, ob IPv6 ggf. deaktiviert ist. Wie das mit dem Webserver Apache2 geht kann man in diesem Blog nachlesen. Gegebenfalls müsst ihr die Firewalleinstellungen des Servers ändern z.B. die Windows Firewall oder Firewalls von Drittanbietern so einstellen, dass die benötigten Ports nicht abgeschrirmt sind.
Ich habe es probiert aus folgenden Netzen: Standard Telekom DSL-Anschluss, Uninetz der Ruhr-Universität Bochum, anderen Deutsche-Glasfaser-Anschlüsse. Aus diesen Netzen kann ich meine heimische Website direkt aufrufen.
Was oftmals nicht direkt via IPv6 geht ist ein Zugriff aus den Mobilfunknetzen. Über T-Mobile und Congstar (beides postpaid) kann ich mittlerweile gut via IPv6 auf meine Webseite zugreifen. Allerdings erst, seitdem ich manuell den APN in den Einstellungen des Mobilgerätes auf IPv4/IPv6 gestellt habe. Dazu ruft ihr die APN Einstellungen auf.
Samsung S6:
Einstellungen --> Verbindungen --> Mobile Netzwerke --> Zugangspunkte
und wählt beim richtigen Zugangspunkt APN-Protokoll und APN-Roaming-Protokoll jeweils IPv4/IPv6 aus.
Bei iOS Geräten habe ich die APN Einstellungen zwar auch gefunden, aber hier kann man keine Detaileinstellungen vornehmen.
Beim Probleme liegen hier eher nicht bei eurem Glasfaseranschluss, sondern an der mangelnden Umsetzung von IPv6 bei einigen Mobilfunk-Providern oder nutzerunfreundlichen Voreinstellungen bei den APN seitens Betreiber und/oder Handyherstellern. Wenn IPv6 gar nicht unterstützt wird, heißt es warten oder einen sogenannten Portmapper konfigurieren.
Namensauflösung
Wie weiter oben bereits erwähnt, erhaltet ihr eine statische IPv6 Adresse. Die Nutzung von dyamischen DNS (Domain Name Service) Diensten, die die jeweilige IPv4 Adresse des Routers (regelmäßig, bzw. bei jeder Neueinwahl) an einen dieser Dienste schickt, um sie in einen leicht zu merkenden Hostnamen (z.B. karken.no-ip.com) umzusetzen, ist somit nicht mehr notwendig.
Wenn ihr eine Domain (z.B. xyz.de) registriert, könnt ihr diese ganz einfach auf die statische IPv6 verweisen lassen. Ich habe das mit meiner Domain ulrichivens.de gemacht und kann somit auch beliebig viele Subdomains z.B. https://www.ulrichivens.de hosten. Die deutsche .de Domain kostet ca. 6 EUR im Jahr. Ihr müsst darauf achten, dass der AAAA-Record der Doman auf die IPv6-Adresse des Webdienstes verweist und Wildcards eingeschaltet sind. Wenn man das nicht selbst machen kann (wie bei meinem Provider http://www.domain.de) einfach den Support anschreiben und darum bitten, den AAAA-Eintrag zu setzen und Wildcards zu konfigurieren. Dann kennen die Nameserver im Netz die Domain und wissen auch wohin mit den (beliebig) vielen Subdomains. Und schon seid ihr auch per Hostnamen und eigener Domain via IPv6 zu erreichen.
Wer es kostenlos haben möchte, der kann sich z.B. bei FreeDNS eine (oder mehrere) Subdomains aussuchen und mit dem Glasfaseranschluss nutzen. Nach dem Account anlegen einfach einloggen, Subdomains wählen und den Add-Button drücken. So geht’s:
Unter der eingetragenen Adresse seid ihr dann per IPv6 erreichbar. Auch hier kann man Wildcards setzen. Dann wird die Adresse aber lang. z.B. irgendwas.subdomain.domain.net Es kann ggf. bis zu einer Stunde dauern, bis ihr erreichbar seid, da sich die Nameserver im Internet erst noch abgleichen müssen.
Testen kann man die Namensauflösung unter Linux und OS X mittels des Kommandozeilenprogramms host:
Hier im Beispiel muss ulrichivens.de durch eure Domain ersetzt werdern. Der AAAA-Record verweist immer auf die IPv6, der A-Record auf die IPv4. Wenn ihr nach diesem Tutorial vorgeht habt ihr natürlich zum jetztigen Zeitpunkt noch keinen A-Record. Das kommt nachdem ihr euch um IPv4 gekümmert habt. Also bitte weiterlesen!
Externes Portmapping
Damit der Server per IPv4 erreichbar wird ,kann man sich ein sogenanntes Portmapping einrichten. Dabei wird eine IPv4 Adresse aufgerufen, die die Daten dann an die statische IPv6 Adresse „weiterleitet“. Ich habe dazu den Dienst Feste-IP.Net genutzt. Dieser ist nicht kostenlos, aber preiswert. Wenn man sich anmeldet bekommt man 50 Credits gutgeschrieben. Damit kann man die Portmapper ausführlich testen. Ein Portmapper kostet einen Credit pro Tag. Für den Anfang reicht das. Danach muss man einen kleinen Beitrag zahlen. Man kann hier auch einen dedizierten Portmapper erwerben (das habe ich gemacht), der kostet 30 EUR pro Jahr. Zum Jahresabo kommt noch noch der Verbrauch von einem Credit pro Tag. Zu den Vorteilen komme ich später.
Die Einrichtung ist denkbar einfach. Alle Details werden auf der Website ausführlich erklärt, zudem ist der Support prima. Schnelle Antwortzeiten und ein sehr netter Kontakt. So geht’s:
Ihr seid nun per IPv4 erreichbar. Der Portmapper mappt dann einen beliebigen vom System vergebenen Port (z.B. den Port 43836, wird euch mitgeteilt) auf den Port 80 (http) von eurem IPv6 Server. Das funktioniert gut, ist aber nicht so richtig praktisch für eine Website, weil der Port immer mit angegeben werden muss. Normale Browser ergänzen den Port 80 (bzw. den Port 443) am Ende der IP Adresse oder des Hostnamens automatisch, weil dieser Port normalerweise zum Protokoll http (bzw. https) gehört. Auch kann es sein, dass der Server aus manchen Netzen (z.B. Firmennetzen oder Hotels) nicht erreichbar ist, weil z.B. Proxy-Server oder Firewalleinstellungen die Nutzung anderer Ports als 80 oder 443 verhindern.
Das ist dann auch der Vorteil eines dedizierten Portmappers. Ihr mietet euch für den oben genannten Betrag eine eigene statische IPv4 und die benötigten Ports werden dann 1 zu 1 gemappt. Also Port 80 IPv4 auf Port 80 IPv6. Besser geht’s nicht.
Ob ihr via IPv6 und IPv4 mit eurer Domain verbunden seid, könnt ihr euch mittels einer Browser-Erweiterung anzeigen lassen. Für die Browser Mozilla Firefox und Google Chrome gibt es dazu die nützliche Open Source Erweiterung IPvfoo von pmarks.net. Installation für Chrome via Chrome Web Store, bei Firefox über die Add-ons Seite.
Tunnellösungen
Zur IPv4 Anbindung funktionieren prinzipiell auch Tunnellösungen. Diese sind etwas schwieriger zu konfigurieren, weil ihr nicht nur auf einer Webseite die Ports auswählen müsst, sondern auch noch weitere Dienste auf eurem Server installieren müsst. Da ihr als Kunde der Deutschen Glasfaser schon eine funktionierende, quasi statische IPv6 Anbindung habt, ist eine Portmapping Lösung deutlich sinnvoller (und auch billiger), wenn ihr nur die Protokollart TCP benötigt.
Benötigt ihr auch UDP Verbindungen oder seid bei einem Provider Kunde, der nur sogenanntes DS-Lite unterstützt (keine statische IPv6 und zusätzlich nur eine private IPv4) geht es nicht ohne Tunnellösung. Für meinen Webinarserver benötige ich UDP, deshalb habe ich diesen via VPN-Tunnel angebunden. Die Firma Cosimo (www.feste-ip.net) hat auch hier ein super einfaches Produkt (VPN-Tunnel) im Portfolio. Es kostet pro Jahr 30 EUR für die IPv4 und 5 Credits am Tag. Das ist aber immer noch sehr preiswert. Ich zeige euch kurz die Einrichtung.
Zunächst installiert ihr auf eurem Server OpenVPN:
sudo apt install openvpn
Dann richtet ihr euch auf der Website von feste-ip.net noch den VPN-Tunnel ein und konfiguriert die Firewall für eingehende Verbindungen. Ausgehende verbindungen sind immer erlaubt. Hier gehören alle TCP und UDP Ports rein, die ihr von außen erreichbar haben wollt. Einfach als Trenner ein Komma dazwischen schreiben, bei einem Port Range einen Bindestrich zwischen Anfangs- und Endport
Dann ladet ihr die Konfiguration als ZIP-Datei herunter…
… und speichert die Inhalte diesez ZIP-Datei in euerem OpenVPN Verzeichnis (als Superuser!). Bei Ubuntu liegt das unter:
/etc/openvpn/
Nach einem Neustart des OpenVPN-Dienstes wird die OpenVPN Verbindung aufgebaut und ihr seid unter der IPv4 erreichbar. Dazu in der Konsole eingeben:
sudo service openvpn restart
Mittels ifconfig ist jetzt ein Tunneldevice (tunX) mit eurer offentlichen IPv4 unter inet Adresse zu sehen. Das war’s! Jetzt habt ihr auch an eurem Server eine feste IPv4 Adresse.
Was ist denn jetzt anders als beim Portmapper? Die Tunnelverbindung wird vom eurem Server zu den VPN-Servern von Cosimo aufgebaut, kommt also von innen heraus. Daher ist es völlig egal ob ihr nur DS-Lite habt.
Ob ihr mit dieser Lösung die volle Geschwindigkeit eurer Netzwerkverbindung nutzen könnt, hängt von dem Prozessorkern eures Servers ab. Die Daten laufen verschlüsselt über die VPN Verbindung. Mit einem Rasperry Pi 3 sind so etwa 50 MBit drin. Bei meinem Webinarserver können problemlos 15 Personen mitsamt Webcam teilnehmen, ohne dass es ruckelt.
Internes Portmapping
Es kann natürlich auch erforderlich sein, dass interne IPv4-only Geräte (z.B. eine Heizungssteuerung, ein älteres NAS) von außen erreichbar sein sollen. Dies kann man mit einem beliebigen, per IPv6 erreichbaren internen Linux-Server mit einem eigenen Portmapper machen. Unter Linux steht euch das Tool 6tunnel von Wojtek Kaniewski oder die Alternative socat zur Verfügung. Es ist damit sehr einfach, einen entsprechenden Tunnel herzustellen.
Hier ist aber besondere Vorsicht geboten:. Der Zugang ist dann nur so sicher wie das genutzte Protokoll! Hat der Server (z.B. die Heizungsanlage) nur einen Standard-Webserver (Port 80, http) oder einen Telnet-Zugang (Port 23, telnet) ist der gesamte Netzwerkverkehr zu diesem Serverdienst unverschlüsselt. Man kann dann ganz einfach – und im Klartext – ein ggf. eingerichtetes Passwort des Serverdienstes mitlesen. Idealerweise greift man also nur auf verschlüsselte Protokolle (z.B. https, Port 443) zurück, sonst steuert plötzlich jemand anderes die Heizungsanlage. Für alles andere gibt es VPN-Lösungen (Virtual Private Network) oder sogenannte Reverse-Proxys. So geht’s mit dem Portmapper:
- 6tunnel und/oder socat auf LINUXRECHNER installieren z.B. unter Debian/Ubuntu
sudo apt-get install 6tunnel socat
- Auf dem Glasfaserrouter (wie weiter oben beschrieben) eine IPv6 Freigabe auf Rechner LINUXRECHNER und Port PORTNUMMER_LINUXRECHNER einrichten. Die Portnummer könnt ihr frei wählen, jedoch keine doppelt belegen!
- Den Tunnel zum Testen einrichten mit:
/usr/bin/6tunnel -6 -v PORTNUMMER_LINUXRECHNER IPv4_INTERNES_GERÄT PORTNUMMER_INTERNES_GERÄT
oder
/usr/bin/socat -v tcp6-listen:PORTNUMMER_LINUXRECHNER,fork tcp-connect:IPv4_INTERNES_GERÄT:PORTNUMMER_INTERNES_GERÄT
Die Ausgaben auf der Konsole zeigen die Details zum Tunnel.
- Wenn es sich um ein Webinterface handelt in einem Browser die IPv6-Adresse bzw. den Hostnamen von LINUXRECHNER mit PORTNUMMER_LINUXRECHNER aufrufen. Dann sollten das Webinterface des internen IPv4 Gerätes sichtbar sein.
- Den Tunnel mit strg-c beenden und (wenn es funktioniert) den Befehl ohne die Option -v in die Konfigurationsdatei
/etc/rc.local
eintragen. Fortan wird der Tunnel automatisch beim Systemstart angelegt.
6tunnel testen (Ausgabe von Punkt 3 in der Liste)
Ich spare mir den Screenshot für socat. Das funktioniert genauso, nur dass die Option -v alles zeigt, was über den Tunnel rübergeschickt wird. So könnt ihr nun auch eure IPv4-only-Geräte via IPv6 von außen und innen erreichbar machen. Für Dateifreigaben (z.B. Windows-Laufwerke) ist diese Form der Freigabe nicht geeignet, da diese Protokolle unverschlüsselt und damit völlig unsicher sind. Hier bitte entweder auf eine VPN-Lösung oder eine Cloud-Software (z.B. OwnCloud) zurückgreifen. VPN läuft auf Rechnern mit Linux, Windows oder OS X ohne Probleme. Die Cloud Software OwnCloud hat sich mit Version 8.1 dazu entschieden, den Server-Support für Windows einzustellen. Der OwnCloud-Client funktioniert aber nach wie vor auf allen gängigen Betriebssystemen.
Copyright © 2014-2017
Das Werk „FTTH von Extern erreichbar machen“ von Ulrich Ivens ist lizenziert unter einer Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen 4.0 International Lizenz.
Changelog:
- 2014-12-28 Version 1.0: Erste Version des Dokumentes mit IPv6 und Namensauflösung, Lizenz CC BY-NC-SA
- 2014-12-29 Version 1.1: Sektion zum Portmapping hinzugefügt. Changelog und Copyright zur Sektion Impressum hinzugefügt
- 2014-12-29 Version 1.2: Test über Firefox 4or6-Erweiterung hinzugefügt. Hinweis zur Sicherheitsmeldung bei https aufgenommen.
- 2014-12-29 Version 1.3: Kontaktmöglichkeit Twitter hinzugefügt. Anpassung der Darstellung (Seitenbreite).
- 2015-01-03 Version 1.4: Sektion zum internen Portmapping hinzugefügt (interne IPv4 Geräte via 6tunnel oder socat verfügbar machen)
- 2015-06-12 Version 1.4a: Umzug zu WordPress
- 2015-06-29 Version 1.5: Details zu den Credits im Bereich Portmapping angepasst, Hervorhebung der Befehle die auf der bash oder Windows Kommandozeile erfolgen durch den preformatting Tag (bessere Lesbarkeit).
- 2015-08-02 Version 1.6 Änderungen zu OwnCloud im letzten Absatz eingearbeitet.
- 2015-08-10 Version 1.6a: Keine inhaltlichen Änderungen, technische Arbeiten am Quellcode (Bildquellen und -unterschriften)
- 2017-02-11 Version 1.7: Let’s Encrypt ergänzt, zur sicheren und signierten Nutzung von https Verbindungen; Hinweis auf Reverse-Proxy beim internen Portmapping
- 2017-02-20 Version 1.7a: Keine inhaltlichen Änderungen, Rechtschreibfehler korrigiert (falscher Link)
- 2017-12-22 Version 2.0: Überarbeitung IPv6 beim Mobilfunk, Tunnellösungen eingefügt, 4or6 gegen IPvfoo ersetzt, Lizenzänderung hin zu CC BY-SA
59 comments on “Glasfaser”