Hinter HAProxy
Die Plattform udp.data-dna.eu läuft im Verwaltungsnetz hinter einer OPNsense-VM. Ein HAProxy leitet eingehenden HTTPS-Verkehr für *.udp.<basisdomain> per SNI als TCP-Passthrough über einen WireGuard-Tunnel an die VM.
Paketweg
Komponenten
| Komponente | Rolle | Ort |
|---|---|---|
| Client im Internet | löst udp.<basisdomain> und *.udp.<basisdomain> auf <edge-ip> auf | außerhalb |
| Edge-Server | öffentlich erreichbarer Proxmox-Server | Helsinki |
| OPNsense-VM | trägt <edge-ip> an der WAN-Schnittstelle | auf dem Edge-Server |
| HAProxy | wertet den SNI-Namen aus und leitet den TCP-Strom weiter, terminiert kein TLS | in der OPNsense-VM |
| WireGuard-Tunnel | verbindet OPNsense und VM | zwischen OPNsense und VM |
| Proxmox-Knoten von udp.data-dna.eu | Bridge-Host, leitet nicht weiter | internes Netz |
| VM mit ingress-nginx | terminiert TLS, öffnet Port 80 und 443 | internes Netz |
| cert-manager | stellt Zertifikate per HTTP-01 aus | in der VM |
Paketweg im Detail
- Der Client verbindet sich mit
<edge-ip>auf Port 443. - Der HAProxy nimmt die Verbindung an und liest den SNI-Namen.
- Er ordnet den Namen
*.udp.<basisdomain>zu und leitet den Datenstrom durch den WireGuard-Tunnel anWG_VM_IPauf Port 443. - Der ingress-nginx in der VM nimmt die Verbindung an. Der TLS-Handshake findet zwischen Client und Ingress statt. TLS endet im Ingress.
- Der Ingress wählt anhand des Hostnamens den Service im Cluster.
- Die Antwort läuft auf derselben Verbindung zurück.
Netzwerkeinrichtung des Proxmox-Knotens
Der Proxmox-Knoten von udp.data-dna.eu ist ein reiner Bridge-Host. Die Bridge enthält die physische Schnittstelle des Knotens. Die VM hängt per net0 an dieser Bridge und liegt im selben Layer-2-Segment wie das Gateway <gateway-ip>. Der Knoten leitet nichts weiter: net.ipv4.ip_forward = 0, keine NAT-Regeln, keine nftables-Regeln, pve-firewall deaktiviert.
Netzwerk der VM
- Standardgateway ist
<gateway-ip>im internen Netz. - WireGuard läuft auf
wg0. Die VM ist Peer mit der AdresseWG_VM_IP, die Gegenstelle istWG_OPN_ENDPOINTmit der TunneladresseWG_OPN_IP.AllowedIPsist aufWG_ALLOWED_IPSbegrenzt,PersistentKeepalivesteht auf 25. - Der ingress-nginx läuft als DaemonSet mit
hostNetwork: trueund ohne Kubernetes-Service. Er öffnet Port 80 und 443 direkt im Netzwerk der VM. Weitergeleiteter Verkehr erreicht ihn auf der Tunneladresse, interne Clients auf der LAN-Adresse.
Voraussetzungen am Installer bei WG_ENABLE=true
Pflichtvariablen sind WG_VM_PRIVATE_KEY, WG_OPN_PUBLIC_KEY und WG_OPN_ENDPOINT, optional ist WG_PRESHARED_KEY. Die Abnahme prüft die Erreichbarkeit des WireGuard-Tunnels, der OPNsense, von Keycloak und vom Portal.
DNS
Im lokalen DNS des internen Netzes zeigen udp.<basisdomain> und idm.udp.<basisdomain> auf <vm-ip>, www.udp.<basisdomain> auf die öffentliche Adresse. Interne Clients erreichen die VM unter diesen Namen direkt und nicht über HAProxy und Tunnel.
Verweise
Details zu HAProxy, Port 80 und den Zertifikaten stehen in Netzwerk, DNS und TLS. Die Abschnitte Externe Erreichbarkeit, Reverse-Proxy-Anbindung und Variante E behandeln die Details.