OpenVPN ist ein funktionsreiches Open-Source-SSL-VPN (Secure Socket Layer). VPN ermöglicht die sichere Verbindung von nicht vertrauenswürdigen Netzwerken wie WIFI-Netzwerken in Hotels oder Flughäfen oder Einkaufszentren. VPN ermöglicht auch eine sichere Verbindung zum Unternehmensnetzwerk, um auf Ressourcen zuzugreifen. Die Tunnel werden durch die Verwendung von SSL/TLS-Authentifizierung, Zertifikaten und Anmeldeinformationen gesichert.
In diesem Tutorial zeige ich Ihnen, wie Sie ein VPN einrichten mit OpenVPN auf Ubuntu 20.04 .
Voraussetzungen
Wir werden zwei Ubuntu-Server verwenden, die auf Version 20.04 ausgeführt werden:
- Ein Certificate Authority (CA)-Server die die Anfrage validiert und die Zertifikate der Clients signiert.
- Das OpenVPN Server, auf dem wir das VPN installieren werden.
CA-Server konfigurieren
Es wird empfohlen, einen eigenständigen Server als CA (Zertifizierungsstelle) zu verwenden. Dies aus Sicherheitsgründen. Lassen Sie uns mit der Konfiguration des CA-Servers fortfahren.
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-Berechtigungen:
$ sudo usermod -aG sudo malain
Melden Sie sich jetzt ab und dann wieder mit dem Nicht-Root-Benutzer an.
Installieren Sie EasyRSA auf dem CA-Server
Easy-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 zum Signieren der Anforderungen von Clients und Servern verwendet werden, die sich auf unsere CA verlassen.
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 tgz-Datei entpacken:
$ tar xvf EasyRSA-3.0.8.tgz
Um den Zugriff nur auf den Benutzer zu beschränken, verwenden Sie:
$ chmod 700 EasyRSA-3.0.8
Verschieben Sie nun EasyRSA nach opt
Verzeichnis
$ sudo mv EasyRSA-3.0.8 /opt/
Wir verwenden EasyRSA 3.0.8 Version für diese Konfiguration.
Zertifizierungsstelle mit EasyRSA erstellen
Zuerst müssen Sie eine Datei namens vars
erstellen um die Organisationsinformationen zu speichern. Dazu können wir die im EasyRSA-3.0.8-Verzeichnis verfügbare Beispieldatei verwenden.
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 das Root Public generieren und privates Schlüsselpaar für unsere CA. Während des Vorgangs werden Sie normalerweise 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 zur Eingabe einer Passphrase aufgefordert werden. Sie werden auch aufgefordert, einen allgemeinen Namen anzugeben (CN), aber wir verlassen die Standardeinstellung, indem wir die Eingabetaste drücken.
$ ./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 wird ein Stammzertifikat erstellt benannte ca.crt-Datei im pki-Verzeichnis und den privaten Schlüssel ca.key im Verzeichnis pki/private.
$ 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 bereit.
Installieren und konfigurieren Sie den Openvpn-Server
Springen wir zum zweiten Server, um openvpn zu installieren und zu konfigurieren. Sie müssen auch einen Nicht-Root-Benutzer auf diesem Server erstellen und ihm den sudo
geben Privilegien.
Um openvpn zu 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 verifiziert 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 nach opt
Verzeichnis:
$ sudo mv EasyRSA-3.0.8 /opt/
Erstellen Sie eine PKI
Jetzt müssen wir PKI erstellen Dies hilft beim Anfordern und Verwalten von TLS-Zertifikaten für die Clients und die anderen Server, die sich mit unserem VPN verbinden.
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 easyrsa
aus Skriptdatei:
$ ./easyrsa init-pki
Ausgabe:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /opt/EasyRSA-3.0.8/pki
Erstellen Sie die Serverzertifikatanforderung und den privaten Schlüssel
Jetzt generieren wir einen privaten Schlüssel und Zertifikatsanforderung auf dem OpenVPN-Server. Anschließend übertragen wir die Zertifikatsanforderungsdatei zum Signieren an den CA-Server, um das benötigte Zertifikat zu erstellen
Da wir uns im selben Ordner befinden, können wir die Anfrage mit dem nopass
generieren Möglichkeit. Der folgende Befehl erstellt eine private Schlüsseldatei namens openvpn-server.key und eine Zertifikatanforderungsdatei 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 Zertifikatanforderungsdatei auf den 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/
Um die Anfrage zu importieren , 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 jetzt den Antrag. Da wir die Anfrage des Servers signieren, sollten wir die Direktive server
verwenden vor dem Common Name unseres OpenVPN-Servers. Wenn es eine Anfrage eines Clients war, sollten wir die Direktive client
verwenden stattdessen.
Um die Anfrage zu unterzeichnen :
$ ./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 Zertifikatsanforderung des OpenVPN-Servers vom CA-Server signiert wurde, müssen wir die signierte Anforderung 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 vorinstallierten tls-crypt-Schlüssel generieren, um sicherzustellen, dass unser OpenVPN-Server in der Lage ist, mit nicht authentifiziertem Datenverkehr, Port-Scans und einigen Angriffen fertig zu werden, die viele Ressourcen des Servers verbrauchen können.
$ ./easyrsa gen-dh
Ausgabe:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ....................................+.......................... ............................................................... ............................................................... ...........................................+.......+.......+... .....+.......................................................... ...............................++*++*++*++* DH parameters of size 2048 created at /opt/EasyRSA-3.0.8/pki/dh.pem
$ openvpn --genkey --secret ta.key
Kopieren Sie nun die Schlüssel- 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 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:
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-6961.m7fBMu/tmp.dkqaZI' ----- 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) [my-pc]: Keypair and certificate request completed. Your files are: 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 Anforderungsdatei für das Client-Zertifikat 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 signieren, geben Sie 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 Client-Verzeichnis kopieren, das wir zuvor erstellt haben.
$ 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 Nicht-Root-Benutzer die Berechtigungen für die Dateien hat.
$ 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/
Anschließend die Datei dekomprimieren
$ sudo gzip -d /etc/openvpn/server/server.conf.gz
Und betreten Sie den Ordner
$ cd /etc/openvpn/server
Einige Zeilen werden ersetzt, damit sie unserer Konfiguration entsprechen::
- Die kryptografischen Chiffren werden auf
AES-256-CBC
gesetzt - Der HMAC-Message-Digest-Algorithmus ist
sha256
- Da wir auch einen Diffie-Hellman-Parameter verwenden, setzen wir ihn auf
dh.pem
- Wir werden den Benutzer nobody verwenden und Gruppe nogroup openvpn nach dem Start ohne Privilegien auszuführen
- Wir werden die DNS-Änderungen pushen, um den gesamten Datenverkehr durch das VPN mit den Werten
push redirect-gateway def1 bypass-dhcp
umzuleiten ,push dhcp-option DNS 208.67.222.222
,push dhcp-option DNS 208.67.220.220
- Wir behalten den Standardport
1194
bei - Wir werden den
udp
verwenden Protokoll - Wir sollten den Schlüssel
openvpn-server.key
angeben und Zertifikatopenvpn-server.crt
als Anmeldedaten 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 Wert net.ipv4.ip_forward 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 das Masquerading aktivieren. Dazu müssen Sie den Namen Ihrer öffentlichen Netzwerkschnittstelle identifizieren:
$ ip route | grep default
default via X.X.X.X dev eth0 proto static
In unserem Fall ist es eth0. Jetzt sollten wir die Masquerades-Regeln in der Firewall-Konfiguration hinzufügen, also werden wir die folgende Zeile oben in den Regeldateien hinzufügen:
$ 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, damit der openvpn-Dienst beim Systemstart gestartet werden kann:
$ sudo systemctl enable openvpn-server@server
Um openvpn zu starten, geben Sie ein:
$ sudo systemctl start openvpn-server@server
Sie können den OpenVPN-Status wie folgt überprüfen:
$ 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-openvpn\x2dserver.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.
Um die Tunnelschnittstelle zu überprüfen, geben Sie Folgendes ein:
$ 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 die Berechtigung dem Nicht-Root-Benutzer
$ sudo chown franck:franck -R /opt/client-configs/
Bearbeiten Sie die base.conf-Datei
$ 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, um die Zertifikate und verschlüsselten Dateien auf dem Client zu generieren. Das Skript erstellt auch eine Kopie der Datei base.conf und sammelt alle Schlüssel und Zertifikate, die für die Clients erstellt wurden. Für jeden Client müssten wir ein Zertifikat und einen Schlüssel generieren, bevor wir das Skript ausführen
$ 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 Clientschlü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
Client mit der OpenVPN-Verbindung verbinden
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 Client-OpenVPN-Konfigurationsdatei bearbeiten, müssen wir prü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
, es zeigt, 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, werden Sie die Zeilen auskommentieren
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Versuchen wir nun, eine Verbindung zum VPN herzustellen Verwenden Sie den Befehl openvpn zur Client-Konfigurationsdatei:
$ sudo openvpn --config my-pc.ovpn
Sie können die IP-Informationen für die Tunnelschnittstelle überprüfen
$ ip a
Dies zeigt eine Tunnel-IP-Adresse und wir können einen Ping an den OpenVPN-Server senden. Damit können Sie bestätigen, dass Sie Ihren Server so erreichen können, als ob Sie sich im selben privaten Netzwerk befänden.
Schlussfolgerung
Bei der 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.