So richten Sie OpenVPN unter Ubuntu 20.04 ein

OpenVPN ist ein funktionsreiches Open-Source-Secure Socket Layer (SSL) VPN. VPN ermöglicht die sichere Verbindung nicht vertrauenswürdiger Netzwerke wie WIFI-Netzwerke in Hotels oder Flughäfen oder Einkaufszentren. VPN ermöglicht auch eine sichere Verbindung zum Unternehmensnetzwerk, um auf Ressourcen zuzugreifen. Die Tunnel werden durch SSL/TLS-Authentifizierung, Zertifikate und Anmeldeinformationen gesichert.

In diesem Tutorial zeige ich Ihnen, wie Sie a . einrichten VPN mit OpenVPN an Ubuntu 20.04.

Voraussetzungen

Wir werden zwei Ubuntu-Server verwenden, die auf Version 20.04 laufen:

  • EIN Server der Zertifizierungsstelle (CA) die die Anfrage validiert und die Zertifikate der Clients signiert.
  • Der OpenVPN Server, auf dem wir das VPN installieren.

CA-Server konfigurieren

Es wurde empfohlen, einen eigenständigen Server zu verwenden, der als Ihre CA (Zertifizierungsstelle) dient. Dies aus Sicherheitsgründen. Fahren wir mit der Konfiguration des CA-Servers fort.

Stellen Sie zunächst sicher, dass das System aktualisiert ist. Führen Sie den folgenden Befehl aus:

$ sudo apt update

Sie müssen einen Nicht-Root-Benutzer für die Konfigurationen des Zertifizierungsstellenservers erstellen.

$ sudo adduser malain

Geben Sie dem Benutzer nun die sudo Privilegien:

$ sudo usermod -aG sudo malain

Melden Sie sich nun ab und dann wieder mit dem Nicht-Root-Benutzer an.

EasyRSA auf dem CA-Server installieren

Einfach-rsa ist ein CLI-Dienstprogramm zum Erstellen und Verwalten einer PKI-CA. Easy-RSA wird vom CA-Server verwendet, um einen privaten Schlüssel und ein öffentliches Stammzertifikat zu generieren, die verwendet werden, um die Anfragen von Clients und Servern zu signieren, die auf unsere CA angewiesen sind.

Um easy-rsa zu installieren, laden Sie das PKI-Verwaltungstool von github mit wget herunter:

$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

Dann die tgz-Datei entpacken:

$ tar xvf EasyRSA-3.0.8.tgz

Um den Zugriff nur auf den Benutzer einzuschränken, verwenden Sie:

$ chmod 700 EasyRSA-3.0.8

Verschieben Sie jetzt EasyRSA in die opt Verzeichnis

$ sudo mv EasyRSA-3.0.8 /opt/

Wir benutzen EasyRSA 3.0.8 Version für diese Konfiguration.

CA mit EasyRSA erstellen

Zuerst müssen Sie eine Datei namens . erstellen vars um die Organisationsinformationen zu speichern. Dazu können wir die example Datei im EasyRSA-3.0.8-Verzeichnis verfügbar.

Um Dateien im EasyRSA-Verzeichnis aufzulisten, verwenden Sie:

$ cd EasyRSA-3.0.8/ && ls -l

Ausgabe:

-rw-rw-r-- 1 malain malain 1305 Sep 9 2020 COPYING.md
-rw-rw-r-- 1 malain malain 5056 Sep 9 2020 ChangeLog
-rw-rw-r-- 1 malain malain 2049 Sep 9 2020 README.md
-rw-rw-r-- 1 malain malain 3335 Sep 9 2020 README.quickstart.md
drwxrwxr-x 2 malain malain 4096 Sep 9 2020 doc
-rwxrwxr-x 1 malain malain 76946 Sep 9 2020 easyrsa
-rw-rw-r-- 1 malain malain 18093 Sep 9 2020 gpl-2.0.txt
-rw-rw-r-- 1 malain malain 1036 Sep 9 2020 mktemp.txt
-rw-rw-r-- 1 malain malain 4616 Sep 9 2020 openssl-easyrsa.cnf
-rw-rw-r-- 1 malain malain 8925 Sep 9 2020 vars.example
drwxrwxr-x 2 malain malain 4096 Mar 28 14:14 x509-types

Erstellen Sie eine Kopie der Datei vars.example als vars:

$ cp vars.example vars

Öffnen Sie nun die vars-Datei und fügen Sie die Organisationsinformationen am Ende der Datei hinzu:

$ vim vars
set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Littoral"
set_var EASYRSA_REQ_CITY "Douala"
set_var EASYRSA_REQ_ORG "OPEN-SHARE"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Initialisieren Sie nun unsere PKI auf unserem CA-Server, der den pki-Ordner erstellt.

$ ./easyrsa init-pki

Wir können jetzt die generieren Root-Öffentlichkeit und privates Schlüsselpaar für unsere CA. Während des Vorgangs werden Sie normalerweise immer dann aufgefordert, eine Passphrase für das Schlüsselpaar einzugeben, wenn Sie ein Zertifikat signieren oder widerrufen müssen. In unserem Fall verwenden wir den Befehl, damit wir nicht nach einer Passphrase gefragt werden. Sie werden auch aufgefordert, a . anzugeben Gemeinsamen Namen (CN), aber wir verlassen die Standardeinstellung, indem wir drücken Enter Schlüssel.

$ ./easyrsa build-ca nopass

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
read EC key
writing EC key
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/EasyRSA-3.0.8/pki/ca.crt

Dadurch entsteht Wurzelzertifikat benannte ca.crt-Datei im pki-Verzeichnis und die pRivate-Schlüssel ca.key im pki/private-Verzeichnis.

$ ls -l pki/
total 52
-rw------- 1 malain malain 749 Mar 28 14:30 ca.crt
drwx------ 2 malain malain 4096 Mar 28 14:29 certs_by_serial
drwx------ 2 malain malain 4096 Mar 28 14:29 ecparams
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt.attr
drwx------ 2 malain malain 4096 Mar 28 14:29 issued
-rw------- 1 malain malain 4616 Mar 28 14:24 openssl-easyrsa.cnf
drwx------ 2 malain malain 4096 Mar 28 14:30 private
drwx------ 5 malain malain 4096 Mar 28 14:29 renewed
drwx------ 2 malain malain 4096 Mar 28 14:24 reqs
drwx------ 5 malain malain 4096 Mar 28 14:29 revoked
-rw------- 1 malain malain 4575 Mar 28 14:24 safessl-easyrsa.cnf
-rw------- 1 malain malain 3 Mar 28 14:29 serial

$ ls -l pki/private/
total 4
-rw------- 1 malain malain 288 Mar 28 14:29 ca.key

Damit ist unser CA-Server fertig.

Openvpn-Server installieren und konfigurieren

Springen wir zum zweiten Server, um openvpn zu installieren und zu konfigurieren. Sie müssen auf diesem Server auch einen Nicht-Root-Benutzer erstellen und ihm die sudo Privilegien.

Zu openvpn installieren Führen Sie unter Ubuntu die folgenden Befehle aus:

$ sudo apt update
$ sudo apt install openvpn

Auf dem openvpn-Server wird easyrsa verwendet, um eine Zertifikatsanforderung zu generieren, die vom CA-Server überprüft und signiert wird. Befolgen Sie die gleichen Schritte wie im letzten Abschnitt, um Easyrsa zu installieren.

$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

Entpacken Sie nun die heruntergeladene tgz-Datei:

$ tar xvf EasyRSA-3.0.8.tgz

Beschränken Sie den Zugriff nur auf den Benutzer:

$ chmod 700 EasyRSA-3.0.8

Verschieben Sie EasyRSA-3.0.8 in den opt Verzeichnis:

$ sudo mv EasyRSA-3.0.8 /opt/

Erstellen Sie eine PKI

Jetzt müssen wir PKI erstellen das hilft, TLS-Zertifikate für die Clients und die anderen Server, die sich mit unserem VPN verbinden, anzufordern und zu verwalten.

Lassen Sie uns eine vars-Datei mit der bereits verfügbaren Beispieldatei erstellen:

$ cp vars.example vars

Bearbeiten Sie nun die vars-Datei, indem Sie die folgenden Zeilen am Ende der Datei hinzufügen:

$ vim vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

So erstellen Sie den PKI-Ordner Führen Sie auf dem openvpn-Server die easyrsa Skriptdatei:

$ ./easyrsa init-pki

Ausgabe:

Hinweis: Verwenden der Easy-RSA-Konfiguration von: /opt/EasyRSA-3.0.8/vars init-pki complete; Sie können jetzt eine Zertifizierungsstelle oder Anfragen erstellen. Ihr neu erstelltes PKI-Verzeichnis ist: /opt/EasyRSA-3.0.8/pki

Erstellen Sie die Serverzertifikatsanforderung und den privaten Schlüssel

Jetzt generieren wir a Privat Schlüssel und Zertifikatsanfrage auf dem OpenVPN-Server. Anschließend übertragen wir die Zertifikatsanforderungsdatei zum Signieren an den CA-Server, um das erforderliche Zertifikat zu erstellen

Da wir uns im selben Ordner befinden, können wir die Anfrage mit dem generieren nopass Möglichkeit. Der folgende Befehl erstellt eine private Schlüsseldatei namens openvpn-server.key und eine Zertifikatsanforderungsdatei namens openvpn-server.req.

$ ./easyrsa gen-req openvpn-server nopass

Ausgabe:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Generating an EC private key
writing new private key to '/opt/EasyRSA-3.0.8/pki/easy-rsa-4737.CGhQHN/tmp.UGQ9wi'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [openvpn-server]:

Keypair and certificate request completed. Your files are:
req: /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req
key: /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key

Kopieren Sie nun die Serverschlüsseldatei namens openvpn-server.key in das Verzeichnis namens /etc/openvpn/server.

$ sudo cp /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key /etc/openvpn/server

Kopieren Sie dann die Zertifikatsanforderungsdatei in die CA-Server:

$ scp /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req [email protected]:/tmp

Wechseln Sie auf dem CA-Server in das easyrsa-Verzeichnis,

$ cd /opt/EasyRSA-3.0.8/

Zu Importieren Sie die Anfrage, führen Sie den folgenden Befehl aus:

$ ./easyrsa import-req /tmp/openvpn-server.req openvpn-server

Ausgabe:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

The request has been successfully imported with a short name of: openvpn-server
You may now use this name to perform signing operations on this request.

Unterschreiben Sie nun die Anfrage. Da wir die Anfrage des Servers unterschreiben, sollten wir die Anweisung verwenden server vor dem Common Name unseres openvpn-Servers. Wenn es eine Anfrage eines Kunden war, sollten wir die Anweisung verwenden client stattdessen.

Zu unterschreibe die Anfrage:

$ ./easyrsa sign-req server openvpn-server

Ausgabe:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

You 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 825 days:

subject=
commonName = openvpn-server

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-4100.IbygpP/tmp.hJY2T5
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'openvpn-server'
Certificate is to be certified until Jul 1 19:50:36 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/openvpn-server.crt

Nachdem die Zertifikatsanfrage des OpenVPN-Servers vom CA-Server signiert wurde, müssen wir die signierte Anfrage und das öffentliche Zertifikat an den OpenVPN-Server übertragen.

$ scp pki/{ca.crt,issued/openvpn-server.crt} [email protected]:/tmp

$ sudo cp /tmp/{ca.crt,openvpn-server.crt} /etc/openvpn/server

Wir werden jetzt den tls-crypt Pre-Shared Key generieren, um sicherzustellen, dass unser OpenVPN-Server in der Lage ist, nicht authentifizierten Datenverkehr, Port-Scans und einige Angriffe zu bewältigen, die viele Ressourcen des Servers verbrauchen können.

$ ./easyrsa gen-dh

Ausgabe:

Hinweis: Verwendung von Easy-RSA-Konfiguration von: /opt/EasyRSA-3.0.8/vars Verwendung von SSL: openssl OpenSSL 1.1.1f 31 Mär 2020 Generieren von DH-Parametern, 2048 Bit lange sichere Primzahl, Generator 2 Dies wird lange dauern ……………………………..+………… …………. ………………………………. …………………….. …………………… ………………………………… ……….. …………………………..+…….+…….+. .. …..+…………………………………………. …………………………………………++* ++*++*++* DH-Parameter der Größe 2048 erstellt unter /opt/EasyRSA-3.0.8/pki/dh.pem

$ openvpn --genkey --secret ta.key

Kopieren Sie nun die key- und pem-Dateien in das Verzeichnis /etc/openvpn/server:

$ sudo cp ta.key pki/dh.pem /etc/openvpn/server

Generieren Sie ein Client-Zertifikat und ein Schlüsselpaar

Wir müssen ein Verzeichnis erstellen, um die Zertifikate und die Schlüssel der Clients zu speichern. Stellen Sie sicher, dass Sie dem Nicht-Root-Benutzer die Berechtigung erteilen.

$ sudo mkdir -p /opt/client-configs/keys
$ sudo chown franck:franck -R /opt/client-configs
$ sudo chmod 700 -R /opt/client-configs

Generieren Sie die Anforderung für das Client-Zertifikat:

$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa gen-req my-pc nopass

Ausgabe:

Hinweis: Verwendung von Easy-RSA-Konfiguration von: /opt/EasyRSA-3.0.8/vars Verwendung von SSL: openssl OpenSSL 1.1.1f 31. März 2020 Generieren eines privaten EC-Schlüssels, der neuen privaten Schlüssel nach ‘/opt/EasyRSA-3.0.8/ schreibt pki/easy-rsa-6961.m7fBMu/tmp.dkqaZI’ —– Sie werden aufgefordert, Informationen einzugeben, die in Ihre Zertifikatsanforderung aufgenommen werden. Was Sie gerade eingeben, ist ein sogenannter Distinguished Name oder DN. Es gibt einige Felder, aber Sie können einige leer lassen Für einige Felder gibt es einen Standardwert. Wenn Sie ‘.’ eingeben, wird das Feld leer gelassen. —– Allgemeiner Name (zB: Ihr Benutzer-, Host- oder Servername) [my-pc]: Schlüsselpaar- und Zertifikatsanforderung abgeschlossen. Ihre Dateien sind: req: /opt/EasyRSA-3.0.8/pki/reqs/my-pc.req key: /opt/EasyRSA-3.0.8/pki/private/my-pc.key

Kopieren Sie nun den Clientschlüssel in das Verzeichnis client-configs:

$ cp pki/private/my-pc.key /opt/client-configs/keys/

Kopieren Sie die Client-Zertifikatsanforderungsdatei auf den CA-Server:

$ scp pki/reqs/my-pc.req [email protected]:/tmp

Importieren Sie auf dem CA-Server die CSR:

$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa import-req /tmp/my-pc.req my-pc

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

The request has been successfully imported with a short name of: my-pc
You may now use this name to perform signing operations on this request.

Jetzt sollten wir die Anfrage für den Client unterschreiben, geben Sie Folgendes ein:

$ ./easyrsa sign-req client my-pc

Ausgabe:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

You 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 client certificate for 825 days:

subject=
commonName = my-pc

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-5511.IwDcbS/tmp.doUbCv
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'my-pc'
Certificate is to be certified until Jul 1 21:33:52 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/my-pc.crt

Kopieren Sie das Client-Zertifikat auf den openvpn-Server:

$ scp pki/issued/my-pc.crt [email protected]:/tmp

Jetzt müssen wir auf dem openvpn-Server alle Client-Dateien in das zuvor erstellte Client-Verzeichnis kopieren.

$ sudo cp /tmp/my-pc.crt /opt/client-configs/keys/

$ sudo cp /etc/openvpn/server/ca.crt /opt/client-configs/keys/

$ cp /opt/EasyRSA-3.0.8/ta.key /opt/client-configs/keys/

Stellen Sie sicher, dass der Benutzer ohne Rootberechtigung über die Berechtigungen für die Dateien verfügt.

$ sudo chown franck:franck /opt/client-configs/keys/*

VPN-Dienst konfigurieren

Wir sollten zuerst eine Kopie der zu verwendenden Vorlage erstellen

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/

Dann dekomprimieren Sie die Datei

$ sudo gzip -d /etc/openvpn/server/server.conf.gz

Und geh in den Ordner

$ cd /etc/openvpn/server

Einige Zeilen werden ersetzt, um unserer Konfiguration zu entsprechen::

  • Die kryptografischen Verschlüsselungen werden auf gesetzt AES-256-CBC
  • Der HMAC-Message-Digest-Algorithmus ist sha256
  • Da wir auch einen Diffie-Hellman-Parameter verwenden, setzen wir ihn auf dh.pem
  • Wir verwenden den Benutzer niemand und Gruppe keine Gruppe openvpn ohne Privilegien ausführen, sobald es gestartet wurde
  • Wir werden die DNS-Änderungen pushen, um den gesamten Datenverkehr mit den Werten durch das VPN umzuleiten push redirect-gateway def1 bypass-dhcp, push dhcp-option DNS 208.67.222.222, push dhcp-option DNS 208.67.220.220
  • Wir behalten den Standardport bei 1194
  • Wir werden die verwenden udp Protokoll
  • wir sollten den schlüssel angeben openvpn-server.key und Zertifikat openvpn-server.crt als Ausweis verwenden

Die Datei sollte also wie folgt aussehen:

$ sudo vim /etc/openvpn/server/server.conf
tls-crypt ta.key
cipher AES-256-CBC
auth SHA256
dh dh.pem
user nobody
group nogroup
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
port 1194
proto udp
explicit-exit-notify 1
cert openvpn-server.crt
key openvpn-server.key

Sie sollten die IP-Weiterleitung aktivieren, indem Sie den net.ipv4.ip_forward-Wert in /etc/sysctl.conf bearbeiten.

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1

Um die Änderungen, die wir in /etc/sysctl.conf vorgenommen haben, wirksam zu machen, führen Sie Folgendes aus:

$ sudo sysctl -p
net.ipv4.ip_forward = 1

Jetzt müssen Sie OpenVPN durch Ihre Firewall zulassen, indem Sie die Maskierung aktivieren. Dazu müssen Sie den Namen Ihrer öffentlichen Netzwerkschnittstelle ermitteln:

$ ip route | grep default
default via X.X.X.X dev eth0 proto static

In unserem Fall ist es eth0. Jetzt sollten wir die Maskerade-Regeln in der Firewall-Konfiguration hinzufügen, also fügen wir die folgende Zeile am Anfang der Regeldateien hinzu:

$ sudo vim /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to the public server interface eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Lassen Sie uns nun ufw bearbeiten, um weitergeleitete Pakete standardmäßig zuzulassen.

$ sudo vim /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

Öffnen Sie den openvpn-Port auf der Firewall:

$ sudo ufw allow '1194/udp'

Um den ufw-Dienst neu zu starten, geben Sie Folgendes ein:

$ sudo ufw disable && sudo ufw enable

Geben Sie Folgendes ein, um den openvpn-Dienst als Systemstart zu starten:

$ sudo systemctl enable openvpn-server@server

Um openvpn zu starten, geben Sie Folgendes ein:

$ sudo systemctl start openvpn-server@server

Sie können den openvpn-Status überprüfen, indem Sie:

$ sudo systemctl status openvpn-server@server

Ausgabe:

[email protected] - OpenVPN service for server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-03-28 23:30:57 UTC; 8s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 78132 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 1073)
Memory: 1.0M
CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected]
└─78132 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Mar 28 23:30:57 localhost systemd[1]: Starting OpenVPN service for server...
Mar 28 23:30:57 localhost systemd[1]: Started OpenVPN service for server.

Geben Sie Folgendes ein, um die Tunnelschnittstelle zu überprüfen:

$ ip addr show tun0

Ausgabe:

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::c3d9:85d1:e2a9:6b2c/64 scope link stable-privacy
valid_lft forever preferred_lft forever

VPN-Dateien für Clients konfigurieren

$ sudo mkdir -p /opt/client-configs/files

Jetzt sollten wir die Beispielkonfigurationsdatei kopieren

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /opt/client-configs/base.conf

Erteilen Sie dem Nicht-Root-Benutzer die Berechtigung

$ sudo chown franck:franck -R /opt/client-configs/

Bearbeiten Sie die Datei base.conf

$ vim /opt/client-configs/base.conf
remote your_server_ip 1194
proto udp
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
#ca ca.crt
#cert client.crt
#key client.key
#tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
key-direction 1
# For the clients using resolvconf for DNS resolution, uncomment the lines below on the client computer
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
# Instead for the clients using systemd-resolved for DNS resolution, uncomment the lines below on the client computer
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

Jetzt erstellen wir ein Skript zum Generieren der Zertifikate und verschlüsselten Dateien auf dem Client. Das Skript erstellt außerdem eine Kopie der Datei base.conf und sammelt alle für die Clients erstellten Schlüssel und Zertifikate. Für jeden Client müssten wir ein Zertifikat und einen Schlüssel generieren, bevor wir das Skript ausführen können

$ vim /opt/client-configs/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=/opt/client-configs/keys
OUTPUT_DIR=/opt/client-configs/files
BASE_CONFIG=/opt/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-auth>')
${KEY_DIR}/ta.key
<(echo -e '</tls-auth>')
> ${OUTPUT_DIR}/${1}.ovpn

Stellen Sie sicher, dass nur der Nicht-Root-Benutzer das Skript ausführen kann.

$ chmod 700 /opt/client-configs/make_config.sh

Jetzt können Sie die Client-Verbindungsdatei basierend auf der Client-Schlüssel- und Zertifikatskonfiguration (my-pc.crt und my-pc.key) generieren.

$ cd /opt/client-configs

Führen Sie nun das Skript gefolgt vom allgemeinen Namen des Clients aus, der die zu verwendende Client-VPN-Datei erstellt.

$ ./make_config.sh my-pc

Sie können das Ergebnis überprüfen:

$ ls -l files/
total 12
-rw-rw-r-- 1 franck franck 8598 Mar 30 11:12 my-pc.ovpn

Verbinden Sie den Client mit der OpenVPN-Verbindung

Installieren Sie openvpn auf dem Client. Dies wird verwendet, um die VPN-Verbindung mit dem Server herzustellen

$ sudo apt update && sudo apt install openvpn -y

Kopieren Sie nun die OpenVPN-Client-Datei, die sich auf dem Server befindet, auf Ihren Client-Computer. Führen Sie also auf Ihrem Client-Computer den folgenden Befehl aus:

$ rsync -av [email protected]:/opt/client-configs/files/my-pc.ovpn .

Bevor wir die OpenVPN-Konfigurationsdatei des Clients bearbeiten, müssen wir überprüfen, ob wir resolvconf oder systemd-resolved für die DNS-Auflösung verwenden

$ cat /etc/resolv.conf
OUTPUT:
# This file is managed by man:systemd-resolved(8). Do not edit.
. . .

nameserver 127.0.0.53
options edns0

Mit dem Wert nameserver 127.0.0.53, zeigt es an, dass Sie systemd-resolved verwenden. Installieren Sie also ein Paket, das systemd-resolved hilft, das VPN für die DNS-Auflösung zu verwenden, wenn eine Verbindung besteht.

$ sudo apt install openvpn-systemd-resolved

Jetzt können wir die VPN-Client-Datei bearbeiten, indem wir die für systemd-resolved benötigten Zeilen auskommentieren

$ vim my-pc.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .

Für das System, das update-resolv-conf verwendet, entkommentieren Sie die Zeilen

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Jetzt versuchen wir es Verbindung zum VPN herstellen Verwenden des openvpn-Befehls zur Client-Konfigurationsdatei:

$ sudo openvpn --config my-pc.ovpn

Sie können die IP-Informationen für die Tunnelschnittstelle überprüfen

$ ip a

Dadurch wird eine Tunnel-IP-Adresse angezeigt und wir können einen Ping an den OpenVPN-Server senden. Damit können Sie bestätigen, dass Sie Ihren Server erreichen können, als ob Sie sich im selben privaten Netzwerk befinden würden.

Fazit

Bei Verwendung von OpenVPN ist es einfach, eine VPN-Verbindung einzurichten. Dies ist eine gute Lösung, wenn Sie eine VPN-Lösung auf Ihrem Cloud-Server einrichten möchten, ohne eine spezielle Lösung wie eine virtuelle Firewall oder etwas anderes zu verwenden. Es ist eine schnelle und sichere Lösung.