OpenVPN ist eine bewährte Open-Source-VPN-Lösung. Sie ermöglicht sichere Verbindungen über das Internet für Remote-Zugriff und Standortvernetzung.
Warum OpenVPN?
Vorteile
- Hohe Sicherheit (OpenSSL)
- Plattformübergreifend
- Flexibel konfigurierbar
- NAT-freundlich (UDP/TCP)
- Große CommunityOpenVPN vs. WireGuard
| Feature | OpenVPN | WireGuard | |---------|---------|-----------| | Protokoll | SSL/TLS | Kernel-Modul | | Konfiguration | Komplex | Einfach | | Performance | Gut | Sehr gut | | Code-Größe | ~100.000 Zeilen | ~4.000 Zeilen | | Verbreitung | Sehr hoch | Wachsend |
Installation
Debian/Ubuntu
apt update
apt install openvpn easy-rsaCentOS/RHEL
dnf install epel-release
dnf install openvpn easy-rsaPKI einrichten (Easy-RSA)
Easy-RSA vorbereiten
# Verzeichnis erstellen
mkdir -p /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsaVariablen anpassen
# /etc/openvpn/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY "DE"
set_var EASYRSA_REQ_PROVINCE "Bayern"
set_var EASYRSA_REQ_CITY "Muenchen"
set_var EASYRSA_REQ_ORG "Example GmbH"
set_var EASYRSA_REQ_EMAIL "admin@example.com"
set_var EASYRSA_REQ_OU "IT"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 1080PKI initialisieren
./easyrsa init-pkiCA erstellen
./easyrsa build-ca nopass
# Common Name: OpenVPN-CAServer-Zertifikat
./easyrsa gen-req server nopass
./easyrsa sign-req server serverDH-Parameter
./easyrsa gen-dhTLS-Auth-Key
openvpn --genkey secret /etc/openvpn/ta.keyClient-Zertifikat
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1Server-Konfiguration
Zertifikate kopieren
cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/pki/private/server.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/Server-Konfiguration
# /etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
# Routing
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Keepalive
keepalive 10 120
# Verschlüsselung
cipher AES-256-GCM
auth SHA256
# Kompression (optional)
# compress lz4-v2
# push "compress lz4-v2"
# Benutzer/Gruppe
user nobody
group nogroup
# Persistenz
persist-key
persist-tun
# Logging
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3Log-Verzeichnis
mkdir -p /var/log/openvpnIP-Forwarding aktivieren
Kernel-Parameter
# /etc/sysctl.conf
net.ipv4.ip_forward = 1sysctl -pNAT-Regel (iptables)
# Für eth0 als Internet-Interface
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# Persistent machen
apt install iptables-persistent
netfilter-persistent saveFirewall
ufw allow 1194/udp
ufw allow OpenSSH
ufw enableServer starten
systemctl enable --now openvpn@server
systemctl status openvpn@serverClient-Konfiguration
Dateien sammeln
# Server:
/etc/openvpn/easy-rsa/pki/ca.crt
/etc/openvpn/easy-rsa/pki/issued/client1.crt
/etc/openvpn/easy-rsa/pki/private/client1.key
/etc/openvpn/ta.keyClient-Konfiguration
# client1.ovpn
client
dev tun
proto udp
remote server.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
cipher AES-256-GCM
auth SHA256
verb 3Einzel-Datei-Konfiguration
# client1.ovpn (alles in einer Datei)
client
dev tun
proto udp
remote server.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
auth SHA256
key-direction 1
verb 3
<ca>
-----BEGIN CERTIFICATE-----
... (Inhalt von ca.crt)
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
... (Inhalt von client1.crt)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
... (Inhalt von client1.key)
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
... (Inhalt von ta.key)
-----END OpenVPN Static key V1-----
</tls-auth>Client-Skript erstellen
#!/bin/bash
# /etc/openvpn/make-client.sh
CLIENT=$1
EASYRSA=/etc/openvpn/easy-rsa
OUTPUT=/etc/openvpn/clients
mkdir -p $OUTPUT
cd $EASYRSA
./easyrsa gen-req $CLIENT nopass
./easyrsa sign-req client $CLIENT
cat > $OUTPUT/$CLIENT.ovpn << EOF
client
dev tun
proto udp
remote server.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
auth SHA256
key-direction 1
verb 3
<ca>
$(cat $EASYRSA/pki/ca.crt)
</ca>
<cert>
$(cat $EASYRSA/pki/issued/$CLIENT.crt)
</cert>
<key>
$(cat $EASYRSA/pki/private/$CLIENT.key)
</key>
<tls-auth>
$(cat /etc/openvpn/ta.key)
</tls-auth>
EOF
echo "Client-Konfiguration erstellt: $OUTPUT/$CLIENT.ovpn"chmod +x /etc/openvpn/make-client.sh
./make-client.sh client2Zertifikat widerrufen
cd /etc/openvpn/easy-rsa
./easyrsa revoke client1
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn/# /etc/openvpn/server.conf
crl-verify crl.pemsystemctl restart openvpn@serverSite-to-Site VPN
Server-Konfiguration
# /etc/openvpn/site-server.conf
port 1195
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
server 10.9.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp-site.txt
# Routen zum Remote-Netzwerk
route 192.168.2.0 255.255.255.0
# Client-spezifische Konfiguration
client-config-dir /etc/openvpn/ccd
keepalive 10 120
cipher AES-256-GCM
persist-key
persist-tunClient-Konfiguration (Site)
# /etc/openvpn/ccd/site-client
# IP für diesen Client
ifconfig-push 10.9.0.2 10.9.0.1
# Route zum entfernten Netzwerk
iroute 192.168.2.0 255.255.255.0Monitoring
Status-Datei
cat /var/log/openvpn/openvpn-status.logVerbundene Clients
# Aus Status-Datei
cat /var/log/openvpn/openvpn-status.log | grep "CLIENT_LIST"Management-Interface
# /etc/openvpn/server.conf
management localhost 7505
# Verbinden
telnet localhost 7505
status
helpTroubleshooting
Logs prüfen
tail -f /var/log/openvpn/openvpn.log
journalctl -u openvpn@server -fVerbindung testen
# Client-Seite
ping 10.8.0.1
# Server-Seite
ping 10.8.0.6TUN-Device prüfen
ip addr show tun0Häufige Fehler
# TLS Error
# → Zeit synchronisieren (NTP)
# → Zertifikate prüfen
# Cannot allocate TUN
# → modprobe tun
# → /dev/net/tun erstellen
# Connection refused
# → Firewall prüfen
# → Port/Protokoll prüfenSicherheits-Tipps
Empfohlene Einstellungen
# /etc/openvpn/server.conf
# TLS 1.2 minimum
tls-version-min 1.2
# Starke Cipher
cipher AES-256-GCM
auth SHA256
# TLS-Auth
tls-auth ta.key 0
# Keine Kompression (VORACLE-Angriff)
# compress lz4-v2 # Nicht empfohlenClient-Isolierung
# Clients können sich nicht untereinander erreichen
client-to-client # NICHT setzenZusammenfassung
| Datei | Beschreibung | |-------|--------------| | server.conf | Server-Konfiguration | | ca.crt | CA-Zertifikat | | server.crt/key | Server-Zertifikat | | dh.pem | DH-Parameter | | ta.key | TLS-Auth-Key |
| Befehl | Funktion | |--------|----------| | systemctl status openvpn@server | Status prüfen | | easyrsa gen-req client | Client-Zertifikat | | easyrsa revoke client | Zertifikat widerrufen | | easyrsa gen-crl | CRL aktualisieren |
Fazit
OpenVPN bietet flexible und sichere VPN-Verbindungen. Die Einrichtung erfordert PKI-Verständnis, aber Easy-RSA vereinfacht die Zertifikatsverwaltung. Für moderne Setups ist WireGuard eine einfachere Alternative, aber OpenVPN bleibt für komplexe Szenarien und ältere Clients die bewährte Wahl. Achten Sie auf aktuelle Verschlüsselungseinstellungen und regelmäßige Updates.