OpenVPN Installieren und Konfigurieren

Aus Laub-Home Wiki

In dieser Anleitung gehe ich auf die Installation und Konfiguration von OpenVPN unter Debian Linux (hier Version 10) ein. Ziel ist es einen OpenVPN Server mit allen nötigen Zertifikaten online zu bringen, damit sich Clients verbinden können. Ein Site 2 Site VPN ist ebenfalls mit OpenVPN machbar.

Installation unter Debian Linux

Die Installation von openvpn unter Debian Linux machen wir mittels Paketmanager:

apt-get install openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip /etc/openvpn/server.conf.gz

Nun müssen wir noch dem System erlauben IPv4 Pakete auch ins VPN weiterzuleiten: /etc/sysctl.conf

net.ipv4.ip_forward=1

aktiviert wird es ohne Neustart dann so:

sysctl -p

Nun haben wir schon eine OpenVPN Server Installation, samt Grundkonfiguration.

Konfiguration des Server

kommen wir zur Konfiguration des OpenVPN Servers.

Erstellung der Keys

Dazu laden wir uns als erstes das kleine helper Script EasyRSA herunter:

cd /etc/openvpn
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
tar -xzvf EasyRSA-unix-v3.0.6.tgz

Bitte auf die richtige Versionsnummer anpassen. Nun passen wir die vars Datei an. Dafür kopieren wir uns die example Datei und editieren diese im Anschluss.

cp /etc/openvpn/EasyRSA-v3.0.6/vars.example /etc/openvpn/EasyRSA-v3.0.6/vars

zuerst in der Datei vars folgende Variablen ein kommentierten und editieren:

/etc/openvpn/EasyRSA-v3.0.6/vars

. . .

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "California"
set_var EASYRSA_REQ_CITY       "San Francisco"
set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
set_var EASYRSA_REQ_EMAIL      "me@example.net"
set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

Nun ins Verzeichnis springen und die Server Zertifikate erstellen:

cd /etc/openvpn/EasyRSA-v3.0.6/

# Zertifikate erstellen
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey --secret ta.key

# Zertifikate kopieren
cp pki/private/server.key /etc/openvpn/
cp pki/reqs/server.req /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/ca.crt /etc/openvpn/
cp ta.key /etc/openvpn/
cp pki/dh.pem /etc/openvpn/

Nun erstellen wir noch ein Client Zertifikat:

mkdir /etc/openvpn/client1
cd /etc/openvpn/EasyRSA-v3.0.6/
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
cp pki/issued/client1.crt /etc/openvpn/client1/
cp pki/private/client1.key /etc/openvpn/client1/
cp /etc/openvpn/ta.key /etc/openvpn/client1/
cp /etc/openvpn/ca.crt /etc/openvpn/client1/

möchte man mehrere Clients anbinden, einfach die zwei Befehle ./easyrsa ... mit anderem Client Namen (client2, client3, clientX) beliebig oft ausführen.

Server Konfigurations Datei:

Folgendes habe ich in der Konfigurationsdatei im Vergleich zur Example Datei abgeändert:
/etc/openvpn/server.conf

... 

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh2048.pem 2048
dh dh.pem

...

# The second parameter should be '0'
# on the server and '1' on the clients.
tls-auth ta.key 0 # This file is secret
auth SHA256

...

#
# You can uncomment this out on
# non-Windows systems.
user nobody
group nogroup

...

Haben wir das Ganze konfiguriert, kommen wir noch zum automatischen Starten durch systemd. Dafür sagen wir dem systemd welche VPN Konfiguration/en er starten soll:

/etc/default/openvpn

AUTOSTART="server"

Entspricht der Konfigurationsdatei server.conf unter /etc/openvpn/. Zu guter Letzt aktualisieren wir den systemd Service und starten den openvpn Daemon neu.

systemctl daemon-reload
systemctl restart openvpn

Achtung!!! Der Port des Openvpn Servers (standard UDP 1194) muss in der Firewall freigeschaltet werden!

Allen Traffic durch das VPN Routen

Möchte man den Clients sagen, dass nach Verbindung aller Traffic durch das VPN geroutet werden soll und man somit durch den Tunnel surft, braucht man noch eine Anpassung in der OpenVPN Server Konfiguration

/etc/openvpn/server.conf

# Ändert das Default Gateway des Client auf den Tunnel
push "redirect-gateway def1 bypass-dhcp"
# DNS Server die der Client verwenden soll
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"

Damit der OpenVPN Server auch als Internet Freigabe Dienst fungieren darf, braucht man noch eine Firewall Regel, die alle Pakete des tun0 Interface maskiert. Bei Bedarf bitte das OpenVPN Netzwerk und das Outgoing Interface des Servers anpassen.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Konfiguration des Clients

OpenVPN bringt einige Client Möglichkeiten mit. Sei es eine Smartphone App für Android oder iOS, Windows, Linux oder MacOS.

Debian / Ubuntu Linux

Auch hier installieren wir als erstes openvpn via Paketmanager:

apt update && apt install openvpn

und kopieren uns die benötigten Client Zertifikate auf das System herüber

scp root@openvpnserver.domain.tld:/etc/openvpn/client1/* /etc/openvpn

nun sollten die folgenden Zertifikatsdateien im OpenVPN Ordner zu sehen sein:

-rw-------  1 root root 1241 Mar  8 19:44 ca.crt
-rw-------  1 root root 4536 Mar  8 19:44 client1.crt
-rw-------  1 root root 1704 Mar  8 19:44 client1.key
-rw-------  1 root root  636 Mar  8 19:44 ta.key

Als nächstes nutzen wir wieder die Beispielskonfiguration, die wir kopieren und editieren:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf

Nun hier folgendes Ändern:
/etc/openvpn/client1.conf

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote openvpnserver.domain.tld 1194

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert client1.crt
key client1.key

# If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth ta.key 1
auth SHA256
key-direction 1

auch hier sagen wir, falls das VPN automatisch aufgebaut werden soll, wie der Name ist:

/etc/default/openvpn

AUTOSTART="client"

Dann den OpenVPN Daemon starten:

systemctl daemon-reload
systemctl restart openvpn

Ein manueller Start kann mit folgendem Befehl initiert werden:

cd /etc/openvpn
openvpn --config client.conf

Windows

Den Windows Client bekommt ihr hier:

Die Installation einfach starten und nach Standard Auswahl installieren.

Die Konfiguration am besten direkt auf dem OpenVPN Server erstellen, dazu zu den Keys einfach die Beispiel-Konfigrationsdatei kopieren (Achtung die Dateiendung muss bei Windows .ovpn sein):

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client1/client.ovpn

dann wie unter Linux auch die Datei anpassen:

/etc/openvpn/client1/client.ovpn

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote openvpnserver.domain.tld 1194

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert client1.crt
key client1.key

# If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth ta.key 1
auth SHA256
key-direction 1

Dann einfach alles via SCP, bzw WinSCP auf die Windows Machine nach C:\Users\YOURUSERNAME\OpenVPN\config kopieren. Dann einfach die OpenVPN GUI starten. Das Tool verschwindet in der Taskleiste bei den Statussymbolen. Zum Verbinden des VPN einfach auf das Symbol doppelklicken.

Quellen