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