Technologieführer

OpenVPN auf FreeBSD 12.0 installieren und konfigurieren

6 min read Anleitung Aktualisiert 17 Oct 2025
OpenVPN auf FreeBSD 12.0: Installation & Konfiguration
OpenVPN auf FreeBSD 12.0: Installation & Konfiguration

Einleitung

OpenVPN ist eine Open-Source-Software, mit der Sie über das öffentliche Internet ein sicheres privates Netzwerk (VPN) aufbauen können. OpenVPN verwendet die OpenSSL-Bibliothek zur Verschlüsselung und bietet mehrere Authentifizierungsmechanismen: zertifikatsbasierte Authentifizierung, Pre-shared Keys und Benutzername/Passwort. Diese Anleitung beschreibt die Einrichtung eines OpenVPN-Servers auf FreeBSD 12.0 mit zertifikatbasierter Authentifizierung.

Worum es hier geht: Installation von OpenVPN, Erstellen einer eigenen CA und Zertifikate, Konfiguration des Servers, Absicherung per pf, Aktivierung von IP-Forwarding und abschließende Tests.

Wichtig: Diese Anleitung geht von root-Rechten auf dem Zielsystem aus und davon, dass pf als Firewall benutzt wird.

Voraussetzungen

  • FreeBSD 12.0 (aktualisiert)
  • Mindestens 512 MB RAM und 1 CPU (für Labortests ausreichend)
  • Root-Zugriff (oder sudo)
  • pf-Firewall konfigurierbar
  • Verbindung zum Internet zum Herunterladen von Paketen

Hinweis: In Produktionsumgebungen empfiehlt sich mindestens 2 GB RAM und regelmäßige Backups der PKI-Schlüssel.

Was wir tun werden

  • OpenVPN auf FreeBSD installieren
  • Easy-RSA-Variablen anpassen
  • CA, Server- und Client-Zertifikate erstellen
  • OpenVPN konfigurieren
  • pf-Firewall-Regeln anpassen
  • IP-Forwarding aktivieren
  • Client-Konfiguration erzeugen und testen

Schritt 1 - OpenVPN installieren

Update der Paketliste und Installation von OpenVPN:

pkg update  
pkg install openvpn

Nach der Installation OpenVPN beim Systemstart aktivieren und die Tunnel-Interface-Variable setzen:

sysrc openvpn_enable="YES"  
sysrc openvpn_if="tun"

Jetzt ist das OpenVPN-Paket auf dem FreeBSD-System installiert.

OpenVPN Dienst installiert und aktiviert auf FreeBSD


Schritt 2 - Variablen für Zertifikate setzen

Wir nutzen Easy-RSA zur PKI-Verwaltung. Erstelle das Verzeichnis für OpenVPN und kopiere easy-rsa hinein:

mkdir -p /usr/local/etc/openvpn/  
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/

Wechsel in das easy-rsa-Verzeichnis und bearbeite die Datei vars mit dem Editor deiner Wahl:

cd /usr/local/etc/openvpn/easy-rsa/  
vim vars

Passe die Variablen an deine Organisation und dein Land an. Beispielkonfiguration (in “vars”):

set_var EASYRSA             "$PWD"  
set_var EASYRSA_PKI         "$EASYRSA/pki"  
set_var EASYRSA_DN         "cn_only"  
set_var EASYRSA_REQ_COUNTRY     "DE"  
set_var EASYRSA_REQ_PROVINCE    "Frankfurt"  
set_var EASYRSA_REQ_CITY    "Frankfurt"  
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"  
set_var EASYRSA_REQ_EMAIL      "[email protected]"  
set_var EASYRSA_REQ_OU         "HAKASE-LABS EASY CA"  
set_var EASYRSA_KEY_SIZE    2048  
set_var EASYRSA_ALGO        rsa  
set_var EASYRSA_CA_EXPIRE       7500  
set_var EASYRSA_CERT_EXPIRE     365  
set_var EASYRSA_NS_SUPPORT      "no"  
set_var EASYRSA_NS_COMMENT      "HAKASE-LABS CERTIFICATE AUTHORITY"  
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"  
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"  
set_var EASYRSA_DIGEST          "sha256"

Speichern und die Datei ausführbar machen:

chmod +x vars

Easy-RSA Variablen anpassen


Schritt 3 - Zertifikate erzeugen

Initialisiere das PKI-Verzeichnis und erstelle CA, Server- und Client-Zertifikate sowie DH-Parameter und CRL (Certificate Revocation List):

cd /usr/local/etc/openvpn/easy-rsa/  
./easyrsa.real init-pki
  • CA erstellen:
./easyrsa.real build-ca

Du wirst nach einer Passphrase für den CA-Schlüssel gefragt. Merke dir diese sicher.

CA Zertifikat wurde erstellt

  • Server-Anfrage erstellen und signieren:
./easyrsa.real gen-req openvpn-bsd nopass
./easyrsa.real sign-req server openvpn-bsd

Verifiziere das Server-Zertifikat:

openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt
  • Client-Zertifikat erstellen und signieren:
./easyrsa.real gen-req client01 nopass
./easyrsa.real sign-req client client01

Verifizieren:

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
  • DH-Parameter und CRL erstellen:
./easyrsa.real gen-crl  
./easyrsa.real gen-dh

Kopiere die benötigten Dateien in die OpenVPN-Konfigurationspfade:

mkdir -p /usr/local/etc/openvpn/{server,client}
cp pki/ca.crt /usr/local/etc/openvpn/server/  
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/  
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/
cp pki/ca.crt /usr/local/etc/openvpn/client/  
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/  
cp pki/private/client01.key /usr/local/etc/openvpn/client/
cp pki/dh.pem /usr/local/etc/openvpn/server/  
cp pki/crl.pem /usr/local/etc/openvpn/server/

Server- und Client-Zertifikate kopiert

DH-Parameter und CRL

Wichtig: Bewahre private Schlüssel (pki/private/*.key) sicher und offline auf, falls möglich.


Schritt 4 - OpenVPN konfigurieren

Erstelle die Server-Konfiguration unter /usr/local/etc/openvpn/openvpn.conf:

cd /usr/local/etc/openvpn/  
vim openvpn.conf

Beispielkonfiguration (passe Pfade und optional DNS an):

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key

#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Starte den Service und prüfe den Status:

service openvpn start  
service openvpn status

Prüfe die gebundenen Sockets:

sockstat -l4

OpenVPN läuft und bindet an UDP Port 1194

Hinweis: Passe “duplicate-cn” nur an, wenn mehrere Clients dasselbe Zertifikat verwenden sollen. Besser ist pro Client ein eigenes Zertifikat.


Schritt 5 - PF-Firewall konfigurieren

Wir erstellen NAT- und Pass-Regeln, damit VPN-Traffic ins Internet geroutet wird.

Bearbeite /usr/local/etc/pf.conf oder deine zentrale pf-Konfigurationsdatei:

cd /usr/local/etc/  
vim pf.conf

Beispielausschnitt (Annahme: externes Interface ist $ext_if, VPN-Interface soll tun0 sein):

# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"

# reassemble all fragmented packets before filtering them
scrub in on $ext_if all fragment reassemble

# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip

# Allow Connection to VPN Server
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state

# Pass all connection on the VPN Interface
pass in on $vpn_if from any to any

Prüfe und lade die pf-Regeln neu:

service pf check  
service pf reload

Prüfe die Regeln mit:

pfctl -sr  
pfctl -sn

PF-Konfiguration und Regeln überprüft

Wichtig: Ersetze $ext_if und $ext_ip durch die tatsächlichen Interface- und IP-Namen.


Schritt 6 - IP-Forwarding aktivieren

Ermögliche IPv4- und IPv6-Weiterleitung in /etc/sysctl.conf:

vim /etc/sysctl.conf

Füge hinzu:

net.inet.ip.forwarding=1  
net.inet6.ip6.forwarding=1

Lade die sysctl-Einstellungen:

sysctl -f /etc/sysctl.conf

Aktiviere das System als Gateway in /etc/rc.conf:

sysrc gateway_enable="YES"

Danach Neustart empfohlen:

reboot

Port-Forwarding und Gateway aktiviert


Schritt 7 - Client einrichten

Beispiel-Client-Konfiguration (/usr/local/etc/openvpn/client/client01.ovpn):

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Ersetze “xxx.xxx.xxx.xxx” durch die öffentliche IP oder DNS-Name deines Servers. Lade die Dateien ca.crt, client01.crt, client01.key und client01.ovpn auf den Client-Rechner und starte den Client:

openvpn --config client01.ovpn

Client-Konfiguration bereitgestellt


Schritt 8 - Testen

Auf dem Client nach erfolgreichem Verbindungsaufbau das Interface prüfen:

ifconfig tun0

Ping an den Server intern:

ping -c3 10.5.5.1

Prüfe die öffentliche IP aus dem VPN:

curl ipinfo.io

Verbindung erfolgreich, externe IP des Servers wird angezeigt

Wenn diese Tests funktionieren, ist der grundlegende VPN-Server einsatzbereit.


Sicherheits-Hardening und Best Practices

  • Verwende für produktive Umgebungen RSA-4096 oder ECDSA mit starken Kurven (z. B. secp384r1). Beachte Kompatibilität mit Clients.
  • Setze starke Passphrasen für die CA und sichere die privaten Schlüssel offline.
  • Deaktiviere ‘duplicate-cn’ und nutze pro Client eigene Zertifikate.
  • Verwalte gesperrte Zertifikate mit crl.pem; entferne Benutzer durch Hinzufügen zur CRL und erneutes Laden in OpenVPN.
  • Aktiviere und überwache Logs (/var/log/openvpn.log) und nutze ein zentrales Log-Management.
  • Prüfe TLS-Konfigurationen regelmäßig mit Tools wie “openssl s_client” oder Online-Scannern.

Sicherheits-Checklist:

  • CA-Schlüssel gesichert
  • CRL-Prozess eingerichtet
  • Logging auf separatem Medium
  • Regelmäßige Key-Rotation geplant

Fehlerbehebung (Troubleshooting)

  • OpenVPN startet nicht: Prüfe /var/log/openvpn.log und syslog.
  • Port belegt: Prüfe “sockstat -l4” und passe port/proto an.
  • Clients erhalten keine Internetverbindung: Prüfe pf NAT-Regeln, sysctl ip.forwarding und routing table.
  • Zertifikatfehler: Überprüfe Ablaufdaten, CN-Felder und das CA-Zertifikat mit openssl verify.
  • CRL greift nicht: Stelle sicher, dass crl-verify in openvpn.conf gesetzt ist und crl.pem aktuell ist.

Wichtige Kommandos zur Diagnose:

service openvpn status
tail -n 200 /var/log/openvpn.log
pfctl -sr
pfctl -sn
ifconfig tun0
netstat -rn

Wann diese Anleitung nicht passt (Limitierungen)

  • Wenn Sie TLS-Auth via tls-auth oder TLS Crypt wünschen, sind zusätzliche Schlüssel und Konfigurationsschritte nötig.
  • Für hochverfügbare Setups (HA/Failover) benötigt man zusätzlich Load-Balancer oder VRRP/Carp-Setups.
  • Bei reinen IPv6-Only-Setups sind zusätzliche Anpassungen an Pf und OpenVPN nötig.

Alternativen: WireGuard (einfacher, moderner, schnellere Crypto-Primitive), IPsec (integriert in viele Geräte), OpenVPN mit TLS-Crypt für zusätzlichen Schutz.


Mini-Playbook / SOP für Rollout (Kurzversion)

  1. System-Update und Paketinstallation testen.
  2. Easy-RSA konfigurieren und PKI erzeugen.
  3. Server-Konfig testen (dry-run) und Logs prüfen.
  4. Firewall- und NAT-Regeln minimal setzen und prüfen.
  5. IP-Forwarding aktivieren.
  6. Test-Client erstellen, verbinden und Funktionen prüfen (Ping, DNS, Internet).
  7. Monitoring einrichten und Playbook zur Key-Rotation bereitstellen.

Rollout-Checkliste nach Rolle

Administrator:

  • CA und Server-Schlüssel erstellt und sicher archiviert.
  • Firewall- und NAT-Regeln erstellt.
  • Start-/Stop-Skripte und Monitoring konfiguriert.

Netzwerk-Ingenieur:

  • Routing/MTU geprüft (tun/tap MTU-Anpassung bei Fragmentierung).
  • Performance-Tests (Durchsatz) geplant.

Security-Officer:

  • Key-Rotation-Plan vorhanden.
  • CRL-Prozess dokumentiert.
  • Logging/Korrelationsregeln konfiguriert.

Kriterien für Tests

  • Client kann 10.5.5.1 pingen (3/3 Pakete).
  • DNS-Auflösung funktioniert über die pushed DNS-Server.
  • curl ipinfo.io zeigt die öffentliche Server-IP.
  • OpenVPN-Prozess läuft und bindet an UDP 1194.
  • pf-NAT arbeitet korrekt und es gibt keine Paketverluste durch Fragmentierung.

Kurzes Glossar (1-Zeiler)

  • CA: Certification Authority, signiert Server/Client-Zertifikate.
  • CRL: Certificate Revocation List, Liste gesperrter Zertifikate.
  • DH-Param: Diffie-Hellman-Parameter für Schlüsselaustausch.
  • PKI: Public Key Infrastructure, System zur Verwaltung von Zertifikaten.

Datenschutz / GDPR-Hinweis

Zertifikate enthalten häufig Identifikationsdaten (CN, E-Mail). Speichern Sie personenbezogene Daten nur so weit wie nötig und dokumentieren Sie, welche Daten wann und wo gespeichert werden. Bei Zugriff auf Logdaten sicherstellen, dass personenbezogene Informationen nur nach Bedarf und mit Auditierung zur Verfügung stehen.


Beispiel-Mermaid-Entscheidungsbaum zur Umsetzung

flowchart TD
  A[Start: Bedarf für VPN] --> B{Produktiv oder Test}
  B -->|Test| C[Einzelserver, einfache Konfiguration]
  B -->|Produktiv| D{HA benötigt?}
  D -->|Nein| E[Server + Monitoring + Backup PKI]
  D -->|Ja| F[HA-Setup: Loadbalancer/VRRP + Sync]
  C --> G[WireGuard prüfen als Alternative]
  E --> H[Produktiv: Security-Hardening]

Zusammenfassung

Das Aufsetzen eines OpenVPN-Servers auf FreeBSD 12.0 umfasst Paketinstallation, PKI-Erstellung mit Easy-RSA, Konfiguration von OpenVPN, Anpassung der pf-Firewall und Aktivierung von IP-Forwarding. Zusätzliche Maßnahmen wie Security-Hardening, CRL-Verwaltung und Monitoring sind essenziell für den produktiven Betrieb.

Referenzen

Autor
Redaktion

Ähnliche Materialien

KI-Apps zum Englischlernen – Top 10 & Auswahlhilfe
Sprachen

KI-Apps zum Englischlernen – Top 10 & Auswahlhilfe

Untertitel in Final Cut Pro hinzufügen
Video-Editing

Untertitel in Final Cut Pro hinzufügen

BIKA LIMS auf Ubuntu Server in 15 Minuten installieren
LIMS Anleitung

BIKA LIMS auf Ubuntu Server in 15 Minuten installieren

iPhone-Akku optimieren: Laufzeit & Gesundheit
Akku

iPhone-Akku optimieren: Laufzeit & Gesundheit

Fehler 0x800F0909 bei Sprachpaket-Installation beheben
Windows

Fehler 0x800F0909 bei Sprachpaket-Installation beheben

launcher-list-indicator: Unity Launcher mit Profilen
Ubuntu

launcher-list-indicator: Unity Launcher mit Profilen