GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer OpenVPN sur Ubuntu 20.04

OpenVPN est un VPN SSL (Secure Socket Layer) open source riche en fonctionnalités. Le VPN permet de connecter en toute sécurité des réseaux non fiables tels que le réseau WIFI dans les hôtels, les aéroports ou les centres commerciaux. Le VPN permet également une connexion sécurisée au réseau de l'entreprise pour accéder aux ressources. Les tunnels sont sécurisés à l'aide de l'authentification SSL/TLS, de certificats et d'informations d'identification.

Dans ce tutoriel, je vais vous montrer comment configurer un VPN en utilisant OpenVPN sur Ubuntu 20.04 .

Prérequis

Nous utiliserons deux serveurs Ubuntu fonctionnant sur la version 20.04 :

  • Un serveur d'autorité de certification (CA) qui validera la demande et signera les certificats des clients.
  • Le OpenVPN serveur sur lequel nous installerons le VPN.

Configurer le serveur CA

Il a recommandé de conserver un serveur autonome pour servir de CA (autorité de certification). C'est pour des raisons de sécurité. Passons à la configuration du serveur CA.

Assurez-vous d'abord que le système est mis à jour. Exécutez la commande suivante :

 $ sudo apt update

Vous devrez créer un utilisateur non root pour les configurations du serveur de l'autorité de certification.

$ sudo adduser malain

Donnez maintenant à l'utilisateur les privilèges sudo :

$ sudo usermod -aG sudo malain

Maintenant, déconnectez-vous, puis reconnectez-vous avec l'utilisateur non root.

Installer EasyRSA sur le serveur CA

Easy-rsa est un utilitaire CLI pour créer et gérer une autorité de certification PKI. Easy-RSA sera utilisé par le serveur CA pour générer une clé privée et un certificat racine public qui seront utilisés pour signer les demandes des clients et des serveurs qui s'appuieront sur notre CA.

Pour installer easy-rsa, téléchargez l'outil de gestion PKI depuis github en utilisant wget :

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

Puis décompressez le fichier tgz :

$ tar xvf EasyRSA-3.0.8.tgz

Pour restreindre l'accès à l'utilisateur uniquement, utilisez :

$ chmod 700 EasyRSA-3.0.8

Déplacez maintenant EasyRSA vers opt répertoire

$ sudo mv EasyRSA-3.0.8 /opt/

Nous utilisons EasyRSA 3.0.8 version pour cette configuration.

Créer une autorité de certification à l'aide d'EasyRSA

Tout d'abord, vous devez créer un fichier nommé vars pour stocker les informations de l'organisation. Pour cela, nous pouvons utiliser le fichier d'exemple disponible dans le répertoire EasyRSA-3.0.8.

Pour répertorier les fichiers sous le répertoire EasyRSA, utilisez :

$ cd EasyRSA-3.0.8/ && ls -l

Sortie :

-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

Faites une copie du fichier vars.example sous vars :

$ cp vars.example vars

Ouvrez maintenant le fichier vars et ajoutez les informations sur l'organisation à la fin du fichier :

$ 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"

Initialisez maintenant notre PKI sur notre serveur CA qui créera le dossier pki.

$ ./easyrsa init-pki

Nous pouvons maintenant générer le public racine et paire de clés privées pour notre CA. Au cours du processus, il vous sera normalement demandé de saisir une phrase de passe pour la paire de clés chaque fois que vous devrez signer ou révoquer un certificat. Dans notre cas, nous utiliserons la commande afin de ne pas être invité à entrer une phrase secrète. Vous serez également invité à indiquer un nom commun (CN) mais nous laisserons celui par défaut en appuyant sur la touche Entrée.

$ ./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

Cela créera un certificat racine nommé ca.crt dans le répertoire pki et la pclé privée ca.key dans le répertoire 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

Avec cela, notre serveur CA est prêt.

Installer et configurer le serveur Openvpn

Passons au deuxième serveur pour installer et configurer openvpn. Vous devrez également créer un utilisateur non root sur ce serveur et lui donner le sudo privilèges.

Pour installer openvpn sur ubuntu, exécutez les commandes suivantes :

$ sudo apt update
$ sudo apt install openvpn

Sur le serveur openvpn, easyrsa sera utilisé pour générer une demande de certificat qui sera vérifiée et signée par le serveur CA. Suivez les mêmes étapes que nous avons suivies dans la dernière section pour installer Easyrsa.

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

Décompressez maintenant le fichier tgz téléchargé :

$ tar xvf EasyRSA-3.0.8.tgz

Restreindre l'accès à l'utilisateur uniquement :

$ chmod 700 EasyRSA-3.0.8

Déplacer EasyRSA-3.0.8 vers opt répertoire :

$ sudo mv EasyRSA-3.0.8 /opt/

Créer une PKI

Nous devons maintenant créer une PKI cela aidera à demander et à gérer les certificats TLS pour les clients et les autres serveurs qui se connecteront à notre VPN.

Créons un fichier vars en utilisant le fichier d'exemples déjà disponible :

$ cp vars.example vars

Modifiez maintenant le fichier vars en ajoutant les lignes suivantes à la fin du fichier :

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

Pour créer le dossier PKI sur le serveur openvpn, exécutez le easyrsa fichier de script :

$ ./easyrsa init-pki

Sortie :

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

Créer la demande de certificat du serveur et la clé privée

Nous allons maintenant générer une clé privée et demande de certificat sur le serveur OpenVPN. Ensuite, nous allons transférer le fichier de demande de certificat au serveur CA à signer afin de créer le certificat requis

Étant dans le même dossier, nous pouvons générer la requête avec le nopass option. La commande suivante crée un fichier de clé privée nommé openvpn-server.key et un fichier de demande de certificat nommé openvpn-server.req.

$ ./easyrsa gen-req openvpn-server nopass

Sortie :

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

Maintenant, copiez le fichier de clé du serveur nommé openvpn-server.key dans le répertoire nommé /etc/openvpn/server.

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

Copiez ensuite le fichier de demande de certificat sur le serveur CA :

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

Sur le serveur CA, accédez au répertoire easyrsa,

$ cd /opt/EasyRSA-3.0.8/

Pour importer la demande , exécutez la commande suivante :

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

Sortie :

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.

Signez maintenant la demande. Comme nous signons la requête du serveur, nous devons utiliser la directive server avant le nom commun de notre serveur openvpn. S'il s'agissait d'une demande d'un client, nous devrions utiliser la directive client à la place.

Pour signer la demande :

$ ./easyrsa sign-req server openvpn-server

Sortie :

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

Maintenant que la demande de certificat du serveur OpenVPN a été signée par le serveur CA, nous devons transférer la demande signée et le certificat public vers le serveur OpenVPN.

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

Nous allons maintenant générer la clé pré-partagée tls-crypt pour nous assurer que notre serveur OpenVPN est capable de faire face au trafic non authentifié, aux analyses de port et à certaines attaques qui peuvent utiliser beaucoup de ressources du serveur.

$ ./easyrsa gen-dh

Sortie :

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

Copiez maintenant les fichiers clé et pem dans le répertoire /etc/openvpn/server :

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

Générer un certificat client et une paire de clés

Nous devrons créer un répertoire pour conserver les certificats et les clés des clients. Assurez-vous de donner l'autorisation à l'utilisateur non root.

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

Générez la demande de certificat client :

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

Sortie :

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

Copiez maintenant la clé client dans le répertoire client-configs :

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

Copiez le fichier de demande de certificat client sur le serveur CA :

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

Sur le serveur CA, importez le 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.

Nous devons maintenant signer la demande pour le client, tapez :

$ ./easyrsa sign-req client my-pc

Sortie :

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

Copiez le certificat client sur le serveur openvpn :

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

Maintenant sur le serveur openvpn, nous devons copier tous les fichiers client dans le répertoire client que nous avons créé auparavant.

$ 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/

Assurez-vous que l'utilisateur non root dispose des autorisations sur les fichiers.

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

Configurer le service VPN

Nous devrions d'abord faire une copie du modèle à utiliser

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

Puis décompressez le fichier

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

Et entrez dans le dossier

$ cd /etc/openvpn/server

Certaines lignes seront remplacées pour correspondre à notre configuration : :

  • Les chiffrements cryptographiques seront définis sur AES-256-CBC
  • L'algorithme de résumé de message HMAC sera sha256
  • Comme nous utilisons également un paramètre Diffie-Hellman, nous allons le définir sur dh.pem
  • Nous utiliserons l'utilisateur nobody et le groupe nogroup pour exécuter openvpn sans privilèges une fois qu'il a démarré
  • Nous allons pousser les modifications DNS pour rediriger tout le trafic via le VPN avec les valeurs push redirect-gateway def1 bypass-dhcp , push dhcp-option DNS 208.67.222.222 , push dhcp-option DNS 208.67.220.220
  • Nous conserverons le port par défaut 1194
  • Nous utiliserons le udp protocole
  • nous devons indiquer la clé openvpn-server.key et certificat openvpn-server.crt à utiliser comme identifiant

Ainsi, le fichier devrait ressembler à ceci :

$ 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

Vous devez activer le transfert IP en modifiant la valeur net.ipv4.ip_forward dans /etc/sysctl.conf.

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

Pour rendre effectives les modifications que nous avons apportées dans /etc/sysctl.conf, exécutez :

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

Vous devez maintenant autoriser OpenVPN à travers votre pare-feu en activant le masquage. Pour cela, vous devez identifier le nom de votre interface réseau publique :

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

Dans notre cas, c'est eth0. Nous devons maintenant ajouter les règles de mascarades dans la configuration du pare-feu, nous allons donc ajouter la ligne ci-dessous en haut des fichiers de règles :

$ 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

Modifions maintenant ufw pour autoriser les paquets transférés par défaut.

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

Ouvrez le port openvpn sur le pare-feu :

$ sudo ufw allow '1194/udp'

Pour redémarrer le service ufw, tapez :

$ sudo ufw disable && sudo ufw enable

Pour permettre au service openvpn de démarrer au démarrage du système, tapez :

$ sudo systemctl enable openvpn-server@server

Pour démarrer openvpn, tapez :

$ sudo systemctl start openvpn-server@server

Vous pouvez vérifier l'état d'openvpn en :

$ sudo systemctl status openvpn-server@server

Sortie :

[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.

Pour vérifier l'interface du tunnel, tapez :

$ ip addr show tun0

Sortie :

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

Configurer les fichiers VPN pour les clients

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

Nous devons maintenant copier l'exemple de fichier de configuration

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

Donner l'autorisation à l'utilisateur non root

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

Editez le fichier 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 .

Nous allons maintenant créer un script pour générer les certificats et les fichiers chiffrés sur le client. Le script fera également une copie du fichier base.conf et collectera toutes les clés et tous les certificats créés pour les clients. Pour chaque client, nous aurions besoin de générer un certificat et une clé avant d'exécuter le script

$ 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

Assurez-vous que seul l'utilisateur non root peut exécuter le script.

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

Vous pouvez maintenant générer le fichier de connexion client en fonction de la clé client et de la configuration du certificat (my-pc.crt et my-pc.key)

$ cd /opt/client-configs

Exécutez maintenant le script suivi du nom commun utilisé pour le client qui créera le fichier vpn client à utiliser.

$ ./make_config.sh my-pc

Vous pouvez vérifier le résultat :

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

Connecter le client à la connexion OpenVPN

Installez openvpn sur le client. Cela sera utilisé pour établir la connexion vpn avec le serveur

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

Copiez maintenant le fichier client OpenVPN qui se trouve sur le serveur sur votre ordinateur client. Ainsi, sur votre ordinateur client, exécutez la commande suivante :

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

Avant de modifier le fichier de configuration OpenVPN du client, nous devons vérifier si nous utilisons resolvconf ou systemd-resolved pour la résolution DNS

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

        nameserver 127.0.0.53
        options edns0

Avec la valeur nameserver 127.0.0.53 , cela montre que vous utilisez systemd-resolved. Installez donc un package qui aidera systemd-resolved à utiliser le VPN pour la résolution DNS lorsqu'il est connecté.

$ sudo apt install openvpn-systemd-resolved

Maintenant, nous pouvons éditer le fichier client vpn en décommentant les lignes nécessaires pour systemd-resolved

$ 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 .

Pour le système utilisant update-resolv-conf, vous décommenterez les lignes

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

Essayons maintenant de se connecter au VPN en utilisant la commande openvpn dans le fichier de configuration du client :

$ sudo openvpn --config my-pc.ovpn

Vous pouvez vérifier les informations IP de l'interface du tunnel

$ ip a

Cela affichera une adresse IP de tunnel et nous pourrons envoyer un ping au serveur OpenVPN. Avec cela, vous pouvez confirmer que vous pouvez accéder à votre serveur comme si vous étiez dans le même réseau privé.

Conclusion

Il est facile de configurer une connexion VPN lors de l'utilisation d'OpenVPN. C'est une bonne solution lorsque vous souhaitez mettre en place une solution VPN sur votre serveur cloud sans utiliser de solution spécialisée comme un pare-feu virtuel ou autre. C'est une solution rapide et sécurisée.


Ubuntu
  1. Comment configurer des hôtes virtuels Apache sur Ubuntu 18.04

  2. Comment installer Redis sur Ubuntu 20.04 / 18.04

  3. Comment configurer le serveur de noms DNS sur Ubuntu 20.04

  4. Ubuntu - Comment définir une adresse IP statique dans Ubuntu ?

  5. Comment configurer un service ?

Comment configurer OpenVPN sur Ubuntu Server

Comment installer et configurer un serveur OpenVPN sur Ubuntu 22.04

Comment définir une adresse IP statique sur Ubuntu 20.04 (bureau)

Comment configurer NordVPN sur Ubuntu

Comment installer OpenVPN dans Ubuntu 20.04

Comment installer et configurer un VPN avec OpenVPN sur Ubuntu 18.04