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
- OpenVPN installieren
- Schlüssel und Zertifikate generieren
- OpenVPN-Server Config erstellen
- Services starten
- iptables konfigurieren
- User anlegen
- Client-Config anlegen
- Client-Zertifikat unter Windows importieren
- Client-Zertifikat unter Android importieren
- Windows Autostart: Verbindung bei Systemstart aufbauen
- Wie funktioniert diese VPN-Verbindung?
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.
Sollte die Verbindung nicht aufgebaut werden können, ist vermutlich noch nicht der Port 1194 in der Firewall freigegeben worden.
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.
Sollte die Verbindung nicht aufgebaut werden können, ist vermutlich noch nicht der Port 1194 in der Firewall freigegeben worden.
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.
Ü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.