Comment Configurer un Serveur OpenVPN sur Debian 13 Trixie

- Mise à jour le 17 août 2025
Avec la sortie Debian 13 “Trixie”, c’est le moment idéal pour mettre à jour mon tutoriel de mise en place d'un serveur OpenVPN et découvrir les nouveautés avec cette version.
Il s’agit d’un tutoriel pratique pour installer et configurer un serveur OpenVPN sur Debian 13 Trixie.
Notre objectif est de transformer le serveur Debian en une passerelle VPN pleinement fonctionnelle, offrant aux clients Windows distants un accès sécurisé à l’ensemble du réseau.
Cette configuration est mon approche privilégiée, car elle permet un accès à toutes les ressources internes de l’entreprise (voir la section Mode Passerelle pour plus de détails).
Schéma du Réseau OpenVPN

- Serveur OpenVPN :
- OS : Debian GNU/Linux 13 (Trixie)
- Rôle : Serveur OpenVPN + Passerelle
- IP (wan) : OPENVPN_IP
- IP (lan) : 192.168.0.254 et 10.50.8.1
Configuration du Serveur OpenVPN (Debian 13 Trixie)
Installation
- Installez le paquet OpenVPN :
root@host:~# apt update && apt install openvpn
- Activez le démarrage automatique du service OpenVPN :
root@host:~# sed -i 's/#AUTOSTART="all"/AUTOSTART="all"/' /etc/default/openvpn
root@host:~# systemctl daemon-reload; systemctl restart openvpn
PKI
- Accédez au répertoire
/etc/openvpn/
:
root@host:~# cd /etc/openvpn/
- Initialisez l'PKI (Infrastructure à Clé Publique) :
root@host:~# /usr/share/easy-rsa/easyrsa init-pki
- Tapez
yes
lorsque vous êtes invité à initialiser l'PKI et confirmez la suppression de la configuration existante :
WARNING!!!
You are about to remove the EASYRSA_PKI at:
* /etc/openvpn/pki
and initialize a fresh PKI here.
Type the word 'yes' to continue, or any other input to abort.
Confirm removal: yes
******************************************
* SECOND WARNING - STOP - SECOND WARNING *
******************************************
To keep your current 'pki/vars' settings use 'init-pki soft'.
To keep your current Request files use 'init-pki soft'
The Requests can then be signed by a new CA (Partial CA renewal)
To keep your current Easy-RSA TLS Key use 'init-pki soft'
This private key file is in use by your current VPN.
** USE OF 'init-pki soft' IS RECOMMENDED **
Type the word 'yes' to continue, or any other input to abort.
WARNING: COMPLETELY DESTROY current PKI (NOT recommended) ?
[yes/NO]: yes
Notice
------
'init-pki' complete; you may now create a CA or requests.
Your newly created PKI dir is:
* /etc/openvpn/pki
Using Easy-RSA configuration:
* undefined
- Si, comme moi, vous ne souhaitez pas régénérer les certificats fréquemment, créez et modifiez le fichier
/etc/openvpn/pki/vars
:
root@host:~# cp -a /usr/share/easy-rsa/vars.example /etc/openvpn/pki/vars
# In how many days should the root CA key expire?
set_var EASYRSA_CA_EXPIRE 3650
# In how many days should certificates expire?
set_var EASYRSA_CERT_EXPIRE 1825
# How many days until the Certificate Revokation List will expire.
#
# IMPORTANT: When the CRL expires, an OpenVPN Server which uses a
# CRL will reject ALL new connections, until the CRL is replaced.
#
set_var EASYRSA_CRL_DAYS 1095
# 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.
set_var EASYRSA_KEY_SIZE 4096
- Une fois tout configuré, créez l'Autorité de Certification (CA) dans
/etc/openvpn/pki/ca.crt
:
root@host:~# /usr/share/easy-rsa/easyrsa build-ca nopass
- Lorsqu'on vous le demande, entrez un Nom Commun (CN) pour votre CA :
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]:openvpn-server
Notice
------
CA creation complete. Your new CA certificate is at:
* /etc/openvpn/pki/ca.crt
Create an OpenVPN TLS-AUTH|TLS-CRYPT-V1 key now: See 'help gen-tls'
Build-ca completed successfully.
Générer le Certificat, la Clé Privée et les Paramètres Diffie-Hellman du Serveur OpenVPN
- Créez le certificat du serveur OpenVPN et sa clé privée :
root@host:~# /usr/share/easy-rsa/easyrsa build-server-full server nopass
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/pki/vars
[…]
-----
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/pki/reqs/server.req
* key: /etc/openvpn/pki/private/server.key
You are about to sign the following certificate:
Requested CN: 'server'
Requested type: 'server'
Valid for: '1825' days
subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm requested details: yes
Using configuration from /etc/openvpn/pki/9934d973/temp.6.1
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Aug 14 13:00:21 2030 GMT (1825 days)
Write out database with 1 new entries
Database updated
Notice
------
Inline file created:
* /etc/openvpn/pki/inline/private/server.inline
Notice
------
Certificate created at:
* /etc/openvpn/pki/issued/server.crt
- Générez les paramètres Diffie–Hellman (DH) et enregistrez-les dans
/etc/openvpn/pki/dh.pem
:
root@host:~# /usr/share/easy-rsa/easyrsa gen-dh
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/pki/vars
Generating DH parameters, 4096 bit long safe prime
[…]
DH parameters appear to be ok.
Notice
------
DH parameters of size 4096 created at:
* /etc/openvpn/pki/dh.pem
Générer les Certificats et Clés des Clients OpenVPN
- Générez le certificat et la clé privée pour client01 :
root@host:~# /usr/share/easy-rsa/easyrsa build-client-full client01 nopass
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/pki/vars
[…]
-----
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/pki/reqs/client01.req
* key: /etc/openvpn/pki/private/client01.key
You are about to sign the following certificate:
Requested CN: 'client01'
Requested type: 'client'
Valid for: '1825' days
subject=
commonName = client01
Type the word 'yes' to continue, or any other input to abort.
Confirm requested details: yes
Using configuration from /etc/openvpn/pki/7e41ac10/temp.6.1
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client01'
Certificate is to be certified until Aug 14 13:09:38 2030 GMT (1825 days)
Write out database with 1 new entries
Database updated
Notice
------
Inline file created:
* /etc/openvpn/pki/inline/private/client01.inline
Notice
------
Certificate created at:
* /etc/openvpn/pki/issued/client01.crt
Après avoir exécuté la commande ci-dessus, le certificat et la clé privée pour client01 seront générés dans les emplacements suivants :
Client | Chemin du Certificat | Chemin de la Clé Privée |
---|---|---|
client01 | /etc/openvpn/pki/issued/client01.crt |
/etc/openvpn/pki/private/client01.key |
- Pour générer 10 certificats et clés privées pour les clients (client01 à client10) en une seule commande :
root@host:~# for i in $(seq -w 1 10);do /usr/share/easy-rsa/easyrsa build-client-full client"$i" nopass; done
Configuration du Serveur OpenVPN – server.conf
- Créez et modifiez le fichier de configuration du serveur OpenVPN à l'emplacement
/etc/openvpn/server.conf
:
port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/server.crt
key /etc/openvpn/pki/private/server.key # the server.key private key must be kept secret
dh /etc/openvpn/pki/dh.pem
# internal tun0 connection IP
server 10.50.8.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
# Compression - must now be turned off for security reasonfor security reasons.
# Use compress stub-v2 if needed in place
#comp-lzo
persist-key
persist-tun
# parameters to be adjusted according to your network configuration
push "dhcp-option DNS 192.168.0.200"
push "dhcp-option DOMAIN std.local"
push "route 192.168.0.0 255.255.255.0"
status /var/log/openvpn-status.log
# verbose mode
verb 3
Gérer le Service du Serveur OpenVPN avec Systemd
- Activez le service OpenVPN server pour qu'il démarre automatiquement au boot :
root@host:~# systemctl enable openvpn@server.service
- Redémarrez le service OpenVPN server pour appliquer les modifications :
root@host:~# systemctl restart openvpn@server.service
Mode Passerelle
Le mode passerelle permet aux clients VPN d'accéder au réseau interne 192.168.0.0/24
depuis le côté client.
Configuration de nftables
Quelques règles netfilter
permettront aux clients VPN d'accéder à l'ensemble du réseau via le tunnel VPN.
Identifier les Interfaces Réseau
- Listez toutes les interfaces réseau sur le serveur et identifiez celle connectée au réseau local (LAN) :
root@host:~# ip addr sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 01:02:a0:21:fd:54 brd ff:ff:ff:ff:ff:ff
inet OPENVPN_IP brd X.X.X.X scope global wan
valid_lft forever preferred_lft forever
inet6 fe80::ff:fe5d:f333/64 scope link
valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 11:a2:a9:21:fd:54 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.254 brd X.X.X.X scope global wan
valid_lft forever preferred_lft forever
inet6 fe80::6a05:caff:fe39:c153/64 scope link
valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.50.8.1 peer 10.50.8.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::7ea2:577f:e834:7a20/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Règles Temporaires
- Ajoutez des règles de
masquerade
pour rendre le réseau interne accessible aux clients VPN Windows :
root@host:~# nft add table ip NAT
root@host:~# nft add chain ip NAT my_masquerade '{ type nat hook postrouting priority 100; }'
root@host:~# nft add rule NAT my_masquerade ip saddr { 10.50.8.0/24 } oifname enp2s0 masquerade
Règles Persistantes
- Pour rendre la configuration
nat
persistante, modifiez le fichier/etc/nftables.conf
:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
table ip NAT {
chain my_masquerade {
type nat hook postrouting priority 100; policy accept;
ip saddr { 10.50.8.0/24 } oifname "enp2s0" masquerade comment "outgoing NAT"
}
}
- Activez le service
nftables
pour qu'il démarre automatiquement au boot :
root@host:~# systemctl enable nftables.service
Activer le Transfert IP pour le Mode Passerelle
- Modifiez le fichier
/etc/sysctl.conf
et ajoutez la ligne suivante :
net.ipv4.ip_forward=1
- Appliquez le changement immédiatement avec la commande suivante :
root@host:~# sysctl -p /etc/sysctl.conf
OpenVPN avec une Interface Réseau Unique (Pas Passerelle par Défaut)

Parfois, il n'est pas possible d'installer OpenVPN directement sur le routeur. Dans de tels cas, vous pouvez configurer le serveur OpenVPN en tant que machine virtuelle ou le déployer sur un serveur dédié au sein du LAN interne.
Créez une règle de redirection de port sur le routeur WAN pour rediriger le trafic OpenVPN (étape 1 du schéma) vers le serveur OpenVPN (étape 2).
Le reste de la configuration reste identique : activez le mode passerelle et créez une règle NAT afin que le client puisse atteindre l'ensemble du LAN 192.168.0.0/24
(étape 3).
En résumé, appliquez les mêmes règles que celles décrites précédemment.
Configuration du Client Windows
Tout d'abord, téléchargez et installez l'édition communautaire d'OpenVPN pour Windows depuis le site officiel : OpenVPN Community Edition pour Windows.
- Copiez les fichiers suivants depuis le serveur Debian vers le client Windows :
ca.crt
—/etc/openvpn/pki/ca.crt
client01.crt
—/etc/openvpn/pki/issued/client01.crt
client01.key
—/etc/openvpn/pki/private/client01.key
C:\Program Files\OpenVPN\config
C:\Users\
utilisateur\OpenVPN\config\
(recommandé)
- Après avoir copié les fichiers, vous devriez voir les fichiers client suivants sur votre machine Windows :

- Créez le fichier
client.ovpn
dans le même répertoire que les fichiers ci-dessus :
client
dev tun
proto udp
remote OPENVPN_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client01.crt
key client01.key
# disabled for security, use compress stub-v2 if needed in place
#comp-lzo
verb 3
- Ouvrez OpenVPN et cliquez sur connect :

- Si OpenVPN est lancé pour la première fois par un utilisateur sans droits administrateur, cette fenêtre contextuelle apparaîtra. Cliquez sur Oui et entrez les identifiants administrateur pour ajouter l'utilisateur actuel au groupe Administrateurs OpenVPN :

- Cette fenêtre de confirmation devrait apparaître, et l'icône OpenVPN deviendra verte, indiquant que vous êtes connecté avec succès au serveur.
