GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So richten Sie OpenVPN unter Ubuntu 20.04 ein

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 Zertifikat openvpn-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.


Ubuntu
  1. So richten Sie virtuelle Apache-Hosts unter Ubuntu 18.04 ein

  2. So installieren Sie Redis unter Ubuntu 20.04 / 18.04

  3. So stellen Sie den DNS-Nameserver unter Ubuntu 20.04 ein

  4. Ubuntu – Wie stellt man eine statische IP in Ubuntu ein?

  5. Wie richte ich einen Dienst ein?

So richten Sie OpenVPN auf Ubuntu Server ein

So richten Sie einen OpenVPN-Server unter Ubuntu 22.04 ein und konfigurieren ihn

So legen Sie eine statische IP unter Ubuntu 20.04 (Desktop) fest

So richten Sie NordVPN auf Ubuntu ein

So installieren Sie OpenVPN in Ubuntu 20.04

So richten Sie ein VPN mit OpenVPN unter Ubuntu 18.04 ein und konfigurieren es