- Improve WireGuard client IP calculation logic (find next available IP) - Add local wireguard-clients directory for storing client configs - Integrate Redis pool into CacheInitializer - Improve ContainerBootstrapper with better imports and Redis pool - Add monitoring role tags for better task organization - Update WireGuard documentation - Store generated WireGuard client configs locally
12 KiB
WireGuard VPN Setup - Complete Guide
Status: ✅ Active
Last Updated: 2025-10-31
Server: 94.16.110.151 (michaelschiemer.de)
Übersicht
WireGuard ist ein modernes, schnelles und sicheres VPN-Protokoll, das für den sicheren Zugriff auf interne Services auf dem Production-Server verwendet wird.
Features:
- ✅ Schnell und performant
- ✅ Moderne Kryptographie
- ✅ Einfache Konfiguration
- ✅ Native Unterstützung in Linux, macOS, Windows, iOS, Android
- ✅ Automatisierte Installation via Ansible
Server-Informationen
Server-Endpoint:
- Host: 94.16.110.151
- Port: 51820 (UDP)
- VPN-Netzwerk: 10.8.0.0/24
- Server-IP (VPN): 10.8.0.1
Server-Public-Key:
hT3OCWZ6ElX79YdAdexSsZnbWLzRM/5szk+XNEBUaS8=
Wichtige Sicherheitshinweise:
- ✅ SSH-Zugriff über normale IP bleibt vollständig funktionsfähig
- ✅ WireGuard routet standardmäßig nur das VPN-Netzwerk (10.8.0.0/24)
- ✅ Normale Internet-Routen werden nicht geändert
- ✅ Firewall-Regeln für SSH (Port 22) werden NICHT entfernt oder blockiert
Zukünftige Sicherheitshärtung (geplant):
- 🔒 Backend-Dienste (Prometheus, Grafana, Portainer) sollen später nur noch über VPN erreichbar sein
- 🔒 Aktuell sind alle Dienste noch öffentlich erreichbar (für einfachere Einrichtung)
- 🔒 Firewall-Regeln können später angepasst werden, um nur VPN-Zugriff zu erlauben
Installation
Server-Installation (via Ansible)
Die Server-Installation erfolgt automatisch via Ansible:
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml
Was wird installiert:
- WireGuard und Tools
- Server-Keys (generiert oder vorhandene verwendet)
- Server-Konfiguration
- IP Forwarding aktiviert
- NAT (Masquerading) konfiguriert
- Firewall-Port 51820/udp geöffnet
- WireGuard-Service gestartet
Client hinzufügen
Um einen neuen Client hinzuzufügen:
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \
-e "client_name=myclient"
Optionale Parameter:
client_ip: Spezifische Client-IP (Standard: automatisch berechnet)allowed_ips: Erlaubte IP-Ranges (Standard: 10.8.0.0/24)
Beispiel mit spezifischer IP:
ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \
-e "client_name=myclient" \
-e "client_ip=10.8.0.5"
Client-Konfiguration
1. Config-Datei abrufen
Die Client-Konfigurationsdatei liegt auf dem Server unter:
/etc/wireguard/clients/{client_name}.conf
Abrufen der Config-Datei:
# Von Ansible Control Machine
scp -i ~/.ssh/production \
deploy@94.16.110.151:/etc/wireguard/clients/development.conf \
~/development.conf
Oder direkt auf dem Server:
ssh -i ~/.ssh/production deploy@94.16.110.151
sudo cat /etc/wireguard/clients/development.conf
2. WireGuard auf Client installieren
Linux (Ubuntu/Debian):
sudo apt update
sudo apt install wireguard wireguard-tools
Linux (CentOS/RHEL):
sudo yum install wireguard-tools
# oder
sudo dnf install wireguard-tools
macOS:
brew install wireguard-tools
Windows: Download von https://www.wireguard.com/install/
iOS/Android: WireGuard App aus dem App Store/Play Store installieren
3. VPN verbinden
Linux/macOS (Command Line):
# Config-Datei kopieren
sudo cp ~/development.conf /etc/wireguard/development.conf
# VPN starten
sudo wg-quick up development
# Status prüfen
sudo wg show
# VPN trennen
sudo wg-quick down development
Linux/macOS (Alternative):
# Direkt mit Datei
sudo wg-quick up ~/development.conf
Windows:
- WireGuard-App öffnen
- "Import tunnel(s) from file" wählen
development.confDatei auswählen- "Activate" klicken
iOS/Android:
- WireGuard-App öffnen
- QR-Code scannen (falls verfügbar) oder Config-Datei importieren
- Tunnel aktivieren
4. QR-Code generieren
Falls qrencode auf dem Server installiert ist, kann ein QR-Code generiert werden:
# Auf dem Server
qrencode -t ansiutf8 < /etc/wireguard/clients/development.conf
# oder für PNG
qrencode -t png -o /tmp/development-qr.png < /etc/wireguard/clients/development.conf
Verbindung testen
Nach dem Verbinden mit dem VPN:
1. VPN-Status prüfen
# Status anzeigen
sudo wg show
# Erwartete Ausgabe:
# interface: development
# public key: <client_public_key>
# private key: (hidden)
# listening port: <random_port>
#
# peer: hT3OCWZ6ElX79YdAdexSsZnbWLzRM/5szk+XNEBUaS8=
# endpoint: 94.16.110.151:51820
# allowed ips: 10.8.0.0/24
# latest handshake: <timestamp>
# transfer: <received>, <sent>
2. Server-IP pingen
# Server im VPN-Netzwerk pingen
ping 10.8.0.1
# Sollte erfolgreich sein
3. VPN-Netzwerk prüfen
# Routing-Tabelle prüfen
ip route show
# Sollte einen Eintrag für 10.8.0.0/24 über wg0 zeigen
4. Services über VPN erreichen
Nach erfolgreicher VPN-Verbindung sollten folgende Services über das VPN-Netzwerk erreichbar sein:
- Prometheus: http://10.8.0.1:9090
- Grafana: http://10.8.0.1:3000
- Portainer: https://10.8.0.1:9443
Hinweis:
- ⚠️ Aktuell sind diese Services auch öffentlich erreichbar (Traefik-Routing)
- 🔒 Geplant: Später sollen alle Backend-Dienste nur noch über VPN erreichbar sein
- ✅ Für die Einrichtung bleibt der öffentliche Zugriff vorerst aktiviert
Client-Verwaltung
Client-Liste anzeigen
# Auf dem Server
sudo wg show
# Zeigt alle verbundenen Clients
Client-Config-Dateien anzeigen
# Auf dem Server
ls -la /etc/wireguard/clients/
Client entfernen
Um einen Client zu entfernen:
# Auf dem Server
sudo nano /etc/wireguard/wg0.conf
# Entferne den [Peer] Block für den Client
# WireGuard neu starten
sudo wg-quick down wg0
sudo wg-quick up wg0
# Optional: Client-Config löschen
sudo rm /etc/wireguard/clients/clientname.conf
Oder über Ansible (manuelle Datei-Bearbeitung erforderlich):
# 1. Client aus /etc/wireguard/wg0.conf entfernen
# 2. WireGuard-Service neu starten:
cd deployment/ansible
ansible production -m shell -a "sudo wg-quick down wg0 && sudo wg-quick up wg0"
Troubleshooting
VPN verbindet nicht
1. Firewall prüfen:
# Auf dem Server
sudo ufw status | grep 51820
# Sollte zeigen: 51820/udp ALLOW
# Falls nicht:
sudo ufw allow 51820/udp comment 'WireGuard VPN'
2. WireGuard-Service prüfen:
# Auf dem Server
sudo systemctl status wg-quick@wg0
# Logs anzeigen
sudo journalctl -u wg-quick@wg0 -f
3. Server-Konfiguration prüfen:
# Auf dem Server
sudo wg show
sudo cat /etc/wireguard/wg0.conf
4. Client-Config prüfen:
- Endpoint korrekt? (94.16.110.151:51820)
- Server-Public-Key korrekt?
- Client-Private-Key vorhanden?
- AllowedIPs korrekt?
5. Netzwerk-Verbindung prüfen:
# Vom Client aus
ping 94.16.110.151
# Sollte erfolgreich sein
# UDP-Port testen
nc -u -v 94.16.110.151 51820
VPN verbindet, aber kein Traffic
1. IP Forwarding prüfen:
# Auf dem Server
cat /proc/sys/net/ipv4/ip_forward
# Sollte "1" sein
# Falls nicht:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
2. NAT-Rules prüfen:
# Auf dem Server
sudo iptables -t nat -L -n | grep MASQUERADE
sudo iptables -L FORWARD -n | grep wg0
3. Routing prüfen:
# Auf dem Server
ip route show
# Sollte Routes für wg0 zeigen
# Vom Client
ip route show
# Sollte Route für 10.8.0.0/24 über VPN zeigen
SSH-Zugriff funktioniert nicht mehr
WICHTIG: SSH-Zugriff sollte weiterhin über die normale IP funktionieren!
# SSH über normale IP (nicht VPN)
ssh -i ~/.ssh/production deploy@94.16.110.151
# Falls nicht funktioniert:
# 1. Prüfe, ob VPN alle Traffic routet (AllowedIPs = 0.0.0.0/0)
# 2. Deaktiviere VPN: sudo wg-quick down development
# 3. Prüfe Firewall: sudo ufw status | grep 22
Performance-Probleme
1. MTU anpassen:
# In Client-Config hinzufügen:
# [Interface]
# MTU = 1420
2. PersistKeepalive anpassen:
# In Client-Config bereits konfiguriert:
# PersistentKeepalive = 25
3. Server-Last prüfen:
# Auf dem Server
sudo wg show
# Zeigt Transfer-Statistiken
Best Practices
Sicherheit
-
Backup der Server-Keys:
# Auf dem Server sudo tar czf wireguard-backup.tar.gz /etc/wireguard/ # Sicher speichern (z.B. verschlüsselt) -
Client-Keys sicher verwalten:
- Client-Private-Keys niemals teilen
- Config-Dateien sicher speichern
- Nicht genutzte Clients entfernen
-
Regelmäßige Updates:
# Auf dem Server sudo apt update && sudo apt upgrade wireguard wireguard-tools -
Firewall-Regeln:
- Nur notwendige Ports öffnen
- Regelmäßig Firewall-Status prüfen
Monitoring
-
VPN-Verbindungen überwachen:
# Auf dem Server sudo wg show -
Logs prüfen:
# Auf dem Server sudo journalctl -u wg-quick@wg0 -f -
Transfer-Statistiken:
# Auf dem Server sudo wg show # Zeigt received/sent für jeden Client
Ansible Playbooks
Setup WireGuard Server
Datei: deployment/ansible/playbooks/setup-wireguard.yml
Verwendung:
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml
Variablen:
wireguard_port: Port für WireGuard (Standard: 51820)wireguard_network: VPN-Netzwerk (Standard: 10.8.0.0/24)wireguard_server_ip: Server-IP im VPN (Standard: 10.8.0.1)
Add WireGuard Client
Datei: deployment/ansible/playbooks/add-wireguard-client.yml
Verwendung:
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \
-e "client_name=myclient"
Variablen:
client_name: Name des Clients (erforderlich)client_ip: Spezifische Client-IP (Standard: automatisch berechnet)allowed_ips: Erlaubte IP-Ranges (Standard: 10.8.0.0/24)
Dokumentation: Siehe deployment/ansible/playbooks/README-WIREGUARD.md
Nach dem Lauf liegt die Client-Konfiguration zusätzlich lokal im Repository unter
deployment/ansible/wireguard-clients/<client_name>.conf– ideal zum direkten Import auf deinem Admin-Rechner (Datei bleibt mitchmod 600geschützt).
Verzeichnisstruktur
Auf dem Server:
/etc/wireguard/
├── wg0.conf # Server-Konfiguration
├── wg0_private.key # Server-Private-Key (600)
├── wg0_public.key # Server-Public-Key (644)
└── clients/ # Client-Konfigurationen
├── development.conf # Development-Client
└── ...
Auf dem Client (Linux/macOS):
/etc/wireguard/
└── development.conf # Client-Konfiguration (600)
Support
Bei Problemen:
-
Logs prüfen:
sudo journalctl -u wg-quick@wg0 -f -
Status prüfen:
sudo wg show -
Firewall prüfen:
sudo ufw status -
Connectivity testen:
ping 10.8.0.1 # Vom Client -
Ansible Playbook erneut ausführen:
cd deployment/ansible ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml
Referenzen
- WireGuard-Website: https://www.wireguard.com/
- WireGuard-Installation: https://www.wireguard.com/install/
- WireGuard-Dokumentation: https://www.wireguard.com/papers/wireguard.pdf
- Ansible Playbook-Dokumentation:
deployment/ansible/playbooks/README-WIREGUARD.md
Zuletzt aktualisiert: 2025-10-31
Version: 1.0