Hierbei wird ein Schlüssel erzeugt, der vom Server und Client gleichermaßen genutzt wird.
Hier wird ein gemeinsames Zertifizierungsinstitut (CA) genutzt durch die für den Server und die Clients Zertifikate (Certs) ausgestellt werden.
Zertifikate können mittels OpenVPN easy-rsa erstellt und widerrufen werden.
verify-client-cert none|optional|require im Server)Auch Multi Factor Authentication z.B. mittels TOTP und OKLA sind weitere Möglichkeiten, die zusätzlich eingebunden werden können.1
Eine gute Grundlage zur Konfiguration bieten die Beispeilkonfigurationen unter /usr/share/doc/openvpn bzw. /usr/share/doc/packages/openvpn. Hier findet man sowohl einen server.conf als auch client.conf. Dort sind lediglich die entsprechenden Parameter anzupassen.
Hier benutzen wir OpenVPN easy-rsa. Alternativ ist es auch möglich andere Tools wie bspw. OpenSSL für die Public Key Infrastruktur zu nutzen. Auch easy-rsa nimmt hier Gebrauch von OpenSSL, bietet jedoch die für OpenVPN relevanten Funktionen benutzerfreundlicher in dem easy-rsa Tool gebündelt an.
CA einrichten
$ ./easyrsa init-pki
$ ./easyrsa build-ca
CSR auf Client-System
Das Kommando nicht auf dem selben System wie das CA ausführen
$ ./easyrsa init-pki
$ ./easyrsa gen-req ClientName
Client CSR importieren
$ ./easyrsa import-req /tmp/client-csr.req ClientName
Client CSR signieren
$ ./easyrsa sign-req client ClientName
DH Parameter generieren
$ ./easyrsa gen-dh
Zertifikat für den Server erstellen
$ ./easyrsa build-server-full server
Statische IP für den Nutzer
Falls erforderlich, die Konfigurationsdatei server.conf bearbeiten, um einem CLient eine persistente statische IP zuzuweisen. In dem Fall gehe wie folgt vor:
$ mkdir /etc/openvpn/ccd
$ chmod 744 /etc/openvpn/ccd
$ chown -R nobody:nogroup /etc/openvpn/ccd
$ vim /etc/openvpn/ccd/ClientName
In der Datei /etc/openvpn/ccd/ClientName folgendes notieren:
#ifconfig-push Client-IP Server-IP
ifconfig-push 10.24.1.12 10.24.1.1
Bei einer tap Verbindung kann auch folgende Schreibweise verwendet werden im CCD:
ifconfig-push 10.24.1.2 255.255.255.0
Routen mitteilen
Dem Client können mittels entsprechender Einträge in der server.conf bzw. in der CCD Datei bestimmte Routen mitgeteilt werden:
# route Netz-ID Netzmaske Gateway Metrik
push "route 192.168.1.0 255.255.255.0 192.168.1.1 1"
push "route 0.0.0.0 0.0.0.0 10.24.1.1 0"
push "route-ipv6 2000::/3"
Beispielkonfiguration entsprechend bearbeiten und Server starten:
$ sudo openvpn --config server.conf
Beispielkonfiguration entsprechend bearbeiten und Client verbinden:
Linux
$ sudo openvpn --config client.conf
bzw. eine .ovpn Konfiguration.
macOS
Hier nutzt man am besten das Tool Tunnelblick. Anschließend auf die .ovpn doppelt klicken. Falls Tunnelblick nach Zugangsdaten fragt, den Benutzernamen & Passwort des lokalen Accounts auf dem MacBook eingeben. Anschließend auf das Tunnelblick Icon oben klicken und mit dem geladenen VPN-Profil verbinden.
Windows
Das OpenVPN Client herunterladen & installieren. Dabei möglichst die Default-Werte beibehalten. Bei Bedarf kann unter Netzwerkgeräten in der Systemsteuerung der Gerätename des TAP-Win32 Adapters umbenannt werden. Anschließend einfach auf das .ovpn Profil doppelt klicken und mit dem geladenen VPN Profil verbinden.
Mittels systemctl ist es möglich, Dienste zu konfigurieren. Ein Beispiel-Dienst könnte wie folgt aussehen:
/usr/lib/systemd/system/openvpn@server.service
[Unit]
Description=%i OpenVPN tunnel
Before=systemd-user-sessions.service
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /dir/to/server.conf --daemon --writepid /run/openvpn/%i.pid --status /run/openvpn/%i.status
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/openvpn/%i.pid
KillMode=process
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
DeviceAllow=/dev/net/tap rw
RestartSec=5s
Restart=on-failure
[Install]
WantedBy=multi-user.target
Nun kann der Dienst mittels systemctl <status | start | restart | stop> openvpn@server.service verwaltet werden.