Testscript check_openvpn.py: prueft OpenVPN-Server-Erreichbarkeit (UDP-Handshake-Probe / TCP-Connect)
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user