Einführung
Ein Virtual Private Network (VPN) ermöglicht es Ihnen, nicht vertrauenswürdige Netzwerke zu durchqueren, als ob Sie sich in einem privaten Netzwerk befänden. Es gibt Ihnen die Freiheit, sicher von Ihrem Smartphone oder Laptop aus auf das Internet zuzugreifen, wenn Sie mit einem nicht vertrauenswürdigen Netzwerk verbunden sind, wie dem WLAN in einem Hotel oder Café.
In Kombination mit HTTPS-Verbindungen können Sie mit diesem Setup Ihre drahtlosen Anmeldungen und Transaktionen sichern. Sie können geografische Beschränkungen und Zensur umgehen und Ihren Standort sowie unverschlüsselten HTTP-Datenverkehr vor nicht vertrauenswürdigen Netzwerken schützen.
OpenVPN ist eine Open-Source-VPN-Lösung mit vollem Funktionsumfang für Transport Layer Security (TLS), die eine Vielzahl von Konfigurationen unterstützt. In diesem Tutorial richten Sie OpenVPN auf einem Ubuntu 22.04-Server ein und konfigurieren es dann so, dass es von einem Client-Computer aus zugänglich ist.
Hinweis: Wenn Sie vorhaben, einen OpenVPN-Server auf einem DigitalOcean-Droplet einzurichten, beachten Sie, dass wir, wie viele Hosting-Anbieter, Gebühren für Bandbreitenüberschreitungen erheben. Achten Sie daher bitte darauf, wie viel Datenverkehr Ihr Server verarbeitet.
Weitere Informationen finden Sie auf dieser Seite.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie:
- Ein Ubuntu 22.04-Server mit einem sudo-Nicht-Root-Benutzer und einer aktivierten Firewall. Um dies einzurichten, können Sie unserem Tutorial Initial Server Setup with Ubuntu 22.04 folgen. Wir werden dies als den OpenVPN-Server bezeichnen in diesem Handbuch.
- Ein separater Ubuntu 22.04-Server, der als private Zertifizierungsstelle (CA) eingerichtet ist und im Folgenden als CA-Server bezeichnet wird in diesem Leitfaden. Nachdem Sie die Schritte aus der Anleitung zur Ersteinrichtung des Servers auf diesem Server ausgeführt haben, können Sie die Schritte 1 bis 3 unserer Anleitung zum Einrichten und Konfigurieren einer Zertifizierungsstelle (CA) unter Ubuntu 22.04 befolgen, um dies zu erreichen.
Hinweis: Obwohl es technisch möglich ist, Ihren OpenVPN-Server oder Ihren lokalen Computer als CA zu verwenden, wird dies nicht empfohlen, da es Ihr VPN für einige Sicherheitslücken öffnet. Gemäß der offiziellen OpenVPN-Dokumentation sollten Sie Ihre Zertifizierungsstelle auf einem eigenständigen Computer platzieren, der für das Importieren und Signieren von Zertifikatanforderungen vorgesehen ist. Aus diesem Grund geht diese Anleitung davon aus, dass sich Ihre Zertifizierungsstelle auf einem separaten Ubuntu 22.04-Server befindet, der auch einen Nicht-Root-Benutzer mit sudo-Berechtigungen und einer aktivierten Basis-Firewall hat.
Darüber hinaus benötigen Sie einen Client-Computer, mit dem Sie sich mit Ihrem OpenVPN-Server verbinden. In dieser Anleitung nennen wir dies den OpenVPN-Client . Für die Zwecke dieses Tutorials wird empfohlen, dass Sie Ihren lokalen Computer als OpenVPN-Client verwenden.
Wenn diese Voraussetzungen erfüllt sind, können Sie mit der Einrichtung und Konfiguration eines OpenVPN-Servers unter Ubuntu 22.04 beginnen.
Hinweis: Bitte beachten Sie, dass Sie beim Deaktivieren der Kennwortauthentifizierung während der Konfiguration dieser Server später in diesem Handbuch beim Übertragen von Dateien zwischen ihnen auf Schwierigkeiten stoßen können. Um dieses Problem zu beheben, können Sie die Kennwortauthentifizierung auf jedem Server erneut aktivieren. Alternativ könnten Sie für jeden Server ein SSH-Schlüsselpaar generieren und dann den öffentlichen SSH-Schlüssel des OpenVPN-Servers zu den authorized_keys
der CA-Maschine hinzufügen Datei und umgekehrt. Siehe So richten Sie SSH-Schlüssel unter Ubuntu 22.04 ein, um Anweisungen zur Durchführung einer dieser Lösungen zu erhalten.
Schritt 1 – Installation von OpenVPN und Easy-RSA
Der erste Schritt in diesem Tutorial ist die Installation von OpenVPN und Easy-RSA. Easy-RSA ist ein Verwaltungstool für die Public-Key-Infrastruktur (PKI), das Sie auf dem OpenVPN-Server verwenden, um eine Zertifikatsanforderung zu generieren, die Sie dann auf dem CA-Server verifizieren und signieren.
Aktualisieren Sie zunächst den Paketindex Ihres OpenVPN-Servers und installieren Sie OpenVPN und Easy-RSA. Beide Pakete sind in den Standard-Repositorys von Ubuntu verfügbar, sodass Sie apt
verwenden können für die Installation:
- sudo apt update
- sudo apt install openvpn easy-rsa
Als Nächstes müssen Sie als Ihr Nicht-Root-Benutzer ein neues Verzeichnis auf dem OpenVPN-Server mit dem Namen ~/easy-rsa
erstellen :
- mkdir ~/easy-rsa
Jetzt müssen Sie einen Symlink von easyrsa
erstellen Skript, das das Paket in ~/easy-rsa
installiert hat Verzeichnis, das Sie gerade erstellt haben:
- ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Hinweis: Während andere Anleitungen Sie möglicherweise anweisen, die Datei easy-rsa
zu kopieren package-Dateien in Ihr PKI-Verzeichnis, verwendet dieses Tutorial einen Symlink-Ansatz. Daher werden alle Aktualisierungen von easy-rsa
Paket wird automatisch in den Skripten Ihrer PKI widergespiegelt.
Stellen Sie schließlich sicher, dass der Eigentümer des Verzeichnisses Ihr Nicht-Root-Benutzer sudo ist, und beschränken Sie den Zugriff auf diesen Benutzer mit chmod
:
- sudo chown sammy ~/easy-rsa
- chmod 700 ~/easy-rsa
Sobald diese Programme installiert und an die richtigen Stellen auf Ihrem System verschoben wurden, besteht der nächste Schritt darin, eine Public Key Infrastructure (PKI) auf dem OpenVPN-Server zu erstellen, damit Sie TLS-Zertifikate für Clients und andere Server anfordern und verwalten können sich mit Ihrem VPN verbinden.
Schritt 2 – Erstellen einer PKI für OpenVPN
Bevor Sie den privaten Schlüssel und das Zertifikat Ihres OpenVPN-Servers erstellen können, müssen Sie ein lokales Public Key Infrastructure-Verzeichnis auf Ihrem OpenVPN-Server erstellen. Sie verwenden dieses Verzeichnis, um die Zertifikatsanforderungen des Servers und der Clients zu verwalten, anstatt sie direkt auf Ihrem CA-Server zu stellen.
Um ein PKI-Verzeichnis auf Ihrem OpenVPN-Server zu erstellen, müssen Sie eine Datei namens vars
füllen mit einigen Standardwerten. Zuerst werden Sie cd
in die easy-rsa
Verzeichnis, dann erstellen und bearbeiten Sie die vars
Datei mit nano oder Ihrem bevorzugten Texteditor.
- cd ~/easy-rsa
- nano vars
Sobald die Datei geöffnet ist, fügen Sie die folgenden zwei Zeilen ein:
~/easy-rsa/varsset_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Dies sind die einzigen zwei Zeilen, die Sie in diesem vars
benötigen Datei auf Ihrem OpenVPN-Server, da sie nicht als Zertifizierungsstelle verwendet wird. Sie stellen sicher, dass Ihre privaten Schlüssel und Zertifikatsanforderungen so konfiguriert sind, dass sie moderne Elliptic Curve Cryptography (ECC) verwenden, um Schlüssel und sichere Signaturen für Ihre Clients und den OpenVPN-Server zu generieren.
Wenn Sie Ihre OpenVPN- und CA-Server für die Verwendung von ECC konfigurieren, bedeutet dies, dass ein Client und ein Server, wenn sie versuchen, einen gemeinsamen symmetrischen Schlüssel einzurichten, Elliptic-Curve-Algorithmen für ihren Austausch verwenden können. Die Verwendung von ECC für einen Schlüsselaustausch ist erheblich schneller als die Verwendung von reinem Diffie-Hellman mit dem klassischen RSA-Algorithmus, da die Zahlen viel kleiner und die Berechnungen schneller sind.
Hintergrund: Wenn sich Clients mit OpenVPN verbinden, verwenden sie asymmetrische Verschlüsselung (auch bekannt als öffentlicher/privater Schlüssel), um einen TLS-Handshake durchzuführen. Bei der Übertragung von verschlüsseltem VPN-Datenverkehr verwenden der Server und die Clients jedoch eine symmetrische Verschlüsselung, die auch als Shared-Key-Verschlüsselung bezeichnet wird.
Bei der symmetrischen Verschlüsselung ist der Rechenaufwand viel geringer als bei der asymmetrischen:Die verwendeten Zahlen sind viel kleiner, und moderne CPUs integrieren Anweisungen, um optimierte symmetrische Verschlüsselungsoperationen durchzuführen. Um von asymmetrischer zu symmetrischer Verschlüsselung zu wechseln, verwenden der OpenVPN-Server und -Client den Elliptic Curve Diffie-Hellman (ECDH)-Algorithmus, um sich so schnell wie möglich auf einen gemeinsamen geheimen Schlüssel zu einigen.
Nachdem Sie die vars
ausgefüllt haben Datei können Sie mit der Erstellung des PKI-Verzeichnisses fortfahren. Führen Sie dazu easyrsa
aus Skript mit dem init-pki
Möglichkeit. Obwohl Sie diesen Befehl bereits als Teil der Voraussetzungen auf dem CA-Server ausgeführt haben, ist es notwendig, ihn hier auszuführen, da Ihr OpenVPN-Server und Ihr CA-Server separate PKI-Verzeichnisse haben:
- ./easyrsa init-pki
Beachten Sie, dass auf Ihrem OpenVPN-Server keine Zertifizierungsstelle erstellt werden muss. Ihr CA-Server ist allein verantwortlich für das Validieren und Signieren von Zertifikaten. Die PKI auf Ihrem VPN-Server wird nur als bequemer und zentraler Ort zum Speichern von Zertifikatanforderungen und öffentlichen Zertifikaten verwendet.
Nachdem Sie Ihre PKI auf dem OpenVPN-Server initialisiert haben, können Sie mit dem nächsten Schritt fortfahren, nämlich dem Erstellen einer OpenVPN-Server-Zertifikatsanforderung und eines privaten Schlüssels.
Schritt 3 – Erstellen einer OpenVPN-Server-Zertifikatsanforderung und eines privaten Schlüssels
Nachdem auf Ihrem OpenVPN-Server nun alle Voraussetzungen installiert sind, besteht der nächste Schritt darin, einen privaten Schlüssel und eine Certificate Signing Request (CSR) auf Ihrem OpenVPN-Server zu generieren. Danach übertragen Sie die Anforderung zum Signieren an Ihre Zertifizierungsstelle und erstellen das erforderliche Zertifikat. Sobald Sie ein signiertes Zertifikat haben, übertragen Sie es zurück auf den OpenVPN-Server und installieren es für die Verwendung durch den Server.
Navigieren Sie zunächst zu ~/easy-rsa
Verzeichnis auf Ihrem OpenVPN-Server als Nicht-Root-Benutzer:
- cd ~/easy-rsa
Jetzt rufen Sie easyrsa
auf mit dem gen-req
Option gefolgt von einem Common Name (CN) für die Maschine. Der CN kann beliebig sein, aber es kann hilfreich sein, ihn beschreibend zu machen. In diesem Tutorial ist der CN des OpenVPN-Servers server
. Achten Sie darauf, den nopass
einzuschließen Möglichkeit auch. Andernfalls wird die Anforderungsdatei mit einem Kennwort geschützt, was später zu Berechtigungsproblemen führen kann.
Hinweis: Wenn Sie einen anderen Namen als server
wählen Hier müssen Sie einige der folgenden Anweisungen anpassen. Zum Beispiel beim Kopieren der generierten Dateien in die /etc/openvpn
Verzeichnis, müssen Sie die richtigen Namen ersetzen. Sie müssen auch die /etc/openvpn/server.conf
ändern später so, dass sie auf die richtige .crt
verweist und .key
Dateien.
- ./easyrsa gen-req server nopass
OutputCommon Name (eg: your user, host, or server name) [server]:
Keypair and certificate request completed. Your files are:
req: /home/sammy/easy-rsa/pki/reqs/server.req
key: /home/sammy/easy-rsa/pki/private/server.key
Dadurch werden ein privater Schlüssel für den Server und eine Zertifikatsanforderungsdatei mit dem Namen server.req
erstellt . Kopieren Sie den Serverschlüssel nach /etc/openvpn/server
Verzeichnis:
- sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/
Nachdem Sie diese Schritte ausgeführt haben, haben Sie erfolgreich einen privaten Schlüssel für Ihren OpenVPN-Server erstellt. Sie haben auch einen Certificate Signing Request für den OpenVPN-Server generiert. Die CSR ist jetzt bereit zum Signieren durch Ihre Zertifizierungsstelle. Im nächsten Abschnitt dieses Tutorials erfahren Sie, wie Sie eine CSR mit dem privaten Schlüssel Ihres CA-Servers signieren.
Schritt 4 – Signieren der Zertifikatsanforderung des OpenVPN-Servers
Im vorherigen Schritt haben Sie eine Certificate Signing Request (CSR) und einen privaten Schlüssel für den OpenVPN-Server erstellt. Nun muss der CA-Server den server
kennen Zertifikat und validieren Sie es. Sobald die Zertifizierungsstelle das Zertifikat validiert und an den OpenVPN-Server zurückleitet, können Clients, die Ihrer Zertifizierungsstelle vertrauen, auch dem OpenVPN-Server vertrauen.
Verwenden Sie auf dem OpenVPN-Server als Nicht-Root-Benutzer SCP oder eine andere Übertragungsmethode, um server.req
zu kopieren Zertifikatsanforderung an den CA-Server zum Signieren:
- scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp
Wenn Sie das vorausgesetzte Tutorial How To Set Up and Configure a Certificate Authority (CA) on Ubuntu 22.04 befolgt haben, besteht der nächste Schritt darin, sich beim CA-Server anzumelden als Nicht-Root-Benutzer, den Sie zum Verwalten Ihrer Zertifizierungsstelle erstellt haben. Sie werden cd
zum ~/easy-rsa
Verzeichnis, in dem Sie Ihren PK erstellt haben, und importieren Sie dann die Zertifikatsanforderung mit easyrsa
Skript:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/server.req server
Output. . .
The request has been successfully imported with a short name of: server
You may now use this name to perform signing operations on this request.
Als nächstes signieren Sie die Anfrage, indem Sie easyrsa
ausführen Skript mit dem sign-req
Option, gefolgt vom Anforderungstyp und dem Common Name. Der Anforderungstyp kann entweder client
sein oder server
. Da Sie mit der Zertifikatsanforderung des OpenVPN-Servers arbeiten, verwenden Sie unbedingt den server
Anfragetyp:
- ./easyrsa sign-req server server
In der Ausgabe werden Sie aufgefordert, zu überprüfen, ob die Anfrage von einer vertrauenswürdigen Quelle stammt. Geben Sie yes
ein drücken Sie dann ENTER
bestätigen:
OutputYou are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:
subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
. . .
Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt
Beachten Sie, dass Sie an dieser Stelle nach Ihrem Passwort gefragt werden, wenn Sie Ihren privaten CA-Schlüssel verschlüsselt haben.
Wenn diese Schritte abgeschlossen sind, haben Sie die Zertifikatsanforderung des OpenVPN-Servers mit dem privaten Schlüssel des CA-Servers signiert. Die resultierende server.crt
Die Datei enthält den öffentlichen Verschlüsselungsschlüssel des OpenVPN-Servers sowie eine Signatur vom CA-Server. Der Sinn der Signatur besteht darin, jedem, der dem CA-Server vertraut, mitzuteilen, dass er auch dem OpenVPN-Server vertrauen kann, wenn er sich mit ihm verbindet.
Um die Konfiguration der Zertifikate abzuschließen, kopieren Sie die server.crt
und ca.crt
Dateien vom CA-Server zum OpenVPN-Server:
- scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
- scp pki/ca.crt sammy@your_vpn_server_ip:/tmp
Kopieren Sie nun zurück auf Ihrem OpenVPN-Server die Dateien von /tmp
nach /etc/openvpn/server
:
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
Jetzt ist Ihr OpenVPN-Server fast bereit, Verbindungen anzunehmen. Im nächsten Schritt führen Sie einige zusätzliche Schritte durch, um die Sicherheit des Servers zu erhöhen.
Schritt 5 – Konfiguration von OpenVPN-Verschlüsselungsmaterial
Fügen Sie für eine zusätzliche Sicherheitsebene einen zusätzlichen gemeinsamen geheimen Schlüssel hinzu, den der Server und alle Clients mit OpenVPNs tls-crypt
verwenden Richtlinie. Diese Option wird verwendet, um das TLS-Zertifikat zu verschleiern, das verwendet wird, wenn sich ein Server und ein Client anfänglich miteinander verbinden. Es wird auch vom OpenVPN-Server verwendet, um eingehende Pakete schnell zu überprüfen:Wenn ein Paket mit dem Pre-Shared Key signiert ist, verarbeitet der Server es; Wenn es nicht signiert ist, weiß der Server, dass es aus einer nicht vertrauenswürdigen Quelle stammt, und kann es verwerfen, ohne zusätzliche Entschlüsselungsarbeiten durchführen zu müssen.
Diese Option hilft sicherzustellen, dass Ihr OpenVPN-Server nicht authentifizierten Datenverkehr, Port-Scans und Denial-of-Service-Angriffe bewältigen kann, die Serverressourcen binden können. Es macht es auch schwieriger, OpenVPN-Netzwerkverkehr zu identifizieren.
Um die tls-crypt
zu generieren Pre-Shared Key, führen Sie Folgendes auf dem OpenVPN-Server in ~/easy-rsa
aus Verzeichnis:
- cd ~/easy-rsa
- openvpn --genkey secret ta.key
Das Ergebnis ist eine Datei namens ta.key
. Kopieren Sie es nach /etc/openvpn/server/
Verzeichnis:
- sudo cp ta.key /etc/openvpn/server
Wenn diese Dateien auf dem OpenVPN-Server vorhanden sind, können Sie Client-Zertifikate und Schlüsseldateien für Ihre Benutzer erstellen, die Sie verwenden, um sich mit dem VPN zu verbinden.
Schritt 6 – Client-Zertifikat und Schlüsselpaar generieren
Obwohl Sie auf Ihrem Client-Computer einen privaten Schlüssel und eine Zertifikatsanforderung generieren und diese dann zum Signieren an die Zertifizierungsstelle senden können, beschreibt dieser Leitfaden einen Prozess zum Generieren der Zertifikatsanforderung auf dem OpenVPN-Server. Der Vorteil dieses Ansatzes besteht darin, dass Sie ein Skript erstellen können, das automatisch Client-Konfigurationsdateien generiert, die alle erforderlichen Schlüssel und Zertifikate enthalten. Dadurch vermeiden Sie die Übertragung von Schlüsseln, Zertifikaten und Konfigurationsdateien an Clients und optimieren den VPN-Beitrittsprozess.
Für dieses Handbuch generieren Sie ein einzelnes Paar aus Clientschlüssel und Zertifikat. Wenn Sie mehr als einen Kunden haben, können Sie diesen Vorgang für jeden einzelnen wiederholen. Beachten Sie jedoch, dass Sie für jeden Client einen eindeutigen Namenswert an das Skript übergeben müssen. In diesem Tutorial wird das erste Zertifikat/Schlüsselpaar als client1
bezeichnet .
Erstellen Sie zunächst eine Verzeichnisstruktur in Ihrem Home-Verzeichnis, um das Client-Zertifikat und die Schlüsseldateien zu speichern:
- mkdir -p ~/client-configs/keys
Da Sie die Zertifikats-/Schlüsselpaare und Konfigurationsdateien Ihrer Clients in diesem Verzeichnis speichern, sollten Sie seine Berechtigungen jetzt als Sicherheitsmaßnahme sperren:
- chmod -R 700 ~/client-configs
Navigieren Sie als Nächstes zurück zum EasyRSA-Verzeichnis und führen Sie easyrsa
aus Skript mit dem gen-req
und nopass
Optionen, zusammen mit dem allgemeinen Namen für den Client:
- cd ~/easy-rsa
- ./easyrsa gen-req client1 nopass
Drücken Sie ENTER
um den gemeinsamen Namen zu bestätigen. Kopieren Sie dann client1.key
Datei in die ~/client-configs/keys/
Verzeichnis, das Sie zuvor erstellt haben:
- cp pki/private/client1.key ~/client-configs/keys/
Übertragen Sie als nächstes die client1.req
Datei mit einer sicheren Methode auf Ihren CA-Server:
- scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp
Melden Sie sich jetzt bei Ihrem CA-Server an. Navigieren Sie dann zum EasyRSA-Verzeichnis und importieren Sie die Zertifikatsanforderung:
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/client1.req client1
Als nächstes signieren Sie die Anfrage auf die gleiche Weise wie im vorherigen Schritt für den Server. Achten Sie diesmal jedoch darauf, den client
anzugeben Anfragetyp:
- ./easyrsa sign-req client client1
Wenn Sie dazu aufgefordert werden, geben Sie yes
ein um zu bestätigen, dass Sie beabsichtigen, die Zertifikatsanforderung zu signieren und dass sie von einer vertrauenswürdigen Quelle stammt:
OutputType the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Wenn Sie Ihren CA-Schlüssel verschlüsselt haben, werden Sie hier erneut zur Eingabe Ihres Passworts aufgefordert.
Dadurch wird eine Client-Zertifikatsdatei mit dem Namen client1.crt
erstellt . Übertragen Sie diese Datei zurück auf den Server:
- scp pki/issued/client1.crt sammy@your_server_ip:/tmp
Kopieren Sie auf Ihrem OpenVPN-Server das Client-Zertifikat nach ~/client-configs/keys/
Verzeichnis:
- cp /tmp/client1.crt ~/client-configs/keys/
Als nächstes kopieren Sie die ca.crt
und ta.key
Dateien in ~/client-configs/keys/
Verzeichnis und legen Sie die entsprechenden Berechtigungen für Ihren sudo-Benutzer fest:
- cp ~/easy-rsa/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
- sudo chown sammy.sammy ~/client-configs/keys/*
Damit sind alle Zertifikate und Schlüssel Ihres Servers und Clients generiert und in den entsprechenden Verzeichnissen auf Ihrem OpenVPN-Server gespeichert. Es gibt noch einige Aktionen, die mit diesen Dateien durchgeführt werden müssen, aber diese werden in einem späteren Schritt folgen. Jetzt können Sie mit der Konfiguration von OpenVPN fortfahren.
Schritt 7 – Konfigurieren von OpenVPN
Wie viele andere weit verbreitete Open-Source-Tools bietet OpenVPN zahlreiche Konfigurationsoptionen, mit denen Sie Ihren Server an Ihre spezifischen Anforderungen anpassen können. In diesem Abschnitt geben wir Anweisungen zum Einrichten einer OpenVPN-Serverkonfiguration basierend auf einer der Beispielkonfigurationsdateien, die in der Dokumentation dieser Software enthalten sind.
Kopieren Sie zuerst das Beispiel server.conf
Datei als Ausgangspunkt für Ihre eigene Konfigurationsdatei:
- sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
Öffnen Sie die neue Datei zum Bearbeiten mit nano
oder den Texteditor Ihrer Wahl:
- sudo nano /etc/openvpn/server/server.conf
Sie müssen einige Zeilen in dieser Datei ändern. Suchen Sie zuerst den HMAC
Abschnitt der Konfiguration, indem Sie nach tls-auth
suchen Richtlinie. Diese Zeile ist standardmäßig aktiviert. Kommentieren Sie es aus, indem Sie ein ;
hinzufügen zum Zeilenanfang. Fügen Sie danach eine neue Zeile hinzu, die den Wert tls-crypt ta.key
enthält nur:
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key
Suchen Sie als Nächstes den Abschnitt über kryptografische Chiffren, indem Sie nach cipher
suchen Linien. Der Standardwert ist auf AES-256-CBC
gesetzt , jedoch der AES-256-GCM
cipher bietet ein besseres Maß an Verschlüsselung und Leistung und wird von aktuellen OpenVPN-Clients gut unterstützt. Kommentieren Sie den Standardwert aus, indem Sie ein ;
hinzufügen Zeichen am Anfang dieser Zeile und fügen Sie danach eine weitere Zeile hinzu, die den aktualisierten Wert von AES-256-GCM
enthält :
;cipher AES-256-CBC
cipher AES-256-GCM
Fügen Sie direkt nach dieser Zeile ein auth
hinzu Direktive zum Auswählen des HMAC-Message-Digest-Algorithmus. Dazu SHA256
ist eine gute Wahl:
auth SHA256
Suchen Sie als Nächstes die Zeile, die ein dh
enthält Direktive, die Diffie-Hellman-Parameter definiert. Da Sie alle Zertifikate für die Verwendung der Elliptic Curve Cryptography konfiguriert haben, ist keine Diffie-Hellman-Seed-Datei erforderlich. Kommentieren Sie die vorhandene Zeile aus, die wie folgt aussieht:dh dh2048.pem
oder dh dh.pem
. Der Dateiname für den Diffie-Hellman-Schlüssel kann sich von dem unterscheiden, der in der Beispiel-Serverkonfigurationsdatei aufgeführt ist. Fügen Sie danach eine Zeile mit dem Inhalt dh none
hinzu :
;dh dh2048.pem
dh none
Als Nächstes sollte OpenVPN nach dem Start ohne Berechtigungen ausgeführt werden, also müssen Sie ihm mitteilen, dass es mit einem Benutzer nobody ausgeführt werden soll und Gruppe nogroup . Um dies zu aktivieren, suchen Sie den user nobody
und kommentieren Sie ihn aus und group nogroup
Zeilen durch Entfernen des ;
Vorzeichen vom Anfang jeder Zeile:
user nobody
group nogroup
(Optional) Pushen Sie DNS-Änderungen, um den gesamten Datenverkehr über das VPN umzuleiten
Die obigen Einstellungen erstellen die VPN-Verbindung zwischen Ihrem Client und Server, erzwingen jedoch keine Verbindungen zur Verwendung des Tunnels. Wenn Sie das VPN verwenden möchten, um Ihren gesamten Client-Datenverkehr über das VPN zu leiten, möchten Sie wahrscheinlich einige zusätzliche Einstellungen auf die Client-Computer übertragen.
Suchen Sie zunächst die Zeile mit push "redirect-gateway def1 bypass-dhcp"
und kommentieren Sie sie aus . Dadurch wird Ihr Client angewiesen, seinen gesamten Datenverkehr über Ihren OpenVPN-Server umzuleiten. Beachten Sie, dass die Aktivierung dieser Funktion zu Verbindungsproblemen mit anderen Netzwerkdiensten wie SSH:
push "redirect-gateway def1 bypass-dhcp"
Direkt unter dieser Zeile finden Sie die dhcp-option
Sektion. Entfernen Sie erneut den ;
vom Anfang beider Zeilen, um sie zu entkommentieren:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Diese Zeilen weisen Ihren Client an, die kostenlosen OpenDNS-Resolver an den aufgelisteten IP-Adressen zu verwenden. Wenn Sie andere DNS-Resolver bevorzugen, können Sie diese anstelle der hervorgehobenen IPs ersetzen.
Dies hilft Clients bei der Neukonfiguration ihrer DNS-Einstellungen, um den VPN-Tunnel als Standard-Gateway zu verwenden.
(Optional) Passen Sie den Port und das Protokoll an
Standardmäßig verwendet der OpenVPN-Server Port 1194
und das UDP-Protokoll zum Akzeptieren von Client-Verbindungen. Wenn Sie aufgrund restriktiver Netzwerkumgebungen, in denen sich Ihre Clients möglicherweise befinden, einen anderen Port verwenden müssen, können Sie den port
ändern Möglichkeit. Wenn Sie keine Webinhalte auf Ihrem OpenVPN-Server hosten, Port 443
ist eine beliebte Wahl, da es normalerweise durch Firewall-Regeln zugelassen wird.
Um OpenVPN so zu ändern, dass es auf Port 443 lauscht, öffnen Sie die server.conf
Datei und suchen Sie die Zeile, die so aussieht:
port 1194
Bearbeiten Sie ihn so, dass der Port 443 lautet:
/etc/openvpn/server/server.conf# Optional!
port 443
Oft ist das Protokoll auch auf diesen Port beschränkt. Wenn ja, suchen Sie das proto
Zeile unter dem port
Zeile und ändern Sie das Protokoll von udp
zu tcp
:
# Optional!
proto tcp
Wenn Sie tun Wenn Sie das Protokoll auf TCP umstellen, müssen Sie den explicit-exit-notify
ändern Wert der Direktive von 1
auf 0
, da diese Direktive nur von UDP verwendet wird. Wenn Sie dies bei Verwendung von TCP nicht tun, werden Fehler beim Starten des OpenVPN-Dienstes verursacht.
Suchen Sie nach explicit-exit-notify
Zeile am Ende der Datei und ändern Sie den Wert auf 0
:
# Optional!
explicit-exit-notify 0
Wenn Sie keinen anderen Port und kein anderes Protokoll verwenden müssen, lassen Sie diese Einstellungen am besten unverändert.
(Optional) Auf Nicht-Standard-Anmeldedaten verweisen
Wenn Sie während des ./easyrsa gen-req server
einen anderen Namen gewählt haben Befehl zuvor, ändern Sie das cert
und key
Zeilen in der server.conf
Konfigurationsdatei, sodass sie auf die entsprechende .crt
zeigen und .key
Dateien. Wenn Sie den Standardnamen verwendet haben, server
, dies ist bereits richtig eingestellt:
cert server.crt
key server.key
Wenn Sie fertig sind, speichern und schließen Sie die Datei.
Sie haben nun die Konfiguration Ihrer allgemeinen OpenVPN-Einstellungen abgeschlossen. Im nächsten Schritt passen Sie die Netzwerkoptionen des Servers an.
Schritt 8 – Anpassen der OpenVPN-Server-Netzwerkkonfiguration
Es gibt einige Aspekte der Netzwerkkonfiguration des Servers, die optimiert werden müssen, damit OpenVPN den Datenverkehr korrekt durch das VPN leiten kann. Die erste davon ist IP-Weiterleitung , eine Methode zur Bestimmung, wohin IP-Datenverkehr geleitet werden soll. Dies ist wesentlich für die VPN-Funktionalität, die Ihr Server bereitstellt.
Um die standardmäßige IP-Weiterleitungseinstellung Ihres OpenVPN-Servers anzupassen, öffnen Sie die /etc/sysctl.conf
Datei mit nano
oder Ihren bevorzugten Editor:
- sudo nano /etc/sysctl.conf
Fügen Sie dann am Ende der Datei die folgende Zeile hinzu:
/etc/sysctl.confnet.ipv4.ip_forward = 1
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Geben Sie Folgendes ein, um die Datei zu lesen und die neuen Werte für die aktuelle Sitzung zu laden:
- sudo sysctl -p
Outputnet.ipv4.ip_forward = 1
Jetzt kann Ihr OpenVPN-Server eingehenden Datenverkehr von einem Ethernet-Gerät an ein anderes weiterleiten. Diese Einstellung stellt sicher, dass der Server den Datenverkehr von Clients, die sich über die virtuelle VPN-Schnittstelle verbinden, über seine anderen physischen Ethernet-Geräte leiten kann. Diese Konfiguration leitet den gesamten Webverkehr von Ihrem Client über die IP-Adresse Ihres Servers und die öffentliche IP-Adresse Ihres Clients wird effektiv verborgen.
Im nächsten Schritt müssen Sie einige Firewall-Regeln konfigurieren, um sicherzustellen, dass der Datenverkehr zu und von Ihrem OpenVPN-Server ordnungsgemäß fließt.
Schritt 9 – Firewall-Konfiguration
Bisher haben Sie OpenVPN auf Ihrem Server installiert, konfiguriert und die Schlüssel und Zertifikate generiert, die Ihr Client für den Zugriff auf das VPN benötigt. Sie haben OpenVPN jedoch noch keine Anweisungen gegeben, wohin eingehender Webverkehr von Clients gesendet werden soll. Sie können festlegen, wie der Server den Client-Datenverkehr handhaben soll, indem Sie einige Firewall-Regeln und Routing-Konfigurationen festlegen.
Angenommen, Sie haben die Voraussetzungen zu Beginn dieses Tutorials erfüllt, sollten Sie ufw
bereits haben auf Ihrem Server installiert und ausgeführt. Um OpenVPN durch die Firewall zuzulassen, müssen Sie Masquerading aktivieren, ein iptables-Konzept, das spontane dynamische Netzwerkadressübersetzung (NAT) bereitstellt, um Client-Verbindungen korrekt weiterzuleiten.
Bevor Sie die Firewall-Konfigurationsdatei öffnen, um die Masquerading-Regeln hinzuzufügen, müssen Sie zuerst die öffentliche Netzwerkschnittstelle Ihres Computers finden. Geben Sie dazu Folgendes ein:
- ip route list default
Ihre öffentliche Schnittstelle ist die Zeichenfolge in der Ausgabe dieses Befehls, die auf das Wort „dev“ folgt. Dieses Ergebnis zeigt beispielsweise die Schnittstelle mit dem Namen eth0
, die unten hervorgehoben wird:
Outputdefault via 159.65.160.1 dev eth0 proto static
Wenn Sie die Schnittstelle mit Ihrer Standardroute verknüpft haben, öffnen Sie /etc/ufw/before.rules
Datei, um die relevante Konfiguration hinzuzufügen:
- sudo nano /etc/ufw/before.rules
UFW-Regeln werden normalerweise mit ufw
hinzugefügt Befehl. Regeln, die in before.rules
aufgeführt sind Datei werden jedoch gelesen und platziert, bevor die herkömmlichen UFW-Regeln geladen werden. Fügen Sie am Anfang der Datei die unten hervorgehobenen Zeilen hinzu. Dadurch wird die Standardrichtlinie für POSTROUTING
festgelegt Kette im nat
Tabelle und maskieren Sie jeglichen Datenverkehr, der vom VPN kommt. Denken Sie daran, eth0
im -A POSTROUTING
Zeile unten mit der Schnittstelle, die Sie im obigen Befehl gefunden haben:
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
# Don't delete these required lines, otherwise there will be errors
*filter
. . .
Save and close the file when you are finished.
Next, you need to tell UFW to allow forwarded packets by default as well. To do this, open the /etc/default/ufw
file:
- sudo nano /etc/default/ufw
Inside, find the DEFAULT_FORWARD_POLICY
directive and change the value from DROP
to ACCEPT
:
DEFAULT_FORWARD_POLICY="ACCEPT"
Save and close the file when you are finished.
Next, adjust the firewall itself to allow traffic to OpenVPN. If you did not change the port and protocol in the /etc/openvpn/server.conf
file, you will need to open up UDP traffic to port 1194
. If you modified the port and/or protocol, substitute the values you selected here.
In case you forgot to add the SSH port when following the prerequisite tutorial, add it here as well:
- sudo ufw allow 1194/udp
- sudo ufw allow OpenSSH
Hinweis :If you are using a different firewall or have customized your UFW configuration, you may need to add additional firewall rules. For example, if you decide to tunnel all of your network traffic over the VPN connection, you will need to ensure that port 53
traffic is allowed for DNS requests, and ports like 80
and 443
for HTTP and HTTPS traffic respectively. If there are other protocols that you are using over the VPN then you will need to add rules for them as well.
After adding those rules, disable and re-enable UFW to restart it and load the changes from all of the files you’ve modified:
- sudo ufw disable
- sudo ufw enable
Your server is now configured to correctly handle OpenVPN traffic. With the firewall rules in place, you can start the OpenVPN service on the server.
Step 10 — Starting OpenVPN
OpenVPN runs as a systemd
service, so you can use systemctl
to manage it. You will configure OpenVPN to start up at boot so you can connect to your VPN at any time as long as your server is running. To do this, enable the OpenVPN service by adding it to systemctl
:
- sudo systemctl -f enable [email protected]
Then start the OpenVPN service:
- sudo systemctl start [email protected]
Double check that the OpenVPN service is active with the following command. You should see active (running)
in the output:
- sudo systemctl status [email protected]
Output● [email protected] - OpenVPN service for server
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-04-21 17:58:24 UTC; 6s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 144351 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 4665)
Memory: 1.8M
CPU: 27ms
CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected]
└─144351 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf
. . .
You have now completed the server-side configuration for OpenVPN. Next, you will configure your client machine and connect to the OpenVPN Server.
Step 11 — Creating the Client Configuration Infrastructure
Creating configuration files for OpenVPN clients can be somewhat involved, as every client must have its own config and each must align with the settings outlined in the server’s configuration file. Rather than writing a single configuration file that can only be used on one client, this step outlines a process for building a client configuration infrastructure which you can use to generate config files on-the-fly. You will first create a “base” configuration file then build a script which will allow you to generate unique client config files, certificates, and keys as needed.
Get started by creating a new directory where you will store client configuration files within the client-configs
directory you created earlier:
- mkdir -p ~/client-configs/files
Next, copy an example client configuration file into the client-configs
directory to use as your base configuration:
- cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Open this new file using nano
oder Ihren bevorzugten Texteditor:
- nano ~/client-configs/base.conf
Inside, locate the remote
Richtlinie. This points the client to your OpenVPN server address — the public IP address of your OpenVPN server. If you decided to change the port that the OpenVPN server is listening on, you will also need to change 1194
to the port you selected:
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .
Be sure that the protocol matches the value you are using in the server configuration:
~/client-configs/base.confproto udp
Next, uncomment the user
und group
directives by removing the ;
sign at the beginning of each line:
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Find the directives that set the ca
, cert
, and key
. Comment out these directives since you will add the certs and keys within the file itself shortly:
# 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 client.crt
;key client.key
Similarly, comment out the tls-auth
directive, as you will add ta.key
directly into the client configuration file (and the server is set up to use tls-crypt
):
# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1
Mirror the cipher
and auth
settings that you set in the /etc/openvpn/server/server.conf
file:
cipher AES-256-GCM
auth SHA256
Next, add the key-direction
directive somewhere in the file. You must set this to “1” for the VPN to function correctly on the client machine:
key-direction 1
Finally, add a few commented out lines to handle various methods that Linux based VPN clients will use for DNS resolution. You’ll add two similar, but separate sets of commented out lines. The first set is for clients that do not use systemd-resolved
to manage DNS. These clients rely on the resolvconf
utility to update DNS information for Linux clients.
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
Now add another set of lines for clients that use systemd-resolved
for DNS resolution:
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .
Save and close the file when you are finished.
Later in Step 13 - Installing the Client Configuration step of this tutorial you will learn how to determine how DNS resolution works on Linux clients and which section to uncomment.
Next, you’ll create a script that will compile your base configuration with the relevant certificate, key, and encryption files and then place the generated configuration in the ~/client-configs/files
Verzeichnis. Open a new file called make_config.sh
within the ~/client-configs
directory:
- nano ~/client-configs/make_config.sh
Inside, add the following content:
~/client-configs/make_config.sh#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-crypt>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-crypt>') \
> ${OUTPUT_DIR}/${1}.ovpn
Save and close the file when you are finished.
Before moving on, be sure to mark this file as executable by typing:
- chmod 700 ~/client-configs/make_config.sh
This script will make a copy of the base.conf
file you made, collect all the certificate and key files you’ve created for your client, extract their contents, append them to the copy of the base configuration file, and export all of this content into a new client configuration file. This means that, rather than having to manage the client’s configuration, certificate, and key files separately, all the required information is stored in one place. The benefit of using this method is that if you ever need to add a client in the future, you can run this script to quickly create a new config file and ensure that all the important information is stored in a single, easy-to-access location.
Please note that any time you add a new client, you will need to generate new keys and certificates for it before you can run this script and generate its configuration file. You will get some practice using this script in the next step.
Step 12 — Generating Client Configurations
If you followed along with the guide, you created a client certificate and key named client1.crt
and client1.key
, respectively, in Step 6. You can generate a config file for these credentials by moving into your ~/client-configs
directory and running the script you made at the end of the previous step:
- cd ~/client-configs
- ./make_config.sh client1
This will create a file named client1.ovpn
in your ~/client-configs/files
directory:
- ls ~/client-configs/files
Outputclient1.ovpn
You need to transfer this file to the device you plan to use as the client. For instance, this could be your local computer or a mobile device.
While the exact applications used to accomplish this transfer will depend on your device’s operating system and your personal preferences, a dependable and secure method is to use SFTP (SSH file transfer protocol) or SCP (Secure Copy) on the backend. This will transport your client’s VPN authentication files over an encrypted connection.
Here is an example SFTP command which you can run from your local computer (macOS or Linux). This will copy the client1.ovpn
file you created in the last step to your home directory:
- sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/
Here are several tools and tutorials for securely transferring files from the OpenVPN server to a local computer:
- WinSCP
- How To Use SFTP to Securely Transfer Files with a Remote Server
- How To Use Filezilla to Transfer and Manage Files Securely on your VPS
Step 13 — Installing the Client Configuration
This section covers how to install a client VPN profile on Windows, macOS, Linux, iOS, and Android. None of these client instructions are dependent on one another, so feel free to skip to whichever is applicable to your device.
The OpenVPN connection will have the same name as whatever you called the .ovpn
Datei. In regards to this tutorial, this means that the connection is named client1.ovpn
, aligning with the first client file you generated.
Windows
Installing
Download the OpenVPN client application for Windows from OpenVPN’s Downloads page. Choose the appropriate installer version for your version of Windows.
Hinweis :OpenVPN needs administrative privileges to install.
After installing OpenVPN, copy the .ovpn
file to:
C:\Program Files\OpenVPN\config
When you launch OpenVPN, it will automatically locate the profile and make it available.
You must run OpenVPN as an administrator each time it’s used, even by administrative accounts. To do this without having to right-click and select Run as administrator every time you use the VPN, you must preset this from an administrative account. This also means that standard users will need to enter the administrator’s password to use OpenVPN. On the other hand, standard users can’t properly connect to the server unless the OpenVPN application on the client has admin rights, so the elevated privileges are necessary.
To set the OpenVPN application to always run as an administrator, right-click on its shortcut icon and go to Properties . At the bottom of the Compatibility tab, click the button to Change settings for all users . In the new window, check Run this program as an administrator .
Connecting
Each time you launch the OpenVPN GUI, Windows will ask if you want to allow the program to make changes to your computer. Klicken Sie auf Ja . Launching the OpenVPN client application only puts the applet in the system tray so that you can connect and disconnect the VPN as needed; it does not actually make the VPN connection.
Once OpenVPN is started, initiate a connection by going into the system tray applet and right-clicking on the OpenVPN applet icon. This opens the context menu. Select client1 at the top of the menu (that’s your client1.ovpn
profile) and choose Connect .
A status window will open showing the log output while the connection is established, and a message will show once the client is connected.
Disconnect from the VPN the same way:Go into the system tray applet, right-click the OpenVPN applet icon, select the client profile and click Disconnect .
macOS
Installing
Tunnelblick is a free, open source OpenVPN client for macOS. You can download the latest disk image from the Tunnelblick Downloads page. Double-click the downloaded .dmg
file and follow the prompts to install.
Towards the end of the installation process, Tunnelblick will ask if you have any configuration files. Answer I have configuration files and let Tunnelblick finish. Open a Finder window and double-click client1.ovpn
. Tunnelblick will install the client profile. Administrative privileges are required.
Connecting
Launch Tunnelblick by double-clicking the Tunnelblick icon in the Applications Mappe. Once Tunnelblick has been launched, there will be a Tunnelblick icon in the menu bar at the top right of the screen for controlling connections. Click on the icon, and then the Connect client1 menu item to initiate the VPN connection. If you are using custom DNS settings with Tunnelblick, you may need check “Allow changes to manually-set network settings” in the advanced configuration dialog.
Linux
Installing
If you are using Linux, there are a variety of tools that you can use depending on your distribution. Your desktop environment or window manager might also include connection utilities.
The most universal way of connecting, however, is to just use the OpenVPN software.
On Ubuntu or Debian, you can install it just as you did on the server by typing:
- sudo apt update
- sudo apt install openvpn
On CentOS you can enable the EPEL repositories and then install it by typing:
- sudo dnf install epel-release
- sudo dnf install openvpn
Configuring Clients that use systemd-resolved
First determine if your system is using systemd-resolved
to handle DNS resolution by checking the /etc/resolv.conf
file:
- cat /etc/resolv.conf
Output# This file is managed by man:systemd-resolved(8). Do not edit.
. . .
nameserver 127.0.0.53
options edns0
If your system is configured to use systemd-resolved
for DNS resolution, the IP address after the nameserver
option will be 127.0.0.53
. There should also be comments in the file like the output that is shown that explain how systemd-resolved
is managing the file. If you have a different IP address than 127.0.0.53
then chances are your system is not using systemd-resolved
and you can go to the next section on configuring Linux clients that have an update-resolv-conf
script instead.
To support these clients, first install the openvpn-systemd-resolved
Paket. It provides scripts that will force systemd-resolved
to use the VPN server for DNS resolution.
- sudo apt install openvpn-systemd-resolved
One that package is installed, configure the client to use it, and to send all DNS queries over the VPN interface. Open the client’s VPN file:
- nano client1.ovpn
Now uncomment the following lines that you added earlier:
client1.ovpnscript-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
Configuring Clients that use update-resolv-conf
If your system is not using systemd-resolved
to manage DNS, check to see if your distribution includes an /etc/openvpn/update-resolv-conf
script instead:
- ls /etc/openvpn
Outputupdate-resolv-conf
If your client includes the update-resolv-conf
file, then edit the OpenVPN client configuration file that you transferred earlier:
- nano client1.ovpn
Uncomment the three lines you added to adjust the DNS settings:
client1.ovpnscript-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
If you are using CentOS, change the group
directive from nogroup
to nobody
to match the distribution’s available groups:
group nobody
Save and close the file.
Connecting
Now, you can connect to the VPN by just pointing the openvpn
command to the client configuration file:
- sudo openvpn --config client1.ovpn
This should connect you to your VPN.
Hinweis: If your client uses systemd-resolved
to manage DNS, check the settings are applied correctly by running the systemd-resolve --status
command like this:
- systemd-resolve --status tun0
You should see output like the following:
OutputLink 22 (tun0)
. . .
DNS Servers: 208.67.222.222
208.67.220.220
DNS Domain: ~.
If you see the IP addresses of the DNS servers that you configured on the OpenVPN server, along with the ~.
setting for DNS Domain in the output, then you have correctly configured your client to use the VPN server’s DNS resolver. You can also check that you are sending DNS queries over the VPN by using a site like DNS leak test.com.
iOS
Installing
From the iTunes App Store, search for and install OpenVPN Connect, the official iOS OpenVPN client application. To transfer your iOS client configuration onto the device, connect it directly to a computer.
The process of completing the transfer with iTunes is outlined here. Open iTunes on the computer and click on iPhone> apps . Scroll down to the bottom to the File Sharing section and click the OpenVPN app. The blank window to the right, OpenVPN Documents , is for sharing files. Drag the .ovpn
file to the OpenVPN Documents window.
Now launch the OpenVPN app on the iPhone. You will receive a notification that a new profile is ready to import. Tap the green plus sign to import it.
Connecting
OpenVPN is now ready to use with the new profile. Start the connection by sliding the Connect button to the On Position. Disconnect by sliding the same button to Off .
Hinweis :The VPN switch under Settings cannot be used to connect to the VPN. If you try, you will receive a notice to only connect using the OpenVPN app.
Android
Installing
Open the Google Play Store. Search for and install Android OpenVPN Connect, the official Android OpenVPN client application.
You can transfer the .ovpn
profile by connecting the Android device to your computer by USB and copying the file over. Alternatively, if you have an SD card reader, you can remove the device’s SD card, copy the profile onto it and then insert the card back into the Android device.
Start the OpenVPN app and tap the FILE
menu to import the profile.
Then navigate to the location of the saved profile (the screenshot uses /storage/emulated/0/openvpn
) and select your .ovpn
Datei. Tap the IMPORT
button to finish importing this profile.
Connecting Once the profile is added, you will see a screen like this:
To connect, tap the toggle button close to the profile you want to use. You’ll see real time stats of your connection and traffic being routed through your OpenVPN server:
To disconnect, just tap the toggle button on the top left once again. You will be prompted to confirm that you want to disconnect from your VPN.
Step 14 — Testing Your VPN Connection (Optional)
Hinweis: This method for testing your VPN connection will only work if you opted to route all your traffic through the VPN in Step 7 when you edited the server.conf
file for OpenVPN.
Once everything is installed, a simple check confirms everything is working properly. Without having a VPN connection enabled, open a browser and go to DNSLeakTest.
The site will return the IP address assigned by your internet service provider and as you appear to the rest of the world. To check your DNS settings through the same website, click on Extended Test and it will tell you which DNS servers you are using.
Now connect the OpenVPN client to your Droplet’s VPN and refresh the browser. A completely different IP address (that of your VPN server) should now appear, and this is how you appear to the world. Again, DNSLeakTest’s Extended Test will check your DNS settings and confirm you are now using the DNS resolvers pushed by your VPN.
Step 15 — Revoking Client Certificates
Occasionally, you may need to revoke a client certificate to prevent further access to the OpenVPN server.
To do so, follow the example in the prerequisite tutorial on How to Set Up and Configure a Certificate Authority on Ubuntu 22.04 under the Revoking a Certificate Abschnitt.
Once you have revoked a certificate for a client using those instructions, you’ll need to copy the generated crl.pem
file to your OpenVPN server in the /etc/openvpn/server
directory:
- sudo cp /tmp/crl.pem /etc/openvpn/server/
Next, open the OpenVPN server configuration file:
- sudo nano /etc/openvpn/server/server.conf
At the bottom of the file, add the crl-verify
option, which will instruct the OpenVPN server to check the certificate revocation list that you created each time a connection attempt is made:
crl-verify crl.pem
Save and close the file.
Finally, restart OpenVPN to implement the certificate revocation:
- sudo systemctl restart [email protected]
The client should no longer be able to successfully connect to the server using the old credential.
To revoke additional clients, follow this process:
- Revoke the certificate with the
./easyrsa revoke client_name
Befehl - Generate a new CRL
- Transfer the new
crl.pem
file to your OpenVPN server and copy it to the/etc/openvpn/server/
directory to overwrite the old list. - Restart the OpenVPN service.
You can use this process to revoke any certificates that you’ve previously issued for your server.
Conclusion
You should now have a fully operational virtual private network running on your OpenVPN Server. You can browse the web and download content without worrying about malicious actors tracking your activity.
There are several steps you could take to customize your OpenVPN installation even further, such as configuring your client to connect to the VPN automatically or configuring client-specific rules and access policies. For these and other OpenVPN customizations, you should consult the official OpenVPN documentation.
To configure more clients, you only need to follow steps 6 and 11-13 for each additional device. To revoke access to clients, follow step 15 .