Logo
Créer un serveur OpenVPN sur Debian
Overview

Créer un serveur OpenVPN sur Debian

21 octobre 2021
12 janvier 2025
6 min de lecture
Disponible en :

Configuration du serveur

  1. Installer OpenVPN
Terminal window
sudo apt update && apt install openvpn
  1. Copier le répertoire easy-rsa

easy-rsa est utilisé pour générer les certificats.

Terminal window
sudo cp -pr /usr/share/easy-rsa /etc/openvpn/server/ && cd /etc/openvpn/server/easy-rsa
/
└── 📁etc
└── 📁openvpn
└── 📁server
└── 📁easy-rsa
  1. Renommer et éditer le fichier vars depuis le template
Terminal window
cp vars.example vars && nano vars
/
└── 📁etc
└── 📁openvpn
└── 📁server
└── 📁easy-rsa
├── 📄vars.example
└── 📄vars
  • Rechercher le bloc suivant :
/etc/openvpn/server/easy-rsa/vars
# Organizational fields (used with 'org' mode and ignored in 'cn_only' mode.)
# These are the default values for fields which will be placed in the
# certificate. Don't leave any of these fields blank, although interactively
# you may omit any specific field by typing the "." symbol (not valid for
# email.)
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "me@example.net"
#set_var EASYRSA_REQ_OU "My Organizational Unit"
# Choose a size in bits for your keypairs. The recommended value is 2048. Using
# 2048-bit keys is considered more than sufficient for many years into the
# future. Larger keysizes will slow down TLS negotiation and make key/DH param
# generation take much longer. Values up to 4096 should be accepted by most
# software. Only used when the crypto alg is rsa (see below.)
  • Décommenter les lignes et entrer votre configuration :
/etc/openvpn/server/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY "FR"
set_var EASYRSA_REQ_PROVINCE "France"
set_var EASYRSA_REQ_CITY "maville"
set_var EASYRSA_REQ_ORG "xsec"
set_var EASYRSA_REQ_EMAIL "test@gmail.com"
set_var EASYRSA_REQ_OU "it"
  1. Créer l’Autorité de Certification
  • Ici sans mot de passe, en production il est recommandé d’en définir un.
Terminal window
./easyrsa init-pki
Terminal window
./easyrsa build-ca nopass
./easyrsa build-ca nopass
Note: using Easy-RSA configuration from: /etc/openvpn/server/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1k 25 Mar 2021
Generating RSA private key, 2048 bit long modulus (2 primes)
.............................+++++
..................................+++++
e is 65537 (0x010001)
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:
/etc/openvpn/server/easy-rsa/pki/ca.crt
  • Common Name [Easy-RSA CA]: Appuyez sur Entrée pour garder le nom par défaut.
  1. Générer le certificat du serveur
  • Ici sans mot de passe, en production il est recommandé d’en définir un.
Terminal window
./easyrsa build-server-full server nopass
  1. Générer le certificat du client
  • Ici sans mot de passe, en production il est recommandé d’en définir un.
Terminal window
./easyrsa build-client-full client nopass
  1. Générer le fichier dh.pem
  • Ce fichier sera utilisé pour la première connexion avec chiffrement symétrique
Terminal window
./easyrsa gen-dh
  • Cette opération peut prendre du temps, selon la puissance de votre machine.
  1. Générer le fichier de clé
Terminal window
openvpn --genkey tls-auth ta.key
  1. Réorganiser les fichiers
  • Copier l’ensemble du répertoire des fichiers générés du serveur et de l’Autorité de Certification vers /etc/openvpn/
Terminal window
cp pki/issued/server.crt pki/private/server.key pki/ca.crt pki/dh.pem ta.key /etc/openvpn/
/
└── 📁etc
└── 📁openvpn
├── 📄server.crt
├── 📄server.key
├── 📄ca.crt
├── 📄dh.pem
└── 📄ta.key
  • Copier l’ensemble du répertoire des fichiers générés du client vers /etc/openvpn/client/
Terminal window
cp pki/issued/client.crt pki/private/client.key pki/ca.crt pki/dh.pem ta.key /etc/openvpn/client/
/
└── 📁etc
└── 📁openvpn
└── 📁client
├── 📄client.crt
├── 📄client.key
├── 📄ca.crt
├── 📄dh.pem
└── 📄ta.key
  1. Créer le fichier de configuration depuis le template
Terminal window
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf && cd /etc/openvpn
/
└── 📁etc
└── 📁openvpn
├── 📄server.conf
├── 📄server.crt
├── 📄server.key
├── 📄ca.crt
├── 📄dh.pem
└── 📄ta.key
  • Ici nous copions le fichier de configuration dans le répertoire par défaut /etc/openvpn/ et entrons dans le répertoire.
  1. Renommer le fichier dh.pem
Terminal window
mv /etc/openvpn/dh.pem /etc/openvpn/dh2048.pem
Note

En le renommant en dh2048.pem, le fichier server.conf le reconnaîtra directement, puisque le nom de fichier dh2048.pem est spécifié par défaut.

  1. Tester la configuration
Terminal window
openvpn --config /etc/openvpn/server.conf
Tip

Si votre configuration est correcte, vous verrez dans la dernière ligne :

Initialization Sequence Completed
Erreur “Already in use”
Danger

Si vous avez déjà une instance d’openvpn en cours d’exécution, il peut y avoir un conflit avec l’installation (erreur: Alredy in use).
Vous devez trouver le processus qui bloque le port du service.

Vous pouvez lister la liste des ports utilisés :

Terminal window
ss -na

Vous pouvez filtrer le port par défaut d’OpenVPN pour voir si une instance est en cours d’exécution :

Terminal window
ss -pan | grep 1194
udp UNCONN 0 0 0.0.0.0:1194 0.0.0.0:* users:(("openvpn",pid=8660,fd=7))
  • Vous pouvez voir le pid=8660 ici, vous devez arrêter ce processus :
Terminal window
sudo kill -9 8660
  • Continuez l’opération jusqu’à ce que ss -pan | grep 1194 ne retourne plus de résultat (adaptez le pid à chaque fois)
  1. Redémarrer openvpn sur le serveur
Terminal window
systemctl daemon-reload && systemctl restart openvpn
Note

Vous pouvez ajouter systemctl enable openvpn pour faire démarrer OpenVPN automatiquement avec la machine.

Configuration du client

  1. Installer OpenVPN sur le client
Terminal window
apt update && apt install openvpn
  1. Copier les fichiers du répertoire /etc/openvpn/client pour les transférer sur la machine cliente

Sur la machine cliente, déplacez-les vers /etc/openvpn/

/
└── 📁etc
└── 📁openvpn
├── 📄client.crt
├── 📄client.key
├── 📄ca.crt
├── 📄dh.pem
└── 📄ta.key
  1. Copier et éditer le fichier de configuration client
Terminal window
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/ && nano /etc/openvpn/client.conf
/
└── 📁etc
└── 📁openvpn
└── 📄client.conf
##############################################
# Exemple de fichier de configuration #
# OpenVPN 2.0 côté client pour se connecter #
# à un serveur multi-clients. #
# #
# Cette configuration peut être utilisée #
# par plusieurs clients, cependant chaque #
# client doit avoir ses propres fichiers #
# cert et key. #
# #
# Sous Windows, vous pouvez renommer ce #
# fichier pour qu'il ait une extension .ovpn #
##############################################
# Spécifier que nous sommes un client et que nous
# allons récupérer certaines directives du fichier
# de configuration depuis le serveur.
client
# Utiliser le même paramètre que celui que vous
# utilisez sur le serveur.
# Sur la plupart des systèmes, le VPN ne fonctionnera
# pas sauf si vous désactivez partiellement ou
# totalement le pare-feu pour l'interface TUN/TAP.
;dev tap
dev tun
# Windows a besoin du nom de l'adaptateur TAP-Win32
# depuis le panneau Connexions réseau
# si vous en avez plus d'un. Sous XP SP2,
# vous devrez peut-être désactiver le pare-feu
# pour l'adaptateur TAP.
;dev-node MyTap
# Nous connectons-nous à un serveur TCP ou
# UDP ? Utilisez le même paramètre que
# sur le serveur.
;proto tcp
proto udp
# Le nom d'hôte/IP et le port du serveur.
# Vous pouvez avoir plusieurs entrées remote
# pour équilibrer la charge entre les serveurs.
remote my-server-1 1194
;remote my-server-2 1194

Remplacer remote my-server-1 1194 par remote IP_DU_SERVEUR_OPENVPN 1194

  1. Redémarrer OpenVPN sur le client
Terminal window
sudo systemctl daemon-reload && systemctl restart openvpn
Note (Démarrage automatique à la session)

Vous pouvez ajouter systemctl enable openvpn pour faire démarrer OpenVPN automatiquement avec la machine.

  1. Se connecter au serveur OpenVPN
Terminal window
openvpn --config /etc/openvpn/client.conf

Si votre configuration est correcte, vous verrez dans la dernière ligne : Initialization Sequence Completed