In diesem Beitrag zeige ich, wie man unter Ubuntu einen OpenVPN-Server aufsetzt und die Clients sich mit einer Benutzer-Anmeldung authentifizieren. Der Internet-Traffic wird über den Server getunnelt.

Ubuntu auf den neuesten Stand bringen

Stelle sicher, dass dein OS auf dem neuesten Stand ist. Installiere zunächst alle Updates.

sudo apt-get update

sudo apt-get upgrade -y

OpenVPN installieren

Verwende folgende Befehle, um OpenVPN zu installieren und die dazugehörigen Verzeichnisse anzulegen.

sudo apt-get install -y openvpn openssl

sudo mkdir -p /etc/openvpn/server

sudo mkdir -p /var/log/openvpn

sudo cp /usr/share/doc/openvpn/examples/sample-keys/openssl.cnf /etc/openvpn/server/

Schlüssel und Zertifikate generieren

Erstelle eine gen.sh:

sudo nano gen.sh

Füge in diese Datei folgenden Inhalt ein (Quelle: medium.com)

#!/bin/bash
# Copyright © 2014 Steffan Karger <steffan@karger.me>

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

set -eu

command -v openssl >/dev/null 2>&1 || { echo >&2 "Unable to find openssl. Please make sure openssl is installed and in your path."; exit 1; }

if [ ! -f openssl.cnf ]
then
	echo "Please run this script from the sample directory"
	exit 1
fi

# Generate static key for tls-auth (or static key mode)
openvpn --genkey --secret ta.key

# Create required directories and files
mkdir -p sample-ca
rm -f sample-ca/index.txt
touch sample-ca/index.txt
touch sample-ca/index.txt.attr
echo "01" > sample-ca/serial


# Generate CA key and cert
openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 \
	-extensions easyrsa_ca -keyout sample-ca/ca.key -out sample-ca/ca.crt \
	-subj "/C=VN/ST=SAIGON/L=SAIGON/O=OpenVPN-TEST/emailAddress=vpn@test.net" \
	-config openssl.cnf

# Create server key and cert
openssl req -new -nodes -config openssl.cnf -extensions server \
	-keyout sample-ca/server.key -out sample-ca/server.csr \
	-subj "/C=VN/ST=SAIGON/O=OpenVPN-TEST/CN=VPN-Server/emailAddress=vpn@test.net"

openssl ca -batch -config openssl.cnf -extensions server \
	-out sample-ca/server.crt -in sample-ca/server.csr

# Generate DH parameters
openssl dhparam -out dh2048.pem 2048

cp /etc/openvpn/server/dh2048.pem /etc/openvpn/
cp /etc/openvpn/server/sample-ca/server.crt /etc/openvpn/server/sample-ca/server.key /etc/openvpn/server/sample-ca/ca.crt /etc/openvpn/

Mache das Script ausführbar und führe es anschließend aus:

sudo chmod +x gen.sh

sudo ./gen.sh

OpenVPN-Server Config erstellen

Nun wird die serverseitige Config-File von OpenVPN erzeugt. Einige Zeilen können nach belieben angepasst werden, wie beispielsweise der DNS-Server, welcher verwendet werden soll.

/etc/openvpn/server.conf

Füge diesen Inhalt ein:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
client-cert-not-required
username-as-common-name
plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so /etc/pam.d/login
push "redirect-gateway def1"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 9.9.9.9"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
verb 3

Stelle sicher, dass die Datei in der Zeile mit plugin existiert. Falls nicht, sind hier 3 weitere mögliche Pfade:

/usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so

/usr/lib/openvpn/openvpn-plugin-auth-pam.so

/usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so

Services starten

Jetzt ist es an der Zeit, den OpenVPN-Server zu starten und ihn automatisch beim Systemstart starten zu lassen:

sudo systemctl start openvpn@server

sudo systemctl enable openvpn@server

iptables konfigurieren

Damit NAT und Tunneling funktioniert, muss jetzt noch iptables konfiguriert werden. Diese Regeln werden gespeichert, damit sie für den nächsten Systemneustart beibehalten bleiben:

sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

sudo sysctl -p

sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT

iptables -t nat -A POSTROUTING -j MASQUERADE

sudo apt-get install -y iptables-persistent

sudo iptables-save > /etc/iptables/rules.v4

User anlegen

Die Server-Konfiguration ist jetzt abgeschlossen. Jetzt wird ein neuer User angelegt, welcher sich später für die VPN-Verbindung authentifizieren soll.

sudo adduser vpnuser

sudo echo "DenyUsers vpnuser" >> /etc/ssh/sshd_config

sudo systemctl reload sshd.service

Client-Config anlegen

Kopiere nun den Inhalt von /etc/openvpn/ca.crt in die Zwischenablage. Du brauchst diesen gleich.

Erstelle lokal eine neue Datei, welche für die OpenVPN-Config darstellt. Diese muss mit .ovpn enden. Füge dort diesen Inhalt ein:

client
nobind
dev tun
redirect-gateway def1
remote VPN_SERVER_IP_HIER 1194 udp
comp-lzo yes
auth-user-pass
auth-nocache
remote-cert-tls server
<ca>
ca.crt INHALT_HIER
</ca>

In Zeile 5 wird die IP-Adresse des Servers eingetragen.

In Zeile 11 fügst du den Inhalt von /etc/openvpn/ca.crt ein.

Speichere die Datei ab.

Das war's. Die Client-Config muss nun bei dem Client importiert werden, welcher die VPN-Verbindung aufbauen möchte. Anschließend wird sich mit diesem Server verbunden und er muss sich mit Benutzername und Passwort anmelden, um die Verbindung aufzubauen.

Client-Zertifikat unter Windows importieren

Ist OpenVPN auf dem Windows-Client installiert, findet sich in der Taskleiste ein weiteres Symbol:

Darauf wird ein Rechtsklick gemacht und im Kontextmenü Datei importieren ausgewählt. Navigiere zu der Datei und wähle diese aus.

Um sich nun mit dem VPN zu verbinden, machst du erneut einen Rechtsklick auf das Icon und klickst oben auf Verbinden. Ein neues Fenster erscheint. Melde dich mit dem Benutzernamen und Passwort an.

Zum Trennen der Verbindung wird im Kontextmenü von OpenVPN Trennen angeklickt.

Alle importierten Client-Zertifikat finden sich unter:

C:\Benutzer\BENUTZER\OpenVPN\config\

Client-Zertifikat unter Android importieren

Für Android benötigt man die App OpenVPN für Android aus dem Google Play Store, außerdem das für das Gerät erstellte Client-Zertifikat.

Starte diese und wähle im Menü OVPN Profile aus. Navigiere zu dem Pfad, wo sich das Client-Zertifikat befindet, und wähle es aus. Klicke anschließend oben rechts auf IMPORT.

Als nächstes kannst du der VPN-Verbindung noch einen Namen geben sowie deinen Benutzernamen eingeben. Klicke dann auf ADD.

In der OVPN Profiles Übersicht kannst du nun einfach auf die Verbindung klicken, um die Verbindung aufzubauen.

Windows Autostart: Verbindung bei Systemstart aufbauen

Möchte man, dass OpenVPN direkt nach der Windows-Anmeldung automatisch eine Verbindung aufbaut, muss man eine Verknüpfung im Autostart-Ordner erstellen. Als Speicherort des Elements wird folgender Pfad angegeben, für das Parameter connect wird der Name des Profils mit Dateiendung angegeben:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect "PROFIL_NAME.ovpn"

Wie funktioniert diese VPN-Verbindung?

Sobald die VPN-Verbindung besteht, läuft der gesamte Traffic des Clients über den VPN-Server. Deine IP-Adresse im Internet ist nun die des Servers, deine eigentliche IP-Adresse erfährt keiner.

Die Daten vom Client werden verschlüsselt zum VPN-Server übertragen, der Internet-Provider bzw. Inhaber des WLANs kann daher nicht sehen, was der Client im Internet macht.

Der VPN-Server überträgt nun die Anfragen vom Client in das Internet und leitet die Antworten wieder an den Client weiter.

Bei Fragen oder Anregungen freue ich mich natürlich über eure Kommentare.

Kategorie: Server

Tags: , ,

0 Kommentare

547 Aufrufe

Über mich

Ich bin Janis (aka. EurenikZ), 25 Jahre alt und komme aus der Nähe von Frankfurt am Main. Ich habe eine abgeschlossene IHK-Ausbildung zum Fachinformatiker für Systemintegration und arbeite als Junior IT-Administrator in einem IT-Systemhaus. Neben meinem IT-Blog beschäftige ich mich viel mit diversen IT-Themen und meinen Webseiten sowie Telegram Bots und biete IT-Dienstleistungen an.

757 Aufrufe

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten.

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen. Sei der Erste, der diesen Beitrag bewertet!

Es tut mir Leid, dass der Beitrag für dich nicht hilfreich war!

Wie kann ich diesen Beitrag verbessern?

Hinterlasse einen Kommentar

  • Manchmal ist es notwendig, sich in die Shell eines Docker-Containers zu schalten, um dort beispielsweise weitere Konfigurationen vornehmen zu können. Wie du dich in eine Container-Shell einloggst, zeige ich dir in diesem Beitrag. Begib dich zunächst in das Verzeichnis, in[...]

    12.03.2024 18:37

    45
  • Mithilfe eines Swap-Speichers lagert man temporäre Daten in eine Auslagerungsdatei aus, anstatt in den RAM zu schreiben. Das ist vor allem dann sinnvoll, wenn wenig Arbeitsspeicher zur Verfügung steht und man Abstürze wegen zu wenig Arbeitsspeicher umgehen möchte. Was ist[...]

    01.01.2024 10:00

    155
  • Beim Löschen von Dateien in Nextcloud landen diese im Papierkorb und bleiben dort, bis dieser manuell geleert wird. Möchte man Dateien im Papierkorb automatisch nach einer bestimmten Zeit löschen lassen, muss die Konfiguration entsprechend angepasst werden. Die Papierkorb-Funktion ist[...]

    10.12.2023 20:57

    93
  • Manchmal ist es notwendig, sich in die Shell eines Docker-Containers zu schalten, um dort beispielsweise weitere Konfigurationen vornehmen zu können. Wie du dich in eine Container-Shell einloggst, zeige ich dir in diesem Beitrag. Begib dich zunächst in das Verzeichnis, in[...]

    12.03.2024 18:37

    45
  • Mithilfe eines Swap-Speichers lagert man temporäre Daten in eine Auslagerungsdatei aus, anstatt in den RAM zu schreiben. Das ist vor allem dann sinnvoll, wenn wenig Arbeitsspeicher zur Verfügung steht und man Abstürze wegen zu wenig Arbeitsspeicher umgehen möchte. Was ist[...]

    01.01.2024 10:00

    155