
Dans ce tutoriel, nous allons apprendre à installer et configurer un serveur OpenVPN sur Ubuntu 16.04 en suivant deux grandes étapes simples et pratiques.
Première étape : nous installerons et configurerons le serveur OpenVPN, puis créerons un premier client à l’aide d’un script automatisé. Ce client sera utilisé pour établir une connexion VPN depuis un ordinateur Windows.
Deuxième étape : nous créerons manuellement deux autres clients. Le premier permettra de connecter un téléphone mobile au réseau VPN, tandis que le second servira à relier un ordinateur Linux via la ligne de commande.
Une fois les deux machines (Windows et Linux) connectées au même réseau virtuel, nous utiliserons la session Windows pour accéder au système Linux en SSH, comme s’ils étaient sur le même réseau local.
Aujourd’hui, nous allons réaliser la première étape.
Étape 1 : Installation du Serveur OpenVPN
Nous allons commencer par installer le serveur OpenVPN sur un VPS disposant de 1 Go de RAM, 1 vCPU, 10 Go de stockage, et d’une connexion réseau de 10 Mbit/s — une configuration minimale qui coûte environ 1 $ par mois.
Dans ce tutoriel, nous créerons trois utilisateurs VPN.
Comme il s’agit d’un projet de démonstration, nous travaillerons directement avec le compte root.
L’installation des logiciels :
Les paquets nécessaires sont les suivants :
- openvpn
- openssl
- easy-rsa iptables
- bash-completion
Exécutez la commande suivante pour les installer :
apt-get install openvpn openssl easy-rsa iptables bash-completion -y
![]()
Préparation des Variables pour la Génération des Clés
Configuration du répertoire CA : Créez le répertoire ~/openvpn-ca et copiez-y easy-rsa en utilisant la commande suivante :
make-cadir ~/openvpn-ca

Accédez au répertoire créé :
cd ~/openvpn-ca

OVérifiez le contenu du répertoire ~/openvpn-ca :
ls -l

Édition du fichier vars : Ouvrez le fichier vars pour le modifier :
vim vars
Remplissez les champs nécessaires pour la génération des certificats et des clés.

Génération des certificats et clés du serveur:
Chargez les variables configurées :
source vars
![]()
Nettoyez les anciens certificats :
./clean-all
![]()
On va commencer a crée les nouveaux certificats. Premièrement on va creer build-ca:
./build-ca
Il faut confirmer tout, parce que toutes les infos on a déjà écrit dans le vars.

Après on va créer key-server:
./build-key-server server

Générez un certificat client et une paire de clés (toujours no password):
./build-key client1 ./build-key client2 ./build-key client3

Pour generer keys il faut exécuter:
./build-dh
Le serveur a également besoin d’un fichier de paramètres DH. Cela peut être créé en utilisant OpenSSL:
openssl dhparam -out dh2048.pem 2048

Configurez le service OpenVPN.
Il faut copier les fichiers dans /etc/openvpn en exécutant:
cd ~/openvpn-ca/keys
![]()
cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
![]()
Configuration du service OpenVPN
On va ouvrir server.conf:
vim /etc/openvpn/server.conf
Il faut supprimer “;” pour activer la ligne tls-auth:
tls-auth ta.key 0 cipher AES-128-CBC user nobody group nogroup
Sous “cipher AES-128-CBC” il faut ajouter:
auth SHA256

Aussi il faut supprimer “;” pour décommenter la ligne:
push “redirect-gateway def1 bypass-dhcp”

il faut supprimer “;” pour décommenter les lignes:
push “dhcp-option DNS 208.67.222.222” push “dhcp-option DNS 208.67.220.220”
Vous pouvez le modifier et utiliser CloudFlare (1.1.1.1), Google (8.8.8.8) ou tout autre serveur DNS de votre choix.
Configurer la réseau de votre serveur OpenVPN
Premièrement, on va configurer le transfert IP en redaction:
vim /etc/sysctl.conf
Il faut activer: net.ipv4.ip_forward=1

Pour appliquer le changement il faut exécuter:
sudo sysctl -p

Pour activer forwarding il faut exécuter:
echo 1 » /proc/sys/net/ipv4/conf/all/forwarding
![]()
Configurer les règles UFW pour masquer les connexions client
Premièrement, on va vérifier la carte réseau de notre serveur:
ip route | grep default

On va ouvrir before.rules:
vim /etc/ufw/before.rules
Et on va ajouter les lignes suivantes:
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to ens3 -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE COMMIT # END OPENVPN RULES

Pour changer les règles Firewall il faut corriger: /etc/default/ufw
vim /etc/default/ufw
Il faut changer:
DEFAULT_FORWARD_POLICY=”DROP” to DEFAULT_FORWARD_POLICY=”ACCEPT”

On va ouvrir les ports 1194/udp et OpenSSH (je vais utiliser le port par défaut)
ufw allow 1194/udp && ufw allow OpenSSH

Pour appliquer les changement il faut redémarrer FW:
ufw disable && ufw enable

Pour verifier le status de firewall il faut exécuter:
ufw status

Pour verifier NAT il faut exécuter:
iptables -L -t nat

Activer le service OpenVPN
Si la vérification passe bien on va démarrer openVPN en exécutant:
systemctl start openvpn@server
![]()
Pour vérifier s’il démarre bien il faut exécuter:
systemctl status openvpn@server

Pour vérification disponibilité de tun0 dans l’interface OpenVPN il faut faire:
ip addr show tun0

Si OpenVPN ne marche pas, essayez de faire restart d’OpenVPN ou faire restart du serveur au complet.
service openvpn restart
![]()
S’il y a le problème il faut regarder le log:
tail -f /var/log/syslog
Si tout fonctionne bien, passe à l’étape suivante 🙂
Créer une configuration de client
Premièrement on va créer un dossier ccd/files pour clients:
mkdir -p ~/ccd/files
![]()
Apres on va changer permissions:
chmod 700 ~/ccd/files
![]()
Il faut copier example file dans dossier de client:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/ccd/base.conf
![]()
Après on va changer base.conf en exécutant:
vim ~/ccd/base.conf
Il faut taper IP publique de votre serveur et port (comme pendant configuration serveur):

On utilise protocol UDP. Pour activer ce protocol il faut supprimer “;”:

Pour le client Windows on active user nobody et group nogroup (il faut supprimer “;”), mais si vous utiliser comme client OpenVPN Linux, il faut laisser cela inactive:

Il faut désactiver prochaines lignes (ajouter “;”):

Aussi on va ajouter les lignes prochaines:

Aussi il faut ajouter la key-direction 1 (parce que c’est un client, pour serveur on a utilisé 0):

Pour faire la configuration du client on peut utiliser un script ou faire un fichier manuellement. Je vais montrer deux possibilités 🙂
Pour la configuration du client avec le script vous devez suivre ces étapes:
1. Création d’un script de génération de configuration.
Vous pouvez soit télécharger ce script d’ici, soit le créer manuellement. Commencer par:
vim ~/ccd/make_config.sh
À l’intérieur, collez le script suivant:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/ccd/files
BASE_CONFIG=~/ccd/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>’) \
./make_config.sh client
<(echo -e ‘</key>\n<tls-auth>’) \
${KEY_DIR}/ta.key \
<(echo -e ‘</tls-auth>’) \
> ${OUTPUT_DIR}/${1}.ovpn

2. Changer la permission du fichier:
chmod 700 ~/ccd/make_config.sh

3. Générer un fichier de configuration client
cd ~/ccd ./make_config.sh client1
![]()
On verifie si le fichier est crée:
ls ~/ccd/files
![]()
Il faut aussi vérifier ce file, il faut ajouter remote avant l’adresse IP:

Après on copie ce file sur l’ordinateur de client. Sur l’ordinateur avec Windows il faut installer OpenVPN et ajouter nouveau client. Aussi il faut exécuter OpenVPN comme administrateur (“run as admin”). S’il la connection est bloqué, c’est un bonne idée de lire le logfile 🙂
Et voilà, on a connecté. Je mesure la vitesse d’internet avec speedtest. Le ping est grand et vitesse 10 Mbps upload et download, mais c’est correct, parce que le serveur a ses restrictions.

Mes sources d’inspiration:
How To Set Up an OpenVPN Server on Ubuntu 16.04
Setting up your own Certificate Authority (CA)
Generate an OpenVPN profile for client user to import
Mettre en place un client OpenVPN sur Raspberry Pi
VIDEO:
https://www.youtube.com/watch?v=fLJWPLSRwdg
https://www.youtube.com/watch?v=S358miThwdg&t=36s