WireGuard VPN Server #
WireGuard is a streamlined VPN protocol designed for speed, security, and simplicity. This deployment provides a WireGuard VPN server, allowing secure and private network access.
Status #
Deployment #
Quelle #
Die Anwendung wird als benutzerdefiniertes Helm-Chart aus einem privaten Repository auf git.zyria.de bezogen. Es basiert vermutlich auf dem wg-easy Projekt, wurde aber stark erweitert.
Dokumentation #
Die Dokumentation für die verwendete Web-UI ist auf GitHub zu finden.
Funktion #
Dieser Dienst bietet einen zentralen und einfach zu verwaltenden VPN-Zugang zum Netzwerk.
- WireGuard-Server: Der Kern des Dienstes, der den verschlüsselten VPN-Tunnel bereitstellt.
- Web-Portal: Eine Weboberfläche unter
vpn.zyria.de, auf der sich Benutzer anmelden können. - LDAP-Integration: Benutzer werden gegen ein Active Directory authentifiziert. Nur Mitglieder einer bestimmten Gruppe (
wireguardEnabled) dürfen sich anmelden. - Self-Provisioning: Nach der Anmeldung können Benutzer ihre eigenen VPN-Clients (Peers) erstellen, QR-Codes zum einfachen Einrichten auf Mobilgeräten scannen und Konfigurationsdateien herunterladen.
- Bastion Host: Ein integrierter SSH-Server, der als sicherer Sprung-Host ins Netzwerk dienen kann.
Lokale Anpassungen #
- The deployment uses a custom Helm chart tailored for this specific WireGuard setup.
- It integrates with an LDAP directory for user authentication and dynamic peer configuration.
- It exposes a LoadBalancer service for the VPN tunnel (UDP) and SSH access (TCP).
- Persistent storage for WireGuard configuration and portal data is configured using
hostPathvolumes. - SSH host keys are mounted from host paths.
- A custom
sshd-configis applied for the SSH bastion. - Der Bastion Container stellt einen SSH Jumphost bereit. Primär für die Nutzung von Ansible. Damit lassen sich alle Geräte hinter den NATs erreichen, welche im VPN sind.
- Wg-portal stellt eine leichte Möglichkeit bereit den Mitarbeitern vordefinierte Zugänge zum VPN bereitzustellen. Der Container nutzt das Netzwerk des wireguard Containers und muss deshalb mit ihm zusammen neu gestartet werden.
Die Konfiguration erfolgt über Umgebungsvariablen in der values.yaml-Datei.
Wichtige Umgebungsvariablen #
LDAP_URL,LDAP_BASEDN,LDAP_USER,LDAP_PASSWORD: Konfigurieren die Verbindung zum Active Directory.LDAP_SYNC_FILTER: Definiert, welche Benutzer Zugriff auf den VPN-Dienst haben.SELF_PROVISIONING: Ist auftruegesetzt, um Benutzern die eigenständige Verwaltung ihrer Geräte zu ermöglichen.MAIL_FROM,EMAIL_HOST: Konfigurieren den E-Mail-Versand für Benachrichtigungen.
Wichtige Einstellungen #
- LoadBalancer: Der WireGuard-VPN-Port (
51194/UDP) und der SSH-Port (3022/TCP) werden über einenLoadBalancer-Service mit einer dedizierten externen IP-Adresse bereitgestellt. - Ingress: Der Zugriff auf das Web-Portal wird über einen Ingress mit einem Hostnamen ermöglicht.
- Speicher: Die WireGuard-Konfigurationen und die Daten des Web-Portals werden persistent auf einem NFS-Share gespeichert.
Installation #
Die Anwendung wird mittels Kustomize und Helm durch ArgoCD im Kubernetes-Cluster bereitgestellt. Die Konfiguration befindet sich im apps/wireguard-Verzeichnis. Eine manuelle Installation kann mit folgendem Befehl durchgeführt werden:
1kubectl kustomize --enable-helm apps/wireguard | kubectl apply -n wireguard -f -
Abhängigkeiten #
- A running Kubernetes cluster.
- A configured Ingress controller (e.g., Traefik).
- A certificate management solution (e.g., cert-manager) to provide TLS certificates.
- MetalLB for LoadBalancer IP allocation.
- An accessible LDAP directory for user authentication.
- Ein NFS-Server für persistenten Speicher.