Self-Hosting trotz CG-NAT für Dummies

Jetzt klappt alles! Um mein NAS nun von außerhalb erreichbar zu machen, habe ich folgendes gemacht:

Schritt 1:
Es musste ein Wireguard-Tunnel zwischen VPS und meiner Fritzbox erstellt werden, dafür habe ich folgende Konfigurationen erstellt:

Fritzbox: fritz_wg0.conf
[Interface]
PrivateKey = <Zufällig generierter Key>
ListenPort = 51820
Address = 192.168.178.1/24
DNS = 192.168.178.1
DNS = fritz.box

[Peer]
PublicKey = <Zufällig generierter Key>
PresharedKey = <Zufällig generierter Key (muss identisch mit vps_wg0.conf sein)>
AllowedIPs = 172.31.0.0/24
Endpoint = <öffentliche IP(v4 oder v6) des VPS>:51820
PersistentKeepalive = 25
VPS: vps_wg0.conf
[Interface]
PrivateKey = <Zufällig generierter Key>
Address = 172.31.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <Zufällig generierter Key>
PresharedKey = <Zufällig generierter Key (muss identisch mit fritz_wg0.conf sein)>
AllowedIPs = 192.168.178.0/24, 172.31.0.0/24
PersistentKeepalive = 25

Beim Einrichten des Tunnels hat mir dieses Tutorial als kleine Orientierung geholfen: https://www.youtube.com/watch?v=StTTfP9aB6Q


Schritt 2:
Skript auf dem VPS erstellen, um Anfragen, die auf der öffentlichen IP des VPS eingehen, durch den VPN-Tunnel ins Heimnetzwerk zum gewünschten Zielgerät zu leiten.

Skript
#!/bin/bash

# Variablen
NAS_IP="192.168.178.63"
VPS_WIREGUARD_IP="172.31.0.1"
INTERFACE="ens6"
WIREGUARD_INTERFACE="wg0"
TCP_PORTS="5555 6666 4444"
UDP_PORTS="3333 8888 7777"

# Erlaube IPv4 Forwards
sed -i 's/#net\.ipv4\.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf && sysctl -p

# IPTables bereinigen
iptables -t nat -F
iptables -F

# Erstelle IPTables INPUT Regeln
iptables -A INPUT -i $INTERFACE -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $INTERFACE -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP

# Erstelle IPTables NAT Regeln für TCP und UDP
for PORT in $TCP_PORTS $UDP_PORTS; do
    PROTOCOL="tcp"
    if [[ $UDP_PORTS =~ (^| )$PORT($| ) ]]; then
        PROTOCOL="udp"
    fi
    iptables -t nat -A PREROUTING -i $INTERFACE -p $PROTOCOL --dport $PORT -j DNAT --to-destination $NAS_IP:$PORT
    iptables -t nat -A POSTROUTING -o $WIREGUARD_INTERFACE -d $NAS_IP -p $PROTOCOL --dport $PORT -j SNAT --to-source $V>
done

# Erstelle Forward Regeln für TCP und UDP
iptables -P FORWARD DROP
for PORT in $TCP_PORTS $UDP_PORTS; do
    iptables -A FORWARD -i $INTERFACE -o $WIREGUARD_INTERFACE -p tcp --dport $PORT -j ACCEPT
    iptables -A FORWARD -i $INTERFACE -o $WIREGUARD_INTERFACE -p udp --dport $PORT -j ACCEPT
done

# Bereits laufende Verbindungen werden nicht von Firewall blockiert
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Zu beachten war hierbei noch (für mich), dass über die Web-GUI des Anbieters die Ports aus dem Skript in der Firewall geöffnet werden.

Und auch hier hat mir wieder ein Tutorial-Vorschlag aus dem Thread als Anhaltspunkt weitergeholfen: https://www.youtube.com/watch?v=ZDWhFmMLSMM

1 „Gefällt mir“