Infrastruktur

Proxmox-Dienste hinter CGNAT erreichbar machen: VPS-Gateway + WireGuard + socat

Wenn der Provider Ihnen eine IP aus 100.64.0.0/10 zugeteilt hat und Sie keinen einzigen Port mehr öffnen können. Vergleich von 5 Umgehungsstrategien, warum Cloudflare Tunnel keine souveräne Option ist, und Schritt für Schritt die Umsetzung mit VPS + WireGuard + socat und Ende-zu-Ende-Verschlüsselung.

Orange leuchtender Tunnel, der eine virtuelle Betonwand durchquert und zwei entfernte Serverschränke verbindet, Sinnbild für das Umgehen von CGNAT über ein verschlüsseltes VPN
Inhalt (15 Abschnitte)
  1. Warum CGNAT alles blockiert
  2. Fünf Umgehungsstrategien
  3. 1. Cloudflare Tunnel
  4. 2. Umgekehrter SSH-Tunnel
  5. 3. frp (Fast Reverse Proxy)
  6. 4. Site-to-Site-VPN von pfSense zu pfSense
  7. 5. Europäischer VPS + WireGuard + socat (empfohlen)
  8. Die Zielarchitektur im Detail
  9. WireGuard-Konfiguration auf der Client-Seite (Proxmox)
  10. WireGuard-Konfiguration auf der VPS-Seite
  11. socat-Relais auf dem VPS
  12. Öffentlicher Reverse Proxy vor socat
  13. Sicherheit des Tunnels
  14. Grenzen und Fallstricke
  15. Fazit

Sie haben zu Hause einen sauberen Proxmox-Cluster aufgebaut, Nextcloud, Vaultwarden, Ihren Mailserver, Ihr Wiki und Ihr Matomo eingerichtet. Und in dem Moment, in dem Sie Port 443 öffnen wollen, um das alles von außen erreichbar zu machen, stellen Sie fest, dass Ihr Provider Ihnen eine IP-Adresse aus dem Block 100.64.0.0/10 zugeteilt hat. Das ist CGNAT (Carrier-Grade NAT): Ihre scheinbare öffentliche IP teilen Sie mit anderen Kunden, Sie kontrollieren die Adressübersetzung nicht mehr, und jeder Versuch einer Portweiterleitung scheitert still.

Die schlechte Nachricht: Diese Lage kommt immer häufiger vor, besonders bei Mobilfunkanbietern (4G/5G als Festnetzersatz, Anschlüsse auf dem Land) und bei günstigen alternativen Providern. Die gute Nachricht: Es gibt mindestens fünf Wege, diese Sperre zu umgehen, und einer davon bewahrt die Souveränität über den Datenverkehr zu 100 %.

Schema, das zeigt, warum CGNAT die Portweiterleitung blockiert: Mehrere Kunden teilen sich dieselbe öffentliche IP, der Provider leitet eingehende Ports nicht mehr an die Anschlüsse weiter
Unter CGNAT teilen sich mehrere Anschlüsse eine öffentliche IP. Der Provider leitet eingehende Ports nicht mehr an Ihren Router weiter.

Warum CGNAT alles blockiert #

Bei einem klassischen Internetanschluss erhält Ihr Router eine eigene öffentliche IP und übernimmt das NAT zwischen Ihrem privaten LAN und der Außenwelt. Sie können auf dem Router eine Portweiterleitung 443 → 192.168.1.10:443 einrichten, und alles funktioniert. Unter CGNAT ist das anders: Ihr Router erhält eine IP aus dem privaten Block 100.64.0.0/10, und ein vorgelagerter Router beim Provider bündelt mehrere Hundert Anschlüsse hinter einer einzigen öffentlichen IP. Auf diesen Router des Betreibers haben Sie keinen Zugriff.

Die Folge: Ihre ausgehenden Verbindungen funktionieren normal (HTTP, SSH, ausgehendes WireGuard). Aber keine eingehende Verbindung aus dem Internet erreicht Ihr LAN: Der Provider weiß nicht, an welchen Kunden er das TCP-SYN-Paket auf Port 443 schicken soll.

Fünf Umgehungsstrategien #

1. Cloudflare Tunnel #

Die einfachste Konfiguration: Den Daemon cloudflared auf dem internen Host installieren, er baut einen ausgehenden Tunnel zu Cloudflare auf und macht Ihre Dienste unter einer Cloudflare-Subdomain erreichbar. Null Netzwerkkonfiguration, läuft in 10 Minuten.

2. Umgekehrter SSH-Tunnel #

Die schnellste Methode: ssh -N -R 0.0.0.0:443:127.0.0.1:443 user@mon-vps. Der VPS öffnet seinen Port 443 und leitet den gesamten Verkehr in den SSH-Tunnel. Souverän (Ihr VPS), einfach einzurichten. Die Kehrseite: auf Dauer anfällig, spürbar zusätzliche Latenz, und SSH ist nicht für Webverkehr mit hohem Durchsatz optimiert. Gut zur Fehlersuche oder für gelegentlichen Admin-Zugriff, schlecht für die Produktion.

3. frp (Fast Reverse Proxy) #

Open-Source-Werkzeug in Go, Server-Daemon auf dem VPS + Client im Heimnetz. Beliebige TCP- und UDP-Ports lassen sich freigeben. Leistungsfähiger als SSH-R, einfacher als WireGuard. Nur bedingt souverän (abhängig vom Upstream-Projekt), bleibt eine gute Option für alle, die die Komplexität von WireGuard vermeiden wollen.

4. Site-to-Site-VPN von pfSense zu pfSense #

Ansatz aus der Unternehmenswelt für mehrere Standorte: ein pfSense zu Hause, ein pfSense auf einem VPS, IPsec- oder OpenVPN-Tunnel dazwischen. Sehr robust, verlangt aber zwei eigene pfSense-Maschinen und echtes Netzwerkwissen. Überdimensioniert für ein einzelnes Homelab, ideal, um mehrere Firmenstandorte zu verbinden.

5. Europäischer VPS + WireGuard + socat (empfohlen) #

Der ausgewogenste Ansatz: ein VPS bei einem souveränen europäischen Hoster (Hetzner, OVH, Scaleway, Infomaniak) als Gateway, ein verschlüsselter WireGuard-Tunnel zwischen VPS und Proxmox-Host und ein socat-Relais, das den öffentlichen Verkehr auf Port 443 des VPS durch den Tunnel zu den internen Diensten weiterreicht. Ende-zu-Ende-Verschlüsselung, volle Souveränität, native WireGuard-Leistung.

Die Zielarchitektur im Detail #

So laufen die Pakete in der empfohlenen Variante. Ein Endnutzer spricht Port 443 des VPS an, der Verkehr geht durch den öffentlichen Reverse Proxy, dann kapselt socat den TCP-Strom in den verschlüsselten WireGuard-Tunnel, der auf dem Proxmox-Host hinter dem CGNAT wieder austritt, wo ein zweites socat (oder direkt der Dienst im LXC) den Strom entgegennimmt.

Vollständige Netzwerkarchitektur: Internet zum VPS (Port 443 + Reverse Proxy + socat), dann verschlüsselter WireGuard-Tunnel durch das CGNAT zum internen Proxmox-Host und zum Ziel-LXC-Container
Der ganze Weg: Internet → VPS (Nginx + socat) → WireGuard-Tunnel → Proxmox-Host → Ziel-LXC. Ende-zu-Ende-Verschlüsselung, kein offener Port beim Provider.

WireGuard-Konfiguration auf der Client-Seite (Proxmox) #

WireGuard wird direkt auf dem Proxmox-Host installiert (oder in einem eigenen LXC, wenn Sie es isolieren möchten). Die Konfigurationsdatei sieht so aus.

INI
# /etc/wireguard/wg0.conf (Proxmox-Seite hinter CGNAT)
[Interface]
PrivateKey = <cle_privee_proxmox>
Address = 10.66.66.2/32
MTU = 1280

[Peer]
PublicKey = <cle_publique_du_vps>
Endpoint = vps.exemple.fr:51820
AllowedIPs = 10.66.66.1/32
PersistentKeepalive = 25

Auch die Direktive MTU = 1280 ist wichtig: Sie verhindert die Fragmentierung gekapselter UDP-Pakete in Mobilfunknetzen mit reduzierter MTU. Das ist der Wert, den WireGuard für unzuverlässige Strecken offiziell empfiehlt.

WireGuard-Konfiguration auf der VPS-Seite #

INI
# /etc/wireguard/wg0.conf (öffentliche VPS-Seite)
[Interface]
PrivateKey = <cle_privee_vps>
Address = 10.66.66.1/32
ListenPort = 51820

[Peer]
PublicKey = <cle_publique_du_proxmox>
AllowedIPs = 10.66.66.2/32
Bash
# Start beim Booten auf beiden Seiten aktivieren
systemctl enable --now wg-quick@wg0

# Prüfen, ob der Tunnel steht
wg show wg0
# latest handshake muss < 2 Minuten sein

socat-Relais auf dem VPS #

Steht der WireGuard-Tunnel, konfigurieren wir socat auf dem VPS so, dass es den TCP-Verkehr vom öffentlichen Port an die interne IP des Proxmox im Tunnel weiterreicht. Das Ganze kommt in eine systemd-Unit, damit der Dienst sauber neu gestartet werden kann.

INI
# /etc/systemd/system/socat-nextcloud.service
[Unit]
Description=socat relay 443 vers Nextcloud via WireGuard
After=network-online.target wg-quick@wg0.service
Requires=wg-quick@wg0.service

[Service]
Type=simple
ExecStart=/usr/bin/socat -d -d TCP4-LISTEN:8443,reuseaddr,fork TCP4:10.66.66.2:443
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
Bash
systemctl daemon-reload
systemctl enable --now socat-nextcloud.service
systemctl status socat-nextcloud.service

Öffentlicher Reverse Proxy vor socat #

Um mehrere Dienste über denselben öffentlichen Port 443 zu bedienen, setzen wir Nginx (oder Traefik) davor. Jeder vhost leitet je nach server_name an ein anderes socat weiter.

Nginx
# /etc/nginx/sites-enabled/nextcloud.conf (auf dem VPS)
server {
    listen 443 ssl http2;
    server_name cloud.exemple.fr;

    ssl_certificate     /etc/letsencrypt/live/cloud.exemple.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.exemple.fr/privkey.pem;

    client_max_body_size 10G;
    proxy_request_buffering off;

    location / {
        proxy_pass http://127.0.0.1:8443;
        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;
    }
}

Sicherheit des Tunnels #

  • Die WireGuard-Schlüssel liegen auf dem Datenträger des Proxmox mit LUKS verschlüsselt, wenn der Host physisch angreifbar ist.
  • Die Firewall des VPS lässt nur Port 51820 UDP (WireGuard) und 443 TCP (öffentlicher Reverse Proxy) zu. Admin-SSH ist auf bestimmte Quell-IPs beschränkt.
  • Der WireGuard-Tunnel ist selbst verschlüsselt (ChaCha20-Poly1305). Der socat-Verkehr darin ist auf Tunnelebene unverschlüsselt, aber auf Anwendungsebene bereits per TLS verschlüsselt (Nginx beendet TLS gegenüber dem Client, und der interne Dienst nutzt bei Bedarf eigenes TLS).
  • Für strikte Ende-zu-Ende-Verschlüsselung ohne jede TLS-Terminierung auf dem VPS verwenden Sie in Nginx ein stream { ssl_preread; } mit Routing nach SNI statt eines klassischen HTTP-vhost.

Grenzen und Fallstricke #

  • Zusätzliche Latenz: 5 bis 30 ms, je nach Entfernung des VPS. Platzieren Sie den VPS in derselben Region wie Ihre Nutzer.
  • Bandbreite durch die Anbindung des VPS begrenzt: Ein VPS mit 1 Gbit/s reicht völlig, prüfen Sie es aber für Ihre Nutzung.
  • Fällt der VPS aus, sind alle freigegebenen Dienste unerreichbar. Planen Sie eine externe Überwachung ein (UptimeRobot oder ein zweiter Reserve-VPS per DNS-Round-Robin).
  • Ein VPS der Einstiegsklasse kostet bei souveränen europäischen Hostern etwa 5 bis 10 € pro Monat. Rechnen Sie das in die Gesamtkosten (TCO) des Projekts ein.
  • UDP-Dienste (Spiele, VoIP) brauchen eine andere Konfiguration von socat oder Nginx stream: Überlegen Sie gut, welches Protokoll transportiert wird, bevor Sie einen Dienst hinzufügen.

Fazit #

CGNAT ist kein Schicksal. Mit einem europäischen VPS für ein paar Euro im Monat, WireGuard und socat (alle drei Open Source und ausgereift) machen Sie Ihre Proxmox-Dienste öffentlich so leistungsfähig erreichbar wie mit einer direkten festen IP und behalten 100 % der Souveränität über den Datenverkehr. Das ist mehr Arbeit als ein Cloudflare Tunnel, passt aber zum Ansatz: Wer die GAFAM verlässt, lässt sie nicht durch den Keller wieder herein.

Zur Infrastruktur hinter diesem Tunnel beschreibt die PBS-Anleitung, wie Sie den gesamten Bestand mit einer Backup-Richtlinie in Unternehmensqualität schützen, und der Vergleich Proxmox, TrueNAS und Unraid hilft bei der Wahl der richtigen Basis, wenn Sie bei null anfangen.

Über uns
01/Als Nächstes lesenDrei Artikel

Verwandte Artikel

Infrastruktur

Die Exploit-Fabriken: Ihre Firewall ist zur Frontlinie geworden

Zwei Bachelorstudenten in Changsha betrieben eine automatisierte Kette, die eine Firmware entschlüsselt, sie mit Tausenden Aufrufen dekompiliert, Hypothesen über Lücken aufstellt, den Exploit schreibt und ihn im Labor testet, in einer Schleife, Tag und Nacht. Mehr als ein Dutzend unbekannte Schwachstellen in einem Monat in Netzwerkgeräten, rund fünfzig Organisationen im Visier, dreizehn zeitgesteuerte Sammel-Agenten. Was das für das Inventar eines KMU bedeutet.

cybersicherheitschwachstelle
Infrastruktur

Sporadische SERVFAIL: der verwaiste DS-Eintrag, der 15 % der Auflösungen scheitern ließ

Eine CI, die sporadisch fehlschlägt, zwei verschiedene Fehlermeldungen, ein offensichtlicher Verdächtiger, der nichts damit zu tun hatte, und eine unsichtbare Ursache: ein DNSSEC-Eintrag, der beim Parent veröffentlicht blieb, obwohl die Zone nicht mehr signiert war. Obduktion einer tückischen DNS-Störung, mit der Methode, die am Ende Klarheit brachte.

dnssecdns
Infrastruktur

36 Server patchen ohne unattended-upgrades

Es gibt drei Grundhaltungen: nichts tun, alles blind automatisieren oder erst hinsehen und dann entscheiden. Wir haben unattended-upgrades von der gesamten Serverflotte entfernt und auch unser eigenes automatisches Patching mit Ansible abgebaut, zugunsten des Grundsatzes „Sichtbarkeit zuerst“, umgesetzt mit PatchMon. Warum, wie, und das Ritual, das dazugehört.

patch managementpatchmon

Und jetzt

Eine Infrastruktur, betreut und überwacht rund um die Uhr?

Bastion, SIEM, bewusst eingespielte Updates, getestete Backups: was wir bei unseren Kunden umsetzen. Erstgespräch kostenlos.

Ihr Projekt besprechen

Antwort binnen 24 Stunden an Werktagen, von einem der beiden Gründer. Oder telefonisch: +33 7 59 96 14 99.