# WireGuard VPN Setup WireGuard VPN-Server Installation und Konfiguration via Ansible. ## Übersicht Dieses Ansible Setup installiert und konfiguriert einen WireGuard VPN-Server auf dem Production-Server, um sicheren Zugriff auf interne Services zu ermöglichen. ## Playbooks ### 1. setup-wireguard.yml Installiert und konfiguriert den WireGuard VPN-Server. **Features:** - Installiert WireGuard und Tools - Generiert Server-Keys (falls nicht vorhanden) - Konfiguriert WireGuard-Server - Aktiviert IP Forwarding - Konfiguriert NAT (Masquerading) - Öffnet Firewall-Port (51820/udp) - Startet WireGuard-Service **Verwendung:** ```bash 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) **Beispiel mit Custom-Parametern:** ```bash ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml \ -e "wireguard_port=51820" \ -e "wireguard_network=10.8.0.0/24" \ -e "wireguard_server_ip=10.8.0.1" ``` ### 2. add-wireguard-client.yml Fügt einen neuen Client zum WireGuard-Server hinzu. **Features:** - Generiert Client-Keys - Fügt Client zur Server-Config hinzu - Erstellt Client-Konfigurationsdatei - Generiert QR-Code (falls qrencode installiert) - Restartet WireGuard-Service **Verwendung:** ```bash 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: gesamtes VPN-Netzwerk) **Beispiel mit spezifischer IP:** ```bash ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \ -e "client_name=myclient" \ -e "client_ip=10.8.0.2" ``` ## Wichtige Sicherheitshinweise ### SSH-Zugriff bleibt verfügbar **WICHTIG**: Die WireGuard-Konfiguration ändert NICHT die SSH-Zugriffsmöglichkeiten: - ✅ SSH über die normale Server-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 Die Client-Konfiguration verwendet standardmäßig `AllowedIPs = 10.8.0.0/24`, was bedeutet, dass nur Traffic für das VPN-Netzwerk über WireGuard geroutet wird. Alle anderen Verbindungen (inkl. SSH) nutzen weiterhin die normale Internet-Verbindung. **Um SSH komplett über VPN zu routen** (nicht empfohlen für die erste Installation): ```bash ansible-playbook ... -e "allowed_ips=0.0.0.0/0" ``` ## Verzeichnisstruktur Nach der Installation: ``` /etc/wireguard/ ├── wg0.conf # Server-Konfiguration ├── wg0_private.key # Server-Private-Key (600) ├── wg0_public.key # Server-Public-Key (644) └── clients/ # Client-Konfigurationen ├── client1.conf # Client 1 Config └── client2.conf # Client 2 Config ``` ## Client-Konfiguration verwenden ### 1. Config-Datei auf Client kopieren ```bash # Von Ansible Control Machine scp -i ~/.ssh/production \ deploy@94.16.110.151:/etc/wireguard/clients/myclient.conf \ ~/myclient.conf ``` ### 2. WireGuard auf Client installieren **Linux:** ```bash sudo apt install wireguard wireguard-tools # Ubuntu/Debian # oder sudo yum install wireguard-tools # CentOS/RHEL ``` **macOS:** ```bash brew install wireguard-tools ``` **Windows:** Download von https://www.wireguard.com/install/ ### 3. VPN verbinden **Linux/macOS:** ```bash sudo wg-quick up ~/myclient.conf # oder sudo wg-quick up myclient ``` **Windows:** Importiere die `.conf`-Datei in die WireGuard-App. ### 4. Verbindung testen ```bash # Ping zum Server ping 10.8.0.1 # Status prüfen sudo wg show # VPN trennen sudo wg-quick down myclient ``` ## QR-Code für Mobile Client Falls `qrencode` installiert ist, wird beim Hinzufügen eines Clients automatisch ein QR-Code angezeigt: ```bash ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \ -e "client_name=myphone" ``` Der QR-Code kann mit der WireGuard Mobile App (iOS/Android) gescannt werden. ## Firewall-Konfiguration Das Playbook öffnet automatisch den WireGuard-Port (51820/udp) in UFW, falls installiert. **Manuelle Firewall-Regeln:** ```bash # UFW sudo ufw allow 51820/udp comment 'WireGuard VPN' # iptables direkt sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT ``` ## Troubleshooting ### WireGuard startet nicht ```bash # Status prüfen sudo systemctl status wg-quick@wg0 # Logs anzeigen sudo journalctl -u wg-quick@wg0 -f # Manuell starten sudo wg-quick up wg0 ``` ### Client kann nicht verbinden 1. **Firewall prüfen:** ```bash sudo ufw status sudo iptables -L -n | grep 51820 ``` 2. **Server-Logs prüfen:** ```bash sudo journalctl -u wg-quick@wg0 -f ``` 3. **Server-Status prüfen:** ```bash sudo wg show ``` 4. **Routing prüfen:** ```bash sudo ip route show ``` ### IP Forwarding nicht aktiv ```bash # Manuell aktivieren echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # Permanent machen echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p ``` ## Client entfernen Um einen Client zu entfernen: ```bash # Auf dem Server sudo nano /etc/wireguard/wg0.conf # Entferne den [Peer] Block für den Client sudo wg-quick down wg0 sudo wg-quick up wg0 # Optional: Client-Config löschen sudo rm /etc/wireguard/clients/clientname.conf ``` ## Server-Public-Key abrufen ```bash # Auf dem Server cat /etc/wireguard/wg0_public.key # oder sudo cat /etc/wireguard/wg0_private.key | wg pubkey ``` ## Best Practices 1. **Backup der Keys**: Speichere Server-Keys sicher: ```bash sudo tar czf wireguard-backup.tar.gz /etc/wireguard/ ``` 2. **Regelmäßige Updates:** ```bash sudo apt update && sudo apt upgrade wireguard wireguard-tools ``` 3. **Monitoring**: Überwache VPN-Verbindungen: ```bash sudo wg show ``` 4. **Sicherheit**: - Verwalte Client-Keys sicher - Entferne nicht genutzte Clients - Nutze starke Passwörter für Server-Zugriff ## Support Bei Problemen: 1. Prüfe Logs: `sudo journalctl -u wg-quick@wg0` 2. Prüfe Status: `sudo wg show` 3. Prüfe Firewall: `sudo ufw status` 4. Teste Connectivity: `ping 10.8.0.1` (vom Client)