OpenVPN est un VPN open source Secure Socket Layer (SSL) 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 en utilisant l’authentification SSL/TLS, des certificats, des informations d’identification.
Dans ce tutoriel, je vais vous montrer comment configurer un VPN utilisant OpenVPN au Ubuntu 20.04.
Conditions préalables
Nous utiliserons deux serveurs Ubuntu fonctionnant sur la version 20.04 :
- UNE Serveur d’autorité de certification (CA) qui validera la demande et signera les certificats des clients.
- le OpenVPN serveur sur lequel nous allons installer 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 d’autorité de certification.
$ sudo adduser malain
Donnez maintenant à l’utilisateur le sudo privilèges :
$ sudo usermod -aG sudo malain
Déconnectez-vous maintenant, puis reconnectez-vous avec l’utilisateur non root.
Installer EasyRSA sur le serveur CA
Easy-rsa est un utilitaire CLI permettant de créer et de 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
Décompressez ensuite 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 le opt
annuaire
$ 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 example fichier disponible dans le répertoire EasyRSA-3.0.8.
Pour lister les fichiers sous le répertoire EasyRSA, utilisez :
$ cd EasyRSA-3.0.8/ && ls -l
Sortir:
-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 en tant que var :
$ cp vars.example vars
Ouvrez maintenant le fichier vars et ajoutez les informations d’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 racine publique et paire de clés privées pour notre CA. Au cours du processus, il vous sera normalement demandé de saisir une phrase secrète pour la paire de clés chaque fois que vous devrez signer ou révoquer un certificat. Dans notre cas, nous utiliserons la commande pour ne pas être invité à saisir une phrase secrète. Vous serez également invité à indiquer un Nom commun (CN) mais nous laisserons celui par défaut en appuyant sur Enter clé.
$ ./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 va créer certificat racine nommé ca.crt dans le répertoire pki et le pclé rivé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.
À 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éplacez EasyRSA-3.0.8 vers le opt
annuaire:
$ sudo mv EasyRSA-3.0.8 /opt/
Créer une PKI
Maintenant, nous devons 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
Sortir:
Remarque : en utilisant la configuration Easy-RSA de : /opt/EasyRSA-3.0.8/vars init-pki complete ; vous pouvez maintenant créer une CA ou des demandes. Votre nouveau répertoire PKI est : /opt/EasyRSA-3.0.8/pki
Créer la demande de certificat de serveur et la clé privée
Nous allons maintenant générer un Clé privée et demande de certificat sur le serveur OpenVPN. Ensuite, nous transférerons le fichier de demande de certificat sur le serveur CA pour être signé afin de créer le certificat requis
Étant dans le même dossier, nous pouvons générer la demande 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
Sortir:
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é de 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 dans le serveur d’autorité de certification:
$ scp /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req [email protected]:/tmp
Sur le serveur CA, passez dans le répertoire easyrsa,
$ cd /opt/EasyRSA-3.0.8/
À importer la demande, exécutez la commande suivante :
$ ./easyrsa import-req /tmp/openvpn-server.req openvpn-server
Sortir:
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 Common Name de notre serveur openvpn. S’il s’agissait d’une demande d’un client, nous devrions utiliser la directive client
plutôt.
À signer la demande:
$ ./easyrsa sign-req server openvpn-server
Sortir:
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 ports et à certaines attaques qui peuvent utiliser une grande partie des ressources du serveur.
$ ./easyrsa gen-dh
Sortir:
Remarque : utilisation de la configuration Easy-RSA de : /opt/EasyRSA-3.0.8/vars Utilisation de SSL : openssl OpenSSL 1.1.1f 31 mars 2020 Génération des paramètres DH, 2048 bits long safe prime, generator 2 Cela va prendre beaucoup de temps ………………………………+…………. ……………. ……………………………………………. …………………….. …………………… ………………………………… ……….. ……………………………+…….+…….+. .. …..+………………………………………….. ……………. ………………………….++* ++*++*++* Paramètres DH de taille 2048 créés dans /opt/EasyRSA-3.0.8/pki/dh.pem
$ openvpn --genkey --secret ta.key
Copiez maintenant les fichiers key 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 d’accorder 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
Sortir:
Remarque : utilisation de la configuration Easy-RSA à partir de : /opt/EasyRSA-3.0.8/vars Utilisation de SSL : openssl OpenSSL 1.1.1f 31 mars 2020 Génération d’une clé privée EC écrivant une nouvelle clé privée dans ‘/opt/EasyRSA-3.0.8/ pki/easy-rsa-6961.m7fBMu/tmp.dkqaZI’ —– Vous êtes sur le point d’être invité à saisir des informations qui seront intégrées à votre demande de certificat. Ce que vous êtes sur le point d’entrer est ce qu’on appelle un nom distinctif ou un DN. Il y a pas mal de champs mais vous pouvez laisser certains vides Pour certains champs, il y aura une valeur par défaut, si vous entrez ‘.’, le champ sera laissé vide. —– Nom commun (par exemple : votre nom d’utilisateur, d’hôte ou de serveur) [my-pc]: demande de paire de clés et de certificat terminée. Vos fichiers sont : 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.
Maintenant, nous devons signer la demande pour le client, tapez :
$ ./easyrsa sign-req client my-pc
Sortir:
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 devons 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/
Décompressez ensuite 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 réglés sur
AES-256-CBC
- L’algorithme de résumé de message HMAC sera
sha256
- Comme nous utilisons également un paramètre Diffie-Hellman, nous le définirons sur
dh.pem
- Nous utiliserons l’utilisateur personne et groupe aucun groupe pour exécuter openvpn sans privilèges une fois qu’il a démarré
- Nous allons pousser les changements 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 garderons le port par défaut
1194
- Nous utiliserons le
udp
protocole - nous devrions indiquer la clé
openvpn-server.key
et certificatopenvpn-server.crt
à utiliser comme identifiant
Le fichier devrait donc ressembler à ci-dessous :
$ 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 la redirection ip en modifiant la valeur net.ipv4.ip_forward dans /etc/sysctl.conf.
$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
Pour appliquer les modifications 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. Maintenant, nous devons 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 le statut openvpn en :
$ sudo systemctl status openvpn-server@server
Sortir:
● [email protected] - OpenVPN service for server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-03-28 23:30:57 UTC; 8s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 78132 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 1073)
Memory: 1.0M
CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected]
└─78132 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf
Mar 28 23:30:57 localhost systemd[1]: Starting OpenVPN service for server...
Mar 28 23:30:57 localhost systemd[1]: Started OpenVPN service for server.
Pour vérifier l’interface du tunnel, tapez :
$ ip addr show tun0
Sortir:
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
Maintenant, nous devons 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 la permission à l’utilisateur non root
$ sudo chown franck:franck -R /opt/client-configs/
Modifier 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 cryptés sur le client. Le script fera également une copie du fichier base.conf et collectera toutes les clés et 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 du 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
Connectez 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. Donc, 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. Alors, installez un package qui aidera systemd-resolved à utiliser le VPN pour la résolution DNS une fois connecté.
$ sudo apt install openvpn-systemd-resolved
Nous pouvons maintenant éditer le fichier client vpn en décommentant les lignes nécessaires à 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 connexion au VPN en utilisant la commande openvpn dans le fichier de configuration client :
$ sudo openvpn --config my-pc.ovpn
Vous pouvez vérifier les informations IP pour 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 lorsque vous utilisez OpenVPN. C’est une bonne solution lorsque vous souhaitez configurer une solution VPN sur votre serveur cloud sans utiliser de solution spécialisée telle qu’un pare-feu virtuel ou quoi que ce soit d’autre. C’est une solution rapide et sécurisée.