Das ist echt ein cooler Ansatz! Die Public-IPv6 Adresse holst du dir dann vom My!Fritz-Service?
Genau. Der Vorteil dabei ist, dass weder IP-Routing noch Forwarding oder sonstige Netzwerkkonfigurationen auf dem VPS benötigt werden und auch kein WireGuard erforderlich ist. Die beiden Socat-Prozesse leiten die Daten einfach transparent weiter.
Hier mein Beispiel:
Angenommen die Fritzbox ist unter za3nsxxxxxxxxxxx.myfritz.net per IPv6 und der VPS Server unter vpn.example.com per IPv4 und IPv6 erreichbar, dann erstelle ich in der Fritzbox einen WG-Zugang und lade die wg_config.conf herunter, weil wir dort den Endpoint vor der Verwendung auf einem Client anpassen müssen (einfaches scannen des QR-Codes geht leider hierbei nicht mehr):
Beispiel aus einer wg_config.conf, wie sie die Fritzbox für einen Client erstellt:
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
AllowedIPs = 172.xx.xx.0/23,0.0.0.0/0,fd00:xxxx:xxxx::/64,::/0
Endpoint = za3nsxxxxxxxxxxx.myfritz.net:52455
Dort ändern wir vor der Nutzung auf dem Client den Endpoint zu Endpoint = vpn.example.com:52455.
Das muss man für jede wg_config.conf machen, die die Fritzbox erzeugt. Die Datei importiert man dann auf dem Client (Mobile, Tablet, Notebook etc.)
Dann starte ich einmalig für alle Clients zwei socat Prozesse auf dem VPS - einen für IPv4/IPv6 und einen für IPv6/IPv6:
socat -d -d UDP4-LISTEN:52455,reuseaddr,fork UDP6:za3nsxxxxxxxxxxx.myfritz.net:52455
socat -d -d UDP6-LISTEN:52455,reuseaddr,fork UDP6:za3nsxxxxxxxxxxx.myfritz.net:52455
Ich hab das über ein quick&dirty systemd Service realisiert (geht bestimmt auch eleganter, mir genügt das hier), das startet die Basis-Prozesse beim booten selbst:
/etc/systemd/system/socatwg@.service
[Unit]
Description=Fritzbox WireGuard Port forwarding
After=local-fs.target network.target
[Service]
TimeoutStopSec=2
Type=simple
Restart=always
RestartSec=10
ExecStart=/usr/bin/socat -d -d %i-LISTEN:52455,reuseaddr,fork UDP6:za3nsxxxxxxxxxxx.myfritz.net:52455
[Install]
WantedBy=multi-user.target
Alles anzeigen
Dann noch aktivieren und starten
systemctl daemon-reload
systemctl enable socatwg@UDP4.service socatwg@UDP6.service
systemctl start socatwg@UDP4.service socatwg@UDP6.service
Für jeden Client, der sich verbindet, wird dann automatisch ein eigener socat-Prozess geforked, das können dann auch mehrere gleichzeitig sein.
Anmerkung zum WG Port der Fritzbox:
Den Port 52455 hier im Beispiel muss man an die eigene Fritzbox anpassen. Den entnimmt man der ersten wg_config.conf, ist aber für weitere Clients, die man einrichtet, immer derselbe.
Der Port, den die Fritzbox für WG vergibt (hier im Beispiel die 52455), wird zwar aus dem Bereich 49152 bis 65535 zufällig gewählt, die Fritzbox nutzt beim Erstellen von WG Zugängen aber immer wieder den gleichen Port - irgendwo merkt sich die Box das wohl einmalig.