Installation et Configuration d’OpenVPN sur Ubuntu 16.04 en 2 Étapes
Dans ce tutoriel, nous allons installer et configurer un serveur OpenVPN sur Ubuntu 16.04 en deux étapes.
Première étape : Nous allons installer et configurer le serveur OpenVPN, créer un client en utilisant un script, puis utiliser ce client pour se connecter au VPN depuis un ordinateur Windows.
Deuxième étape : Nous allons créer manuellement deux autres clients. Le deuxième client sera utilisé pour connecter un téléphone portable au réseau VPN, tandis que le troisième servira à connecter un ordinateur Linux au VPN via la ligne de commande. Une fois les deux ordinateurs (Windows et Linux) connectés au même réseau virtuel, nous utiliserons l’ordinateur Windows pour accéder à l’ordinateur Linux en SSH.
Aujourd’hui, nous allons réaliser la première étape.
Étape 1 : Installation du Serveur OpenVPN
Nous allons d’abord installer le serveur OpenVPN sur un VPS disposant de 1 Go de RAM, 1 CPU, 10 Go de stockage et une connexion réseau de 10 Mbit/s, pour un coût d’environ 1 $ par mois. Nous allons créer trois utilisateurs VPN. Comme il s’agit d’un projet de test, nous allons nous connecter en tant que 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
Configurer la configuration 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