OpenVPN Installieren und Konfigurieren
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.