OpenVPN wird komplett über Optionen gesteuert — es gibt keine eigene Konfigurationssprache. Ob Client, Server oder Diagnose: Alles läuft über das Kommando openvpn und eine Datei mit Optionen. Dieser Artikel ist die Befehlsreferenz; den Aufbau mit Kontroll- und Datenkanal erklärt der Artikel OpenVPN.

Client starten

openvpn --config client.ovpn
openvpn --config client.ovpn --daemon
openvpn --config client.ovpn --auth-user-pass --askpass
openvpn --config client.ovpn --log-append /var/log/openvpn-client.log --verb 3

Häufige Optionen in der Client-Datei: remote host 1194, proto udp, dev tun, nobind, persist-key, persist-tun, resolv-retry infinite, remote-cert-tls server, cipher AES-256-GCM, auth SHA256 sowie tls-crypt ta.key für den geschützten Kontrollkanal. Ein redirect-gateway def1 schickt den gesamten Verkehr durch den Tunnel; route-nopull verhindert, dass der Server Routen vorgibt.

Schlüssel und Zertifikate erzeugen

Für eine eigene Zertifizierungsstelle genügt easyrsa, das mit den meisten Paketen als easyrsa beiliegt:

./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
./easyrsa gen-dh
openvpn --genkey secret ta.key

Der Aufruf gen-dh erzeugt die Diffie-Hellman-Parameter und dauert je nach Schlüssellänge Minuten. Wer ECDH verwendet, kommt ohne aus und setzt im Server dh none.

Server über die Kommandozeile

openvpn --mode server --tls-server --dev tun
  --server 10.8.0.0 255.255.255.0 --topology subnet
  --ca ca.crt --cert server.crt --key server.key --dh dh2048.pem
  --push "redirect-gateway def1" --push "dhcp-option DNS 10.8.0.1"
  --ifconfig-pool-persist ipp.txt --client-to-client --keepalive 10 60

Für den Dauerbetrieb nimmt man die systemd-Instanz, die eine Datei aus /etc/openvpn/server/ liest:

systemctl start Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
systemctl enable Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
systemctl status Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
journalctl -u openvpn-server@server -f

Status und Diagnose

openvpn --config server.conf --status /var/log/openvpn/status.log 60
grep CLIENT_LIST /var/log/openvpn/status.log
grep ROUTING_TABLE /var/log/openvpn/status.log
openvpn --show-ciphers        # verfügbare Verschlüsselungsverfahren
openvpn --show-tls            # unterstützte TLS-Versionen
openvpn --config server.conf --management 127.0.0.1 7505 --management-client
  • Statusdatei: Mit --status datei 60 schreibt der Server jede Minute eine Übersicht mit Kennzahlen und den Tabellen CLIENT_LIST (verbundene Clients, übertragene Bytes, zugewiesene Adresse) und ROUTING_TABLE. Das ist die Grundlage jedes Monitorings, weil die Datei maschinenlesbar ist.
  • Verbindung steht, aber kein Verkehr: Weiterleitung einschalten (net.ipv4.ip_forward=1) und die NAT-Regel für das Tunnelnetz prüfen.
  • TLS-Fehler: Fast immer ein Zeit- oder Namensproblem — remote-cert-tls server zusammen mit verify-x509-name bricht ab, wenn der Zertifikatsname nicht passt.
  • Detailsicht: --verb 4 bis --verb 6 gibt die Aushandlung aus; höhere Stufen werden sehr gesprächig und gehören nicht in den Dauerbetrieb.
  • Durchsatz: Seit Version 2.6 läuft der Datenkanal mit Data Channel Offload im Kernel, sofern verfügbar — spürbar schneller als der klassische Userspace-Pfad.

Verwandte Artikel

Die Protokollmechanik erklärt OpenVPN; die Schicht-3-Alternative steht in den IPsec-Befehle, die schlanke Kernel-Lösung in den WireGuard-Befehle. Zertifikate und Prüfketten behandeln X.509, PKI, Zertifizierungsstelle und CRL, den TLS-Handshake TLS-Handshake und SSL/TLS. Einwahl über fremde Tunnelprotokolle zeigen L2TP-Befehle und SSTP-Befehle.