# OPNsense VPN Monitoring: Diagnose & Performance Analyse
TL;DR / Management Summary Ein VPN-Problem ist für den User oft binär: “Es geht” oder “Es geht nicht”. Für den Admin beginnt die Arbeit dazwischen. Wir nutzen die integrierten VPN Status Dashboards für Ad-hoc Prüfungen und tiefe Log-Analysen zur Fehlersuche. Ein Senior Admin verlässt sich nicht auf Vermutungen, sondern nutzt Packet Captures auf den virtuellen VPN-Interfaces, um zu beweisen, ob ein Paket im Tunnel verloren geht oder am Zielserver geblockt wird.
# 1. Echtzeit-Statusüberwachung
Wer ist gerade aktiv?
Jeder VPN-Typ hat seine eigene Status-Ansicht:
- OpenVPN:
VPN -> OpenVPN -> Connection Status. Zeigt User, IPs und Bandbreite. - IPsec:
VPN -> IPsec -> Status Overview. Zeigt Phase 1/2 SAs und Ciphers. - WireGuard:
VPN -> WireGuard -> Diagnostics. Zeigt Handshakes und Transferraten.
# 2. Log-Analyse für Fortgeschrittene
Die Fehlersuche im Text.
Wenn die Verbindung fehlschlägt, ist das Log-File die einzige Wahrheit.
- Pfad:
System -> Log-Files -> General. - Filter:
openvpn: SSL-Handshake Fehler, TLS-Mismatches.charon: IPsec Phase 1/2 Fehler (IKE).wireguard: (WireGuard loggt sehr wenig, nutzen Siewg showin der Shell).
# 3. Deep Dive: VPN Packet Capture
In den Tunnel schauen.
Häufiges Problem: “VPN steht, aber RDP geht nicht”.
Diagnostics -> Packet Capture.- Interface: Wählen Sie das spezifische VPN-Interface (z.B.
ovpns1für OpenVPN oderenc0für IPsec). - Filter: Port 3389 (RDP).
- Erkenntnis: Wenn Sie hier Pakete sehen, die in den Tunnel gehen, aber keine Antworten kommen, liegt das Problem am Zielserver (Firewall) oder am Routing – nicht am VPN-Tunnel selbst.
# 4. Day-2 Operations: Durchsatz-Messung
Warum ist das VPN so langsam?
Ein VPN reduziert die MTU (Maximum Segment Size).
- Tool:
iperf3. - Test: Starten Sie iperf3 auf einem Server im LAN und auf dem Client.
# Am Server
iperf3 -s
# Am Client
iperf3 -c 10.0.0.50
- Ergebnis: Wenn der Durchsatz viel niedriger ist als die Internetleitung, prüfen Sie auf Fragmentation oder fehlende Hardware-Verschlüsselung (AES-NI).
# 5. Troubleshooting & “War Stories”
Vom Dunkeln ins Licht.
# Top 3 Fehlerbilder
-
Symptom: VPN bricht alle 60 Sekunden ab.
- Ursache: Duplicate Common Name (z.B. zwei User nutzen das gleiche Zertifikat) oder falsche Keep-alive Settings.
- Lösung:
VPN -> OpenVPN -> Server -> Duplicate Connectionsprüfen.
-
Symptom: Ping geht, aber HTTP nicht.
- Ursache: MTU/MSS Mismatch. Große Pakete (HTTP) passen nicht durch den Tunnel, kleine (ICMP) schon.
- Lösung:
MSS Clampingam VPN-Interface auf 1350 setzen.
-
Symptom: “IKE_SA failed” im IPsec Log.
- Ursache: Mismatch in Phase 1 (Cipher, Hash oder PSK falsch).
# “War Story”: Der “Ghost” Packet Loss
Ein Kunde klagte über sporadische Abbrüche bei Datenbank-Anwendungen via VPN. ping zeigte 0% Loss.
Die Entdeckung: Wir ließen einen ping -s 1400 (große Pakete) über den Tunnel laufen. Plötzlich hatten wir 50% Packet Loss.
Die Ursache: Der ISP des Users drosselte fragmentierte UDP-Pakete.
Lösung: Umstellung von OpenVPN/UDP auf OpenVPN/TCP. Die Performance sank zwar leicht, aber die Paketverluste verschwanden komplett.
Lehre: Testen Sie VPNs immer mit realitätsnahen Paketgrößen, nicht nur mit 32-Byte Standard-Pings.
# 6. Monitoring & Alerting
Tunnel-Health Dashboards.
# Prometheus Integration
Nutzen Sie den node_exporter oder das OPNsense API Plugin für Prometheus.
- KPI:
vpn_active_sessions_count. - KPI:
vpn_traffic_in_bytes. - Alert: Wenn ein wichtiger Site-to-Site Tunnel länger als 5 Minuten offline ist -> Email an den Admin.
# 7. Fazit & Empfehlung
Ein VPN ohne Monitoring ist ein Blindflug.
- Empfehlung: Nutzen Sie das “VPN Status” Widget prominent auf Ihrem Dashboard.
- Wichtig: Dokumentieren Sie die Soll-Performance Ihrer Tunnel (Baseline), um schleichende Verschlechterungen (z.B. durch ISP-Peering-Probleme) zu erkennen.
# Anhang: Cheatsheet
| Aufgabe | Pfad / Befehl |
|---|---|
| OpenVPN Status | VPN -> OpenVPN -> Connection Status |
| IPsec Status | VPN -> IPsec -> Status Overview |
| Live Traffic | Diagnostics -> Activity |
| IPsec Logs (Shell) | clog /var/log/charon.log |