Unitymedia: Zugriff auf QNAP via vServer

Diese Anleitung soll veranschaulichen wie man mit relativ geringem Aufwand und Investment ein QNAP auch bei einem Unitymedia-Anschluss aus dem Internet erreichbar macht.
Wenn Ihr Euch fragt warum noch eine Anleitung, es gibt doch schon einige im Netz - ja das ist richtig! Von diesen hat aber keine 100% bei mir funktioniert, weswegen ich dieses jetzt gerne nochmal zusammenfassen möchte.


Leider geht das ganze nicht ganz ohne Kosten, aber diese halten sich wirklich in Grenzen. Denn was auf jeden Fall benötigt wird ist ein (virtueller) Server im Internet mit fester IPv4 Adresse und vorhandenem IPv6 Internetzugang. Viele Anleitungen verweisen auch auf den Dienst feste-ip.net, hier ist aber nicht sicher ob und welche Daten gegebenenfalls mitgelesen werden. Daher habe ich davon Abstand genommen und kann mit dem vServer selbst über die Datenweiterleitung bestimmen. Durch den eingesetzten nginx-reverse Proxy kann ich so auch noch einen weiteren Schutz für das NAS aufbauen.


Am Ende ist der Zugriff auf das NAS wie folgt:




Vorraussetzungen


- (virtueller) Server im Internet (z.B. https://www.netcup.de/vserver/vps.php) mit fester IPv4 Adresse sowie Unterstützung von IPv6
- Eigene Domain mit DNS Eintrag auf IPv4 und IPv6-Adresse des Servers (als Beispiel nehme ich hier testdomain.de)
- Router mit der Möglichkeit der Portfreischaltung für IPv6 (z.B. FritzBox 6490 Cable)



Installation des virtuellen Server


Der von mir genutzte virtuelle Server wurde mit einem Basis-Image bereitgestellt. Dieses habe ich aber im Administrations-Cockpit durch eine Ubuntu 16.04 Server-Installation ersetzt. Auf die SSH Konfiguration (Key-Authentifizierung) sowie zusätzliche Sicherung durch MFA möchte ich an dieser Stelle nicht im Detail eingehen, da es dazu viele gute Links gibt. Das Vorgehen ist wie folgt:



Anpassen der Netzwerkeinstellungen im vServer


Um mit dem QNAP kommunizieren zu können und auch via IPv6 erreichbar zu sein muss im vServer auch noch eine feste IPv6-Adresse vergeben werden, damit dieser darüber kommunizieren kann und erreichbar ist.


Die aktuellen Netzwerkeinstellungen und IPAdressen können im Admin-Cockpit eingesehen werden:


Meine /etc/network/inferaces sieht dafür wie folgt aus:

Shell-Script
  1. # This file describes the network interfaces available on your system# and how to activate them. For more information, see interfaces(5).source /etc/network/interfaces.d/*# The loopback network interfaceauto loiface lo inet loopbackiface lo inet6 loopback# The primary network interfaceauto ens3iface ens3 inet static address 94.16.XXX.XXX #IPv4-Adresse des vServer netmask 255.255.252.0 gateway 94.16.XXX.XXX #GW des Server-Anbieters dns-nameservers 46.38.225.XXX 46.38.252.XXX #DNS Server des Server-Anietersiface ens3 inet6 static address 2a03:4000:XXXX:XXXX:0000:0000:0000:0002 #siehe Kommentar im Blog netmask 64 gateway fe80::1 #IPv6-GW des Server-Anbieters



Die IPv6-Adresse kann im Suffix beliebig gewählt werden, das Präfix gibt der Anbieter vor (steht im Admin-Cockpit)


Präfix des Anbieters: 2a03:4000:XXXX:XXXX:
Eigenes Suffix: 0000:0000:0000:0002


Wichtig: Anschließend muss der Server heruntergefahren und wieder neu gestartet werden damit die Änderungen wirksam werden!




DNS Einstellungen


Damit der Server auch via Domain erreichbar ist müssen in den DNS-Einstellungen des Anbieters (bzw. bei dem Anbieter Eurer Domain) folgende Einträge ergänzt bzw. angepasst werden:

  • Anlegen/Ändern des A-Eintrages der Domain mit Verweis auf die feste IPv4-Adresse
  • Anlegen/Ändern des AAAA-Eintrages der Domain mit Verweis auf die feste IPv6-Adresse

Alternativ kann auch eine Subdomain für den VServer eingerichtet werden. Bei mir sieht dieses wie folgt aus:




Ermitteln der IPv6-Adresse und Portfreischaltungen

Da der Zugriff auf das QNAP bei Unity-Media nur noch via IPv6 erfolgen kann müssen wir dazu zum einen die IP-Adresse des QNAP ermitteln, zum anderen die Weiterleitung in der Fritzbox ermöglichen.
Voraussetzung dafür ist, dass auch im QNAP IPv6 aktiviert ist. Dieses kann über Systemsteuerung -> Netzwerk und virtueller Switch -> Schnittstellen je Adapter aktivieren.




Dort finden wir auch die IPv6-Adresse unseres QNAP. Wir benötigen die letzten vier Elemente (fe80::265e:XXXX:XXXX:b05).




Damit haben wir schonmal den zweiten Teil der IP-v6-Adresse, den ersten ermitteln wir über unseren Router. Bei der FritzBox ist dieser unter Internet -> Online-Monitor.
Wichtig: dieses Präfix kann sich durch UnityMedia ändern - bei mir ist dieses "noch" nicht passiert.




Aus diesem Präfix 2a02:908:XXXX:XXXX sowie unserem oben ermittelten Suffix haben wir dann die finale IPv6-Adresse unseres QNAP. Diese benötigen wir dann für die proxy_pass Direktive in den nächsten Schritten.
[2a02:908:XXXX:XXXX:265e:XXXX:XXXX:b05]

Damit die Anfragen via IPV6 aber auch am QNAP ankommen muss eine entsprechende Freigabe im Router eingerichtet werden. In der FritzBox passiert dieses unter Internet -> Freigaben -> IPv6. Hier wählt Ihr als Gerät Euer QNAP aus und fügt eine Portfreigabe für Port 443 (SSL) hinzu. Das NAS sollte entsprechend für den Zugriff via SSL konfiguriert sein.






Installation und Konfiguration des Proxy


Als Proxy-Server nutze ich nginx. Dieser ist klein, robust und für diese Zwecke mehr als ausreichend. Auch für die Installation von nginx gibt es diverse Anleitungen, habe ich mich aber an dieser hier orientiert: https://www.digitalocean.com/c…all-nginx-on-ubuntu-16-04. Wichtig ist, dass auch die HTTPS-Verbindungen zum nginx ermöglicht werden:
sudo ufw allow 'Nginx HTTPS'


Die Konfiguration des nginx-Proxy wird letztendlich über zwei Dateien gesteuert, die mit Euren Werten angepasst werden müssen:


/etc/nginx/nginx.conf

Code
  1. [...]server_names_hash_bucket_size 64; # diese Zeile muss aktiviert bzw. der Wert auf 64 geändert werden[...]


/etc/nginx/sites-available/default
In dieser Datei wird die eigentliche Konfiguration des Proxy vorgenommen. Es passiert hier noch alles im HTTP-Server. Durch die Installation eines SSL-Zertifikates wird die Konfiguration dann nochmal angepasst (siehe nächster Schritt)

Shell-Script
  1. # Default server configuration#server { listen 80 default_server; listen [::]:80 default_server; server_name testdomain.de; #hier Eure Domain eintragen root /var/www/html; location / { proxy_pass_header Authorization; proxy_pass https://[2a02:908:XXXX:XXXX:265e:XXXX:XXXX:b05]; #Dieses ist die IP-v6-Adresse zu Eurem NAS proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_buffering off; client_max_body_size 0; proxy_read_timeout 36000s; proxy_redirect off; }}


Nach den Änderungen muss die Konfiguration getestet und der Server neu geladen werden


sudo nginx -t
sudo systemctl reload nginx


Jetzt sollte Euer QNAP via http://testdomain.de erreichbar sein.



Sichern der Verbindung zum Server mit SSL


Um die Kommunikation über den Proxy aber noch sicherer zu machen solltet Ihr Euch die Verbindung mit SSL verschlüsseln. Hierzu empfiehlt sich z.B. Let's Encrypt (https://letsencrypt.org/)


Eine Anleitung zum Installieren der Zertifikate mit nginx findet Ihr hier: https://www.digitalocean.com/c…s-encrypt-on-ubuntu-16-04


Am Ende sollte die nginx-Konfiguration (/etc/nginx/sites-available/default) dann wie folgt aussehen:


Server neustarten - siehe oben - und fertig :-)


Jetzt sollte Euer QNAP auch via https://testdomain.de erreichbar sein.




Sollten Fragen aufkommen oder Ihr weitere Anmerkungen haben, so könnt Ihr dieses gerne in den Kommentaren hinterlassen. Ich versuche diese Anleitung entsprechend zu verbessern.