Homelab trotz DS-Lite
Tags: linux wireguard DS-Lite homelab
Inhaltsverzeichnis
Homelab trotz DS-Lite Problem? Kein Problem!
Vorbereitungen
Zuerst muss das System aktualisiert und das WireGuard-Paket installiert werden. Das geschieht mit dem folgenden Befehl:
apt update && apt upgrade -y && apt install wireguard iptables
Um WireGuard erfolgreich zu nutzen und sicherzustellen, dass unsere Pakete das Ziel erreichen, müssen wir die Weiterleitung mit dem folgenden Befehl einrichten.
sed -i 's/^#\s*net.ipv4.ip_forward\s*=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf
Nun aktivieren wir die Weiterleitung von IPv4-Paketen.
systctl -p
Das Firewall-Skript muss nun unter /etc/wireguard/postup abgelegt werden. Achte darauf, das Skript an deine spezifischen Bedürfnisse anzupassen, indem du beispielsweise Ports und die Server-IP-Adresse entsprechend deiner Gegebenheiten änderst.
#!/bin/bash
IPTABLES="/usr/sbin/iptables"
# Firewall Regeln zurücksetzen
${IPTABLES} -F
${IPTABLES} -X
${IPTABLES} -t nat -F
${IPTABLES} -t nat -X
# Setze Default Policy für Filter Table
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P OUTPUT ACCEPT
# Bestehende Verbindungen erlauben
${IPTABLES} -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
${IPTABLES} -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Loopback Schnittstelle erlauben
${IPTABLES} -A INPUT -i lo -j ACCEPT
# Erlaube ICMP
${IPTABLES} -A INPUT -p icmp -j ACCEPT
# Erlaube SSH
${IPTABLES} -A INPUT -p tcp --dport 22 -j ACCEPT
# WireGuard (Port 51820) erlauben
${IPTABLES} -A INPUT -p udp --dport 51820 -j ACCEPT
# Teamspeak 3 von Public weiterleiten
${IPTABLES} -t nat -A PREROUTING -i ens3 -p tcp --dport 9987 -j DNAT --to-destination 172.30.100.200
${IPTABLES} -t nat -A PREROUTING -i ens3 -p udp --dport 9987 -j DNAT --to-destination 172.30.100.200
# Nginx Proxy Manager von Public (z.B. Homeassistant) weiterleiten
${IPTABLES} -t nat -A PREROUTING -i ens3 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 172.30.100.10
# Icmp innerhalb des VPN Netzwerkes erlauben
${IPTABLES} -A FORWARD -i wg0 -o wg0 -p icmp -j ACCEPT
# DNS Anfragen im VPN Netzwerk erlauben
${IPTABLES} -A FORWARD -i wg0 -o wg0 -p udp --dport 53 -j ACCEPT
${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 53 -j ACCEPT
# SSH innerhalb des VPN Netzwerkes erlauben
${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 22 -j ACCEPT
# Nginx Proxy Manager Regeln innerhalb des VPN Netzwerkes erlauben
${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 80 -j ACCEPT
${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 443 -j ACCEPT
# Nginx Proxy Manager Regeln von Public erlauben
${IPTABLES} -A FORWARD -i ens3 -o wg0 -p tcp --dport 80 -j ACCEPT
${IPTABLES} -A FORWARD -i ens3 -o wg0 -p tcp --dport 443 -j ACCEPT
# Teamspeak 3 Regeln von Public erlauben
${IPTABLES} -A FORWARD -i ens3 -o wg0 -p tcp --dport 9987 -j ACCEPT
${IPTABLES} -A FORWARD -i ens3 -o wg0 -p udp --dport 9987 -j ACCEPT
# Optional wenn du alles über die Wireguard verbindung schickst
#${IPTABLES} -A FORWARD -i wg0 -o ens3 -j ACCEPT
Die gleichen Regeln müssen natürlich auch deaktiviert werden, wenn die WireGuard-Schnittstelle heruntergefahren wird. Das entsprechende Skript dafür heißt postdown.
#!/bin/bash
IPTABLES="/usr/sbin/iptables"
# WireGuard (Port 51820) löschen
${IPTABLES} -D INPUT -p udp --dport 51820 -j ACCEPT
# Teamspeak 3 von Public weiterleitung entfernen
${IPTABLES} -t nat -D PREROUTING -i ens3 -p tcp --dport 9987 -j DNAT --to-destination 172.30.100.200
${IPTABLES} -t nat -D PREROUTING -i ens3 -p udp --dport 9987 -j DNAT --to-destination 172.30.100.200
# Nginx Proxy Manager von Public (z.B. Homeassistant) weiterleitung entfernen
${IPTABLES} -t nat -D PREROUTING -i ens3 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 172.30.100.10
# Icmp innerhalb des VPN Netzwerkes löschen
${IPTABLES} -D FORWARD -i wg0 -o wg0 -p icmp -j ACCEPT
# DNS Anfragen im VPN Netzwerk erlauben
${IPTABLES} -D FORWARD -i wg0 -o wg0 -p udp --dport 53 -j ACCEPT
${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 53 -j ACCEPT
# SSH innerhalb des VPN Netzwerkes löschen
${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 22 -j ACCEPT
# Nginx Proxy Manager Regeln innerhalb des VPN Netzwerkes löschen
${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 80 -j ACCEPT
${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 443 -j ACCEPT
# Nginx Proxy Manager Regeln von Public löschen
${IPTABLES} -D FORWARD -i ens3 -o wg0 -p tcp --dport 80 -j ACCEPT
${IPTABLES} -D FORWARD -i ens3 -o wg0 -p tcp --dport 443 -j ACCEPT
# Teamspeak 3 Regeln von Public löschen
${IPTABLES} -D FORWARD -i ens3 -o wg0 -p tcp --dport 9987 -j ACCEPT
${IPTABLES} -D FORWARD -i ens3 -o wg0 -p udp --dport 9987 -j ACCEPT
# Optional wenn du alles über die Wireguard verbindung schickst löschen
#${IPTABLES} -D FORWARD -i wg0 -o ens3 -j ACCEPT
Des Weiteren muss du die Datei brechtigungen noch ändern, damit es ausführbar ist, dazu einfach folgenden Befehl ausführen.
chmod 744 post*
Es ist ebenfalls wichtig, die Firewall-Regeln deines zu Hause eingesetzten Routers (in meinem Fall ein Unifi Cloud Gateway Ultra) anzupassen, falls die Verbindung blockiert wird. Ein Beispiel dazu findest du in diesem YouTube Video.
Wireguard konfigurationen
Wireguard Keys erstellen
Um den WireGuard-Server zum Laufen zu bringen, werden sowohl ein privater als auch ein öffentlicher Schlüssel benötigt. Du kannst diese mit dem folgenden Befehl erstellen:
- Der erste Teil des Befehls generiert den privaten Schlüssel.
- Der zweite Teil sorgt dafür, dass der private Schlüssel sowohl in einer Datei gespeichert als auch in die Standardausgabe umgeleitet wird.
- Der dritte Teil des Befehls nutzt den privaten Schlüssel, um den öffentlichen Schlüssel zu generieren und in einer Datei zu speichern.
wg genkey | tee server_private.key | wg pubkey > server_public.key
Server konfiguration
Unter /etc/wireguard/ wird die Datei wg0.conf erstellt, die folgenden Inhalt hat. Den Inhalt musst du natürlich noch an deine Gegebenheiten anpassen.
[Interface]
PrivateKey = <Server-Private-Key> # Der private Schlüssel des Servers
Address = 172.27.31.1/24 # Die IP-Adresse, die dem Server im VPN-Netzwerk zugewiesen wird
ListenPort = 51820 # Der Port, auf dem WireGuard lauscht
# IPtables-Regeln für HTTP- und HTTPS-Verkehr
PostUp = /etc/wireguard/postup # Skript, das nach dem Hochfahren der Schnittstelle ausgeführt wird
PostDown = /etc/wireguard/postdown # Skript, das nach dem Herunterfahren der Schnittstelle ausgeführt wird
##############################################################
############ Konfiguration der Clients ##############
##############################################################
# Client-UCG
[Peer]
PublicKey = # Öffentlicher Schlüssel des Clients (ersetze mit dem tatsächlichen Public Key)
AllowedIPs = 172.27.31.2/32, 172.30.100.0/24 # Die IP-Adresse des Clients im VPN und ggf. weitere zulässige IPs
# Client Mac-Mini-Philipp
[Peer]
PublicKey = # Öffentlicher Schlüssel des Clients (ersetze mit dem tatsächlichen Public Key)
AllowedIPs = 172.27.31.10/32 # Die IP-Adresse des Clients, die du dir merken musst
Client konfiguration
Das gleiche gilt für den Client: Auch hier musst du die Konfiguration an deine spezifischen Gegebenheiten anpassen.
[Interface]
PrivateKey = # Der private Schlüssel des Clients (bereits in der Konfiguration festgelegt)
Address = # Die IP-Adresse des Clients im VPN-Netzwerk (wähle eine Adresse aus dem VPN-Subnetz)
DNS = # Die IP-Adresse des DNS-Servers, idealerweise der lokale DNS-Server bei dir zu Hause
[Peer]
PublicKey = # Der öffentliche Schlüssel des VPN-Servers (ersetze mit dem tatsächlichen Public Key des Servers)
AllowedIPs = # Die Netzwerke, die über das VPN geroutet werden sollen (z.B. 0.0.0.0/0 für alles oder spezifische Subnetze)
Endpoint = Dein-Server:51820 # Die öffentliche IP-Adresse des VPN-Servers und der Port, auf dem WireGuard hört
PersistentKeepalive = 25 # Intervall (in Sekunden) für Keepalive-Nachrichten, um die Verbindung aktiv zu halten
Verbindung Testen
Nun kannst du eine Verbindung von deinem Client zu deinem Server herstellen. Wenn alles korrekt eingerichtet ist, sollte die Verbindung problemlos hergestellt werden, sodass du jederzeit auf dein Homelab zugreifen kannst. Bitte Beachte das du bei dir zu Hause auch dafür sorgen musst, das deine Firewall Regeeln passen, da sonst natürlich keine Verbindung möglich ist. Ebenso musst du alles was über DNS erreichbar ist auf den Server umleiten, welcher deine Verbindung zu dir nach Hause herstellt. Also alles was ööfentlich erreichbar ist, muss auch auf den Server zeigen.
Hinweis zu Affiliate-Links
Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.
Hier der Link:
Transparenz ist mir wichtig:
- Ich möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt.
- Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen!