Home » Netzwerk & Sicherheit » Dienste hinter DS Lite verfügbar machen mit Wireguard

Dienste hinter DS Lite verfügbar machen mit Wireguard

In diesem Tutorial findet ihr eine Schritt-für-Schritt-Tutorial, wie ihr mit Wireguard und Nginx verschiedene Dienste wie einen Webserver, eine Nextcloud, oder auch simple FTP und sFTP Server hinter einem DS Lite Anschluss für das Internet verfügbar machen könnt. Dabei wird der externe VPN-Server als Mittler genutzt, um die Dienste zugänglich zu machen.

Was ist das Problem bei einem DS-lite Anschluss

Ein DS-Lite-Anschluss (Dual-Stack Lite) ist eine Technologie, die von Internet Service Providern (ISPs) verwendet wird, um die Übergangsphase vom alten IPv4-Protokoll zum neuen IPv6-Protokoll zu erleichtern. Diese Technologie wird vor allem bei privaten Internetanschlüssen eingesetzt, bei denen die ISPs den IPv4-Adressmangel umgehen müssen.

Wie funktioniert DS-Lite?

Bei DS-Lite erhaltetihr eine native IPv6-Adresse für euer Heimnetzwerk. Eure Geräte kommunizieren primär über IPv6. Da das Internet jedoch noch nicht vollständig auf IPv6 umgestellt ist und viele Dienste noch auf IPv4 basieren, benötigen eure Geräte weiterhin Zugriff auf IPv4. Dafür wird bei DS-Lite ein sogenannter „AFTR“ (Address Family Transition Router) verwendet. Dieser Router übernimmt die Übersetzung und leitet den IPv4-Verkehr über eine gemeinsame IPv4-Adresse, die von mehreren Kunden gleichzeitig genutzt wird (Carrier-Grade NAT, CGNAT).

Problem: Keine öffentliche IPv4-Adresse

Das Hauptproblem bei DS-Lite ist, dass ihr keine eigene, öffentliche IPv4-Adresse erhaltet. Stattdessen teilt ihr euch eine IPv4-Adresse mit vielen anderen Kunden eures ISPs. Dies führt zu folgenden Einschränkungen:

  1. Kein direktes Port Forwarding:
    Da ihr keine eigene öffentliche IPv4-Adresse habt, könnt ihr keine eingehenden Verbindungen direkt zu eurem Heimnetzwerk weiterleiten. Das bedeutet, dass ihr keine Server oder Dienste (wie einen Webserver, FTP-Server oder VPN-Server) direkt im Internet verfügbar machen könnt.
  2. Schwierigkeiten bei der Erreichbarkeit:
    Da die IPv4-Adresse, die ihr nutzt, nicht exklusiv ist, können keine eingehenden Verbindungen direkt zu eurem Anschluss geroutet werden. Wenn ihr beispielsweise einen Webserver betreiben möchtet, kann niemand von außen auf diesen zugreifen, weil euer Router keinen direkten IPv4-Zugang hat.
  3. CGNAT (Carrier-Grade NAT):
    Bei DS-Lite befindet sich dein Heimnetzwerk hinter einem CGNAT, der von eurem ISP verwaltet wird. CGNAT ist eine große NAT-Instanz, die den IPv4-Verkehr von vielen Kunden gleichzeitig verarbeitet. Dies bedeutet, dass alle eingehenden Verbindungen an dieselbe IPv4-Adresse gehen, und es gibt keinen Mechanismus, um sie an euren spezifischen Router weiterzuleiten.

Warum sind Dienste im Internet nicht aussetzbar?

Wenn ihr einen Dienst (wie einen Webserver oder eine VPN-Verbindung) öffentlich zugänglich machen möchtet, muss dieser Dienst über das Internet erreichbar sein. Dafür benötigt ihr eine öffentliche IP-Adresse, die speziell eurem Router zugewiesen ist. Bei DS-Lite ist dies nicht der Fall, da:

  • Nur IPv6 öffentlich erreichbar: euer Heimnetzwerk erhält eine öffentlich erreichbare IPv6-Adresse, aber viele Dienste und Nutzer im Internet verwenden noch IPv4 und können daher nicht ohne Weiteres auf euren Dienst zugreifen.
  • Eingehende IPv4-Verbindungen sind blockiert: Ohne eine öffentliche IPv4-Adresse können keine Verbindungen von außen über IPv4 zu eurem Netzwerk hergestellt werden. Selbst wenn ein IPv6-Dienst öffentlich erreichbar ist, könnten Nutzer, die nur über IPv4 erreichbar sind, diesen Dienst nicht nutzen.

Wir schauen uns jetzt eine Möglichkeit an, wie ihr trotz DS-Lite Anschluss, eure Dienste dem Internet zugänglich machen könnt!

Vorausetzungen um Dienste hinter DS-Lite Anschlüssen verfügbar zu machen

  1. VPS mit öffentlicher IPv4-Adresse: Ein externer Server mit einer öffentlichen IPv4-Adresse (z.B. bei Hetzner, Ionos, DigitalOcean).
  2. Portfreigabe auf dem VPS: Port 51820 muss in den Firewalleinstellungen des Servers freigegeben werden.
  3. Dienst im Heimnetzwerk: Zum Beispiel ein Webserver oder Nextcloud, der über das lokale Netzwerk läuft. Ein ein SSL Zertifikat ist auf dem lokalen Server nicht notwendig.

Schritt 1: Wireguard installeren auf dem öffentlichen Server installieren

Leider können wir WG-Easy aus diesem Tutorial nicht verwenden, da es aus irgendeinem Grund einfach nicht funktionieren will, die Clients vom Host aus zu erreichen, deshalb wählen wir eine andere Installationsmethode, die aber genau so einfach ist. Wir installieren uns den Wireguard Road-Warrior Installer, der uns Wireguard komplett installiert, und auch in der Lage ist, Clients einzurichten. Den Link zum Road Warrior Installer gibts es hier.

Erstellt euch einen Ordner für den Download des Scripts und wechselt in den Ordner:

mkdir ~/wireguard-installer
cd wireguard-installer

Ladet euch den Installer herrunter mit:

wget https://git.io/wireguard -O wireguard-install.sh

Ausführen könnt ihr den Installer mit

bash wireguad-install.sh

Die Installation startet, und ihr werdet nach der IP-Adresse gefragt, nehmt natürlich die öffentliche IP Adresse des Servers, meisstens ist das die 1:

Als nächstes werdet ihr nach dem Port gefragt, bestätigt einfach mit Enter um den Standard Wireguard Port zu verwenden 51820:

Als nächstes könnt ihr bereits einen ersten Client einrichten, hier könnt ihr bereits eine Konfiguration für einen Dienst eurer Wahl erstellen und danach den DNS Server für die Namensauflösung festlegen. Adguard ist hier eine gute Wahl:

Der Wireguard Server wird installiert, und ihr erhaltet zugleich den QR Code für euren ersten Client (z.B für ein Smartphone) und auch eine Konfigurationsdatei, welche im angebenen Pfad gespeichert wird:

Weitere WireGuard-Clients konfigurieren

Führt den Script einfach erneut aus, und wählt Add Client:

Schritt 2: Heimserver (Dienst) mit WireGuard verbinden

WireGuard auf dem Heimserver installieren

Zuerst müsst ihr natürlich wireguard auch auf dem Webserver installieren:

Für Debian/Ubuntu:

sudo apt update && sudo apt install wireguard -y

Konfigurationsdatei einrichten

Erstelle eine neue Konfigurationsdatei auf dem Heimserver, die könnt ihr je nach Dienst bennen wie ihr wollt:

sudo nano /etc/wireguard/webserver.conf

Füge den Inhalt der Konfigurationsdatei ein, den ihr vom Wireguard Installer erhalten habt.

Beispiel:

[Interface] PrivateKey = <Dein_Privatkey> 
Address = 10.0.8.2/24 

[Peer] 
PublicKey = <Öffentlicher_Schlüssel_von_wg-easy> 
Endpoint = <DEINE_SERVER_IP>:51820 
AllowedIPs = 0.0.0.0/0, ::/0 
PersistentKeepalive = 25

Speichert die Datei mit strg+o und beendet mit strg+x

WireGuard starten

Aktiviert und startet den WireGuard-Tunnel. Es reicht wenn ihr den Anfang der Konfigurationsdatei angebt:

sudo wg-quick up webserver 

sudo systemctl enable wg-quick@example-webserver

Teste die Verbindung, indem ihr z.B. den externen Server anpingt:

ping 10.0.8.1

Habt ihr einen Ping, seid ihr erfolgreich verbunden:

Schritt 3: Nginx als Reverse Proxy auf dem VPN-Server einrichten

Nginx installieren (falls noch nicht geschehen):

sudo apt install nginx -y

Nginx konfigurieren:

Erstelle eine neue Nginx-Konfigurationsdatei für deinen Dienst: sudo nano /etc/nginx/sites-available/dein-dienst

Beispielkonfiguration für einen HTTPS-Proxy:

server {
    listen 80;
    server_name deine-domain.de;

    location / {
        proxy_pass http://10.0.7.2:80;  # IP des Dienstes im Heimnetzwerk
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Ersetzt deine-domain.de durch euren Domainnamen und die IP-Adresse 10.0.7.2 durch die IP des Heimservers im VPN-Netzwerk. Diese findet ihr auch in der Client-Konfigurationsdatei.

Nginx aktivieren:

Aktiviert die neue Konfiguration:

sudo ln -s /etc/nginx/sites-available/dein-dienst /etc/nginx/sites-enabled/

Testet die Konfiguration:

sudo nginx -t

Starte Nginx neu:

sudo systemctl restart nginx

Jetzt installieren wir uns noch Certbot, für die Anforderung, und Verwaltung der SSL Zertifikate:

sudo apt install certbot python3-certbot-nginx -y

Danach beantrag ihr ein Zertifikat mit dem Befehl:

sudo certbot --nginx -d deine-domain.de

Ersetzt deine-domain.ch mit eurer tatsächlichen Domain!

Schritt 4: Firewall-Regeln konfigurieren (optional)

Falls erforderlich, könnt ihr mit iptables sicherstellen, dass der Verkehr zwisschen mehrere Clients (also einem Webserver, und einem weiteren Dienst auf einem anderen Server im Wireguard Netzwerk) nicht möglich ist, das geht mit folgendem Befehl:

iptables -I FORWARD -i wg0 -o wg0 -j REJECT

Das stellt sicher, dass der Traffic vom zwischen euren Servern unterbunden wird, und die Dienste somit zueinander isoliert sind.

Firewall-Regeln sichern:

Installiert zuerst die das Programm um iptable Konfigurationen zu sichern:

sudo apt-get install iptables-persistent

und speichert die Regel mit:

sudo netfilter-persistent save

Damit bleiben die hinzugefügten Regeln auch nach einem Neustart aktiv.

Schritt 5: Zugriff testen

Dienst aufrufen

Ruft von einem externen Gerät die Domain auf, die auf den Nginx-Server zeigt (https://deine-domain.de). Der Verkehr sollte nun über den Wireguard-Server an den Heimdienst weitergeleitet werden.

Fehlerbehebung

Wenn der Zugriff nicht funktioniert, überprüft die WireGuard-Verbindung (sudo wg show), oder die Nginx-Logs (/var/log/nginx/error.log), und eure Firewall-Einstellungen.

Fazit

Mit diesem Setup hast du einen Dienst, der hinter einem DS-Lite-Anschluss läuft, über das Internet verfügbar gemacht. Das externe VPS fungiert als Brücke und leitet den Verkehr sicher über WireGuard und Nginx an dein Heimnetzwerk weiter.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert