Thema Openvpn: Road Warrior & Site-to-Site
**OpenVPN** ermöglicht die sichere und verschlüsselte Kommunikation über unsichere Netzwerke (wie das Internet) mithilfe des **SSL/TLS-Protokolls**. Wir unterscheiden hierbei zwei gängige Szenarien:
- **Road Warrior:** Einzelne Clients (Laptops, Handys) verbinden sich mit einem zentralen Server.
- **Site-to-Site (Tunnel-Server):** Zwei Netzwerke verbinden sich permanent über einen Tunnel.
**Wichtiger Hinweis zum Routing:** Damit das Routing funktioniert, muss das **IP-Forwarding** auf dem Server aktiviert sein (net.ipv4.ip_forward = 1 und net.ipv6.conf.all.forwarding = 1 in /etc/sysctl.conf).
Abschnitt 1: Road Warrior Konfiguration (Server und Client)
Road Warrior ist der Standardfall für mobile Benutzer. Der Server weist den Clients individuelle IPs zu und leitet den relevanten Verkehr in das Unternehmensnetzwerk.
1. Server-Konfiguration (server.conf):
Der Server lauscht auf Port **1194** (TCP) und nutzt das Tunnel-Netzwerk **10.2.100.0/24** (IPv4) sowie **fd00:10:2:100::/64** (IPv6).
# Server-Konfig (Auszug, Road Warrior)
dev tunrw
port 1194
proto tcp-server
server 10.2.100.0 255.255.255.0
server-ipv6 fd00:10:2:100::/64
tls-auth /etc/openvpn/keys/tls-auth.key 0
push "route 172.20.20.0 255.255.255.0"
...
2. Road Warrior Client-Konfiguration (RoadWarriorClient.ovpn):
Die Client-Konfiguration ist sehr schlank. Wichtig ist die Direktive **remote-cert-tls server** zur Server-Überprüfung und **key-direction 1** für tls-auth.
# Allgemein
client
remote vpn.ihredomain.com
port 1194
dev tun
proto tcp
# Sicherheit
remote-cert-tls server
key-direction 1
data-ciphers AES-128-GCM:AES-256-GCM:AES-128-CBC
cipher AES-256-CBC
auth SHA256
verb 3
<cert>
-----BEGIN CERTIFICATE-----
MIIGWTCCBUGgAwIBAgICAcowDQYJKoZIhvcNAQEMBQAwgZcxKTAnBgkqhkiG9w0B
... [Client-Zertifikat gekürzt]
WJ4
-----END CERTIFICATE-----
</cert>
<ca>
-----BEGIN CERTIFICATE-----
MIIESTCCAzGgAwIBAgICAJkwDQYJKoZIhvcNAQEMBQAwgZ8xCzAJBgNVBAYTAkNI
... [CA Zertifikate gekürzt]
sEI=
-----END CERTIFICATE-----
</ca>
<key>
-----BEGIN PRIVATE KEY-----
MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIACNZnybUVjNl5HaEs
... [Client Private Key gekürzt]
6w==
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
8d997092d77a59dfe401489ff9f74e0e
... [tls-auth key gekürzt]
1e7cbd3087dfb56ffa2c07db5e0574e4
-----END OpenVPN Static key V1-----
</tls-auth>
Abschnitt 2: Tunnel-Server (Site-to-Site) Konfiguration
Hier verbinden wir zwei Netzwerke permanent miteinander. Der Server und der Client benötigen spezifische Routen und Konfigurationsdateien (**CCD** - Client-Config-Dir), um das jeweilige Zielnetzwerk zu "kennen".
1. Tunnel-Server-Konfiguration (fbt-ch.conf):
Der Tunnel-Server nutzt dedizierte Routen (**route**) und gepushte Routen (**push route**). Wichtig ist die Direktive client-config-dir ccd, die das Verzeichnis für die client-spezifischen Routen festlegt.
# Server-Konfig (Auszug, Site-to-Site)
dev tunfbt
port 1194
proto tcp-server
server 10.60.118.0 255.255.255.0
server-ipv6 fd00:10:60:118::/64
push "route 10.0.10.0 255.255.255.0"
route 172.20.20.0 255.255.255.0
client-config-dir ccd
...
2. Tunnel-Server CCD-Datei (Server-seitig):
Die **iroute**-Direktive im CCD-Verzeichnis des Servers teilt ihm mit, welche Netze sich **hinter** dem Tunnel-Client befinden und an ihn gesendet werden müssen.
root@vpn-server:/etc/openvpn# cat ccd/tunnel-client
iroute 172.20.20.0 255.255.255.0
iroute 192.168.178.0 255.255.255.0
iroute 10.3.100.0 255.255.255.0
iroute-ipv6 "fd00:172:20:20::/64"
3. Tunnel-Client-Konfiguration (cfbt-ch.conf):
Der Client agiert im **tcp-client**-Modus und verbindet sich zur **remote** IP des Servers.
dev tuncfbt-ch
client
proto tcp-client
port 1194
float
nobind
# WICHTIG: Ersetzen Sie die IP des Servers (Anonymisiert)
remote 1.2.3.4
# Zertifikats-Pfade (müssen auf dem Client existieren)
cert /etc/openvpn/server/vpn-client.pem
key /etc/openvpn/server/vpn-client-d.key
ca /etc/openvpn/server/vpn-sub.crt
# Sicherheit
remote-cert-tls server
# Logging
log-append /var/log/openvpn/tunnelname.log
passtos
verb 3
keepalive 10 60