# Créer un serveur OpenVPN sur Debian
> Créer un serveur OpenVPN sur Debian et s'y connecter avec un client.
Publié le 2021-10-21 | Mis à jour le 2025-01-12 | Tags: openvpn
https://xsec.fr/gnu-linux/openvpn-server/
---
import Callout from '@shared/components/Callout.astro'
import { Steps, Step } from '@/components/ui/steps'
import { Collapsible } from '@shared/components/ui/collapsible'
import { Tree, Folder, File } from '@shared/components/ui/file-tree'
## Configuration du serveur
```sh
sudo apt update && apt install openvpn
```
easy-rsa est utilisé pour générer les certificats.
```sh
sudo cp -pr /usr/share/easy-rsa /etc/openvpn/server/ && cd /etc/openvpn/server/easy-rsa
```
```sh
cp vars.example vars && nano vars
```
- Rechercher le bloc suivant :
```sh title="/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 :
```sh title="/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"
```
- Ici sans mot de passe, en production il est recommandé d'en définir un.
```sh
./easyrsa init-pki
```
```sh
./easyrsa build-ca nopass
```
```sh title="./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.
- Ici sans mot de passe, en production il est recommandé d'en définir un.
```sh
./easyrsa build-server-full server nopass
```
- Ici sans mot de passe, en production il est recommandé d'en définir un.
```sh
./easyrsa build-client-full client nopass
```
- Ce fichier sera utilisé pour la première connexion avec chiffrement symétrique
```sh
./easyrsa gen-dh
```
- Cette opération peut prendre du temps, selon la puissance de votre machine.
```sh
openvpn --genkey tls-auth ta.key
```
- Copier l'ensemble du répertoire des fichiers générés du serveur et de l'Autorité de Certification vers `/etc/openvpn/`
```sh
cp pki/issued/server.crt pki/private/server.key pki/ca.crt pki/dh.pem ta.key /etc/openvpn/
```
- Copier l'ensemble du répertoire des fichiers générés du client vers `/etc/openvpn/client/`
```sh
cp pki/issued/client.crt pki/private/client.key pki/ca.crt pki/dh.pem ta.key /etc/openvpn/client/
```
```sh
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf && cd /etc/openvpn
```
- Ici nous copions le fichier de configuration dans le répertoire par défaut `/etc/openvpn/` et entrons dans le répertoire.
```sh
mv /etc/openvpn/dh.pem /etc/openvpn/dh2048.pem
```
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.
```sh
openvpn --config /etc/openvpn/server.conf
```
Si votre configuration est correcte, vous verrez dans la dernière ligne :
```plaintext
Initialization Sequence Completed
```
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 :
```sh
ss -na
```
Vous pouvez filtrer le port par défaut d'OpenVPN pour voir si une instance est en cours d'exécution :
```sh
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 :
```sh
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)
```sh
systemctl daemon-reload && systemctl restart openvpn
```
Vous pouvez ajouter `systemctl enable openvpn` pour faire démarrer OpenVPN automatiquement avec la machine.
## Configuration du client
```sh
apt update && apt install openvpn
```
Sur la machine cliente, déplacez-les vers `/etc/openvpn/`
```sh
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/ && nano /etc/openvpn/client.conf
```
```txt title="/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`
```sh
sudo systemctl daemon-reload && systemctl restart openvpn
```
Vous pouvez ajouter `systemctl enable openvpn` pour faire démarrer OpenVPN automatiquement avec la machine.
```sh
openvpn --config /etc/openvpn/client.conf
```
Si votre configuration est correcte, vous verrez dans la dernière ligne : `Initialization Sequence Completed`