Testscript check_openvpn.py: prueft OpenVPN-Server-Erreichbarkeit (UDP-Handshake-Probe / TCP-Connect)

This commit is contained in:
ARIA
2026-07-21 12:36:27 +00:00
parent 1ed113a866
commit b5ff887cea
2 changed files with 225 additions and 0 deletions
+44
View File
@@ -23,6 +23,8 @@ und droppt Pakete bereits auf Netzwerk-Ebene.
| `geoblock_testserver.py` | Kleiner Test-Webserver, um die Regeln von aussen zu pruefen |
| `geoblock-testserver.service` | systemd-Unit, startet den Test-Webserver dauerhaft |
| `uninstall_geoblock.sh` | Deinstaller: raeumt Timer/Service/Testserver/Regeln wieder ab (siehe unten) |
| `check_openvpn.py` | Eigenstaendiges Client-Tool: prueft ob ein OpenVPN-Server erreichbar ist (siehe unten) |
| `LAENDERCODES.md` | Referenzliste ISO-Laendercode -> ausgeschriebener Name fuer `countries` in `geoblock.ini` |
## Installation
@@ -385,3 +387,45 @@ ohne Proxy — das ist der Normalfall auf den meisten Servern.
Betroffen ist **nur** der Abruf der Zonefiles beim Ausfuehren von
`--apply`/`--update`. iptables/ipset selbst und der Testserver brauchen dafuer
keinen Proxy — die filtern nur lokal am Kernel-Paketfilter.
## Verbindungstest fuer OpenVPN-Server (`check_openvpn.py`)
Eigenstaendiges Client-Tool (nur Python-Stdlib, keine Abhaengigkeiten), um
zu pruefen ob ein OpenVPN-Server unter einer Host/Port/Protokoll-Kombination
erreichbar ist — ohne dafuer eine echte VPN-Verbindung mit Zertifikaten
aufzubauen. Das Gegenstueck zu `geoblock_testserver.py`, wenn ihr das
Geoblocking (oder eine sonstige Firewall-Regel) gegen einen echten
OpenVPN-Server statt gegen den Test-Webserver pruefen wollt — z.B. genau
fuer den Fall "Geoblocking auf dem VPN-Server hinter dem NLB" von eben.
**Wie es funktioniert:**
- **UDP** (Standard, meist Port `1194/udp`): schickt ein echtes, protokoll-
konformes OpenVPN-Handshake-Paket (`P_CONTROL_HARD_RESET_CLIENT_V2`,
der erste Schritt den auch ein echter Client macht). Antwortet der Server
mit seinem eigenen Hard-Reset-Paket, ist er zweifelsfrei erreichbar.
- **TCP** (falls der Server mit `proto tcp-server` laeuft): einfacher
TCP-Connect-Test.
**Benutzung:**
```bash
python3 check_openvpn.py --host vpn.example.com
# -> Standard: UDP, Port 1194, 3 Versuche, 3s Timeout je Versuch
python3 check_openvpn.py --host vpn.example.com --port 443 --proto tcp
python3 check_openvpn.py --host vpn.example.com --tries 5 --timeout 2
```
Exit-Codes fuer Skripte/Monitoring: `0` = erreichbar, `1` = nicht erreichbar/
Timeout, `2` = Aufruf-Fehler (z.B. Host nicht aufloesbar).
**Wichtiger Hinweis zu `tls-auth`/`tls-crypt`:** Ist das auf dem Server
konfiguriert (haeufige, empfohlene Haertung), verwirft er JEDES Paket ohne
gueltiges HMAC/Verschluesselung bereits VOR jeder Antwort — komplett
stillschweigend, identisch zum Verhalten bei einer Firewall-Blockade. Ein
Timeout bei diesem Tool bedeutet also nicht zwingend "nicht erreichbar",
sondern kann auch "erreichbar, aber tls-auth/tls-crypt aktiv" heissen. Wer
das eindeutig unterscheiden will: testweise tls-auth/tls-crypt kurz
deaktivieren und erneut testen, oder direkt mit einem echten OpenVPN-Client
gegentesten.