🛠 Outils IT
🛠 98 outils 📚 37 docs
🤖 Assistant

Server OPENVPN windows

1. Prérequis et architecture

Cette documentation décrit la mise en place d'un serveur OpenVPN Community Edition sur une machine Windows (10/11/Server), avec un ou plusieurs postes clients qui s'y connectent à distance via Internet.

1.1 Schéma général

     [ Client distant ]
            |
            | UDP 1194 (chiffré)
            |
        [ Internet ]
            |
            |
     [ Box / Routeur ]  ----> redirection UDP 1194 -----+
                                                         |
                                                         v
                                            [ PC Windows - Serveur OpenVPN ]
                                                  IP LAN : 192.168.1.x
                                                  IP VPN : 10.8.0.1

1.2 Prérequis

ÉlémentRecommandéRemarques
OSWindows 10/11 Pro ou Windows ServerL'édition Home fonctionne mais le service « Routage et accès distant » n'existe pas (NAT plus difficile).
PrivilègesCompte administrateur localPour l'installation, EasyRSA, le pare-feu, le registre et les services.
RéseauIP locale fixe (DHCP réservation ou IP statique)Indispensable pour que la redirection de port reste stable.
Accès InternetIP publique fixe ou DynDNS (No-IP, DuckDNS…)Les clients ont besoin d'un point d'entrée résolvable.
Box / RouteurRedirection UDP 1194 vers le PC serveurIndispensable pour les accès depuis Internet.
Pare-feuWindows Defender Firewall (ou tiers)Une règle d'autorisation UDP 1194 entrante est à créer.
Bon à savoir : il n'existe pas d'installeur « serveur » séparé sous Windows pour OpenVPN Community. C'est le même MSI qui contient client et serveur, on coche les composants serveur (notamment EasyRSA) pendant l'installation.

2. Installation OpenVPN Community (Windows)

2.1 Téléchargement officiel

RessourceURL
Hub Communityhttps://openvpn.net/community/
Wiki téléchargementshttps://community.openvpn.net/Downloads
Releases (index direct)https://build.openvpn.net/downloads/releases/
MSI direct (exemple 2.7.x)https://swupdate.openvpn.org/community/releases/OpenVPN-2.7.4-I001-amd64.msi
Sources GitHubhttps://github.com/OpenVPN/openvpn/releases
À ne pas confondre : https://openvpn.net/client/ distribue uniquement OpenVPN Connect, le client GUI moderne — il ne contient pas les composants serveur.

2.2 Installation en mode « Customize »

Lancer le MSI en tant qu'administrateur, choisir Customize et cocher impérativement :

  • OpenVPN Service (service Windows qui démarre les configurations automatiquement)
  • OpenVPN GUI (interface bureau)
  • EasyRSA 3 Certificate Management Scripts (souvent décoché par défaut)
  • TAP Virtual Ethernet Adapter ou Wintun (Wintun est plus performant et conseillé sur Windows 10+)
  • OpenSSL Utilities

2.3 Arborescence installée

C:\Program Files\OpenVPN\
├── bin\                # openvpn.exe, openvpn-gui.exe, openssl.exe...
├── config\             # Fichiers .ovpn lancés par l'utilisateur
├── config-auto\        # Fichiers .ovpn lancés par le service Windows
├── easy-rsa\           # Scripts EasyRSA pour PKI/certificats
├── log\                # Journaux (server.log, etc.)
└── sample-config\      # Exemples server.ovpn et client.ovpn

3. Génération des certificats (EasyRSA)

OpenVPN s'appuie sur une PKI TLS : une autorité (CA) qui signe un certificat serveur et un certificat par client. EasyRSA est le jeu de scripts officiel pour gérer cette PKI.

3.1 Initialisation de la PKI

Ouvrir PowerShell en administrateur :

cd "C:\Program Files\OpenVPN\easy-rsa"
.\EasyRSA-Start.bat

Dans le shell EasyRSA qui s'ouvre :

# 1. Initialiser le dossier PKI
./easyrsa init-pki

# 2. Créer l'autorité de certification (saisir un Common Name, ex. "OpenVPN-CA")
./easyrsa build-ca nopass

# 3. Générer les paramètres Diffie-Hellman (peut prendre 1 à 3 minutes)
./easyrsa gen-dh

# 4. Générer le certificat serveur
./easyrsa build-server-full server nopass

# 5. Générer un certificat client (un par utilisateur/poste)
./easyrsa build-client-full client1 nopass

# Quitter le shell EasyRSA
exit

3.2 Génération de la clé TLS-Auth (HMAC)

Ouvrir un cmd en admin :

cd "C:\Program Files\OpenVPN\bin"
openvpn.exe --genkey secret "C:\Program Files\OpenVPN\config\ta.key"

3.3 Fichiers générés

FichierEmplacementRôle
ca.crteasy-rsa\pki\Certificat racine de la CA (partagé serveur + clients)
dh.pemeasy-rsa\pki\Paramètres Diffie-Hellman (serveur uniquement)
server.crteasy-rsa\pki\issued\Certificat public du serveur
server.keyeasy-rsa\pki\private\Clé privée du serveur (secret)
client1.crteasy-rsa\pki\issued\Certificat public du client
client1.keyeasy-rsa\pki\private\Clé privée du client (secret)
ta.keyOpenVPN\config\Clé TLS-Auth HMAC (serveur + clients)

3.4 Copier les fichiers vers le dossier serveur

copy "C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt"                "C:\Program Files\OpenVPN\config\"
copy "C:\Program Files\OpenVPN\easy-rsa\pki\dh.pem"               "C:\Program Files\OpenVPN\config\"
copy "C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt"    "C:\Program Files\OpenVPN\config\"
copy "C:\Program Files\OpenVPN\easy-rsa\pki\private\server.key"   "C:\Program Files\OpenVPN\config\"
Astuce : conservez le dossier easy-rsa\pki\ hors du serveur (clé USB chiffrée, gestionnaire de secrets…). C'est votre « coffre » PKI pour ré-émettre des certificats clients ou révoquer un accès.

4. Configuration du serveur (server.ovpn)

Créer le fichier C:\Program Files\OpenVPN\config\server.ovpn :

# --- Réseau ---
port 1194
proto udp
dev tun

# --- PKI ---
ca       ca.crt
cert     server.crt
key      server.key
dh       dh.pem
tls-auth ta.key 0

# --- Cryptographie ---
cipher        AES-256-GCM
auth          SHA256
tls-version-min 1.2

# --- Topologie / sous-réseau VPN ---
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
topology subnet

# --- Routes / DNS poussés vers le client ---
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"

# --- Robustesse ---
keepalive 10 120
persist-key
persist-tun
explicit-exit-notify 1

# --- Logs ---
status      openvpn-status.log
log         openvpn.log
verb        3

4.1 Options clés

DirectiveRôle
port 1194 / proto udpPort et protocole d'écoute. UDP est recommandé (meilleures perfs). TCP utile uniquement si le réseau du client bloque l'UDP.
dev tunMode routage (L3). Préféré à dev tap (bridging L2) sauf cas particulier.
server 10.8.0.0 /24Définit le pool d'IP attribuées aux clients. Adaptez-le pour ne pas chevaucher votre LAN.
redirect-gateway def1Le client envoie tout son trafic Internet via le VPN. Retirer cette ligne pour un split-tunnel.
tls-auth ta.key 0Couche HMAC anti-DoS / anti-scan. Le serveur prend la valeur 0, les clients 1.
explicit-exit-notify 1Le serveur prévient les clients d'un arrêt (reconnexion plus rapide).

5. Routage IP et NAT sous Windows

Pour que les clients VPN puissent joindre le LAN (ou Internet via le serveur), Windows doit faire suivre les paquets entre l'interface TUN/Wintun et l'interface réseau physique.

5.1 Activer le routage IP (registre)

# PowerShell admin
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" `
                 -Name IPEnableRouter -Value 1

# Redémarrer pour application
Restart-Computer

5.2 Activer le service de routage (Windows Pro / Server)

Set-Service RemoteAccess -StartupType Automatic
Start-Service RemoteAccess

5.3 Activer le NAT entre TUN et LAN (Windows Server / Pro avec RRAS)

Sur Windows Server, la méthode officielle est RRAS (Routing and Remote Access) :

  1. Gestionnaire de serveur > Ajouter des rôles > Accès à distance > cocher Routage.
  2. Console rrasmgmt.msc > clic droit sur le serveur > Configurer et activer le routage et l'accès à distance > NAT.
  3. Choisir l'interface publique (LAN sortant) et l'interface privée (l'adaptateur TAP / Wintun).

Sur Windows 10/11 Pro, en CLI :

# Lister les interfaces (repérer "OpenVPN Wintun" ou "TAP-Windows Adapter V9")
Get-NetAdapter

# Voir l'index numérique
Get-NetIPInterface | Sort-Object ifIndex

# Activer l'IP forwarding sur l'interface TUN et sur l'interface physique
Set-NetIPInterface -InterfaceAlias "OpenVPN Wintun"        -Forwarding Enabled
Set-NetIPInterface -InterfaceAlias "Ethernet"              -Forwarding Enabled
Astuce : si Routage et accès distant est indisponible (édition Home), on peut basculer sur WireGuard ou utiliser netsh routing ip nat (obsolète) ou simplement publier les services via redirection de port plutôt que de router tout le LAN.

6. Pare-feu Windows (UDP 1194)

# Ouvrir UDP 1194 en entrée
New-NetFirewallRule -DisplayName "OpenVPN UDP 1194" `
                    -Direction Inbound `
                    -Protocol UDP `
                    -LocalPort 1194 `
                    -Action Allow `
                    -Profile Any

Sur la box / routeur internet, créer la redirection de port :

Protocole : UDP
Port public : 1194
IP interne  : 192.168.1.X   (IP locale fixe du serveur Windows)
Port interne: 1194

7. Démarrage du service OpenVPN

Tout fichier .ovpn placé dans C:\Program Files\OpenVPN\config-auto\ est lancé par le service Windows OpenVPNService. C'est la méthode recommandée pour un serveur permanent.

# Copier la config dans config-auto
copy "C:\Program Files\OpenVPN\config\server.ovpn" `
     "C:\Program Files\OpenVPN\config-auto\"

# Activer et démarrer le service
Set-Service OpenVPNService -StartupType Automatic
Start-Service OpenVPNService

# Vérifier
Get-Service OpenVPNService
Get-Content "C:\Program Files\OpenVPN\log\server.log" -Tail 30

Le log doit afficher Initialization Sequence Completed. C'est le signal que le serveur est opérationnel.

Différence config vs config-auto : les fichiers dans config\ sont lancés manuellement via l'icône OpenVPN GUI (session utilisateur). Les fichiers dans config-auto\ sont lancés par le service Windows (au boot, sans session ouverte) — indispensable pour un serveur 24/7.

8. Configuration et distribution des clients

8.1 Modèle client1.ovpn

Le client a besoin de : ca.crt, client1.crt, client1.key, ta.key. La pratique courante consiste à tout intégrer dans un fichier .ovpn unique (format inline) :

client
dev tun
proto udp
remote vpn.exemple.fr 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher        AES-256-GCM
auth          SHA256
verb 3

<ca>
-----BEGIN CERTIFICATE-----
... contenu de ca.crt ...
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
... contenu de client1.crt ...
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
... contenu de client1.key ...
-----END PRIVATE KEY-----
</key>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
... contenu de ta.key ...
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1

8.2 Installation côté client

  1. Installer OpenVPN GUI (même MSI Community) ou OpenVPN Connect sur le poste client.
  2. Déposer le client1.ovpn dans %USERPROFILE%\OpenVPN\config\ (ou l'importer depuis Connect).
  3. Lancer la connexion — l'icône passe au vert avec l'IP 10.8.0.x attribuée.

8.3 Révoquer un client (perte de poste, départ…)

cd "C:\Program Files\OpenVPN\easy-rsa"
.\EasyRSA-Start.bat

./easyrsa revoke client1
./easyrsa gen-crl
exit

# Copier la CRL dans config\ et ajouter dans server.ovpn :
#   crl-verify crl.pem

9. Restreindre le RDP au tunnel OpenVPN

Bonne pratique de sécurité : ne pas exposer le Bureau à distance (TCP 3389) directement sur Internet, mais l'ouvrir uniquement aux clients connectés au VPN (sous-réseau 10.8.0.0/24).

9.1 Désactiver les règles RDP par défaut

# Lister les règles RDP existantes (FR ou EN)
Get-NetFirewallRule -DisplayGroup "Bureau à distance" -ErrorAction SilentlyContinue
Get-NetFirewallRule -DisplayGroup "Remote Desktop"      -ErrorAction SilentlyContinue

# Approche fiable : trouver toutes les règles INBOUND ALLOW sur le port 3389
Get-NetFirewallPortFilter -Protocol TCP |
  Where-Object { $_.LocalPort -eq 3389 } |
  ForEach-Object { Get-NetFirewallRule -AssociatedNetFirewallPortFilter $_ } |
  Where-Object Direction -eq Inbound |
  Disable-NetFirewallRule

9.2 Créer la règle « RDP via OpenVPN uniquement »

New-NetFirewallRule `
  -DisplayName  "RDP via OpenVPN uniquement" `
  -Direction    Inbound `
  -Protocol     TCP `
  -LocalPort    3389 `
  -RemoteAddress 10.8.0.0/24 `
  -Action       Allow `
  -Profile      Any `
  -Enabled      True

Adapter 10.8.0.0/24 au sous-réseau défini dans server.ovpn (directive server).

9.3 Vérification

Origine du testRésultat attendu
Depuis Internet (sans VPN)❌ Connexion RDP refusée
Depuis le LAN local❌ Connexion RDP refusée (sauf règle Allow résiduelle)
Depuis un client connecté au VPN (10.8.0.x)✅ RDP autorisé vers 10.8.0.1 (ou IP LAN du serveur)
# Depuis un client, hors VPN
Test-NetConnection IP_PUBLIQUE -Port 3389   # doit échouer

# Depuis le même client, connecté au VPN
Test-NetConnection 10.8.0.1 -Port 3389      # doit réussir

9.4 Couches de défense complémentaires

MesureOù / comment
NLA obligatoireSystème > Paramètres avancés > Utilisation à distance > N'autoriser que les ordinateurs avec NLA
Changer le port RDPRegistre : HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber
Limiter les comptes RDPsecpol.msc > Stratégies locales > Attribution des droits utilisateur > Autoriser l'ouverture de session par les services Bureau à distance
Auditer les connexionsObservateur d'événements > Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
Supprimer la NAT 3389 sur la boxS'assurer qu'aucune redirection TCP 3389 n'existe sur le routeur Internet
Piège classique : sous Windows, une règle Block a la priorité absolue. Si vous créez un Block any sur 3389 pour « verrouiller », vous bloquerez aussi votre VPN. Mieux vaut s'assurer qu'aucune règle Allow ne couvre 3389 hors plage VPN plutôt que d'empiler des Block.

10. Dépannage

10.1 Logs à consulter

FichierContenu
C:\Program Files\OpenVPN\log\server.logLog principal du serveur (lancé via le service)
C:\Program Files\OpenVPN\log\openvpn-status.logListe des clients connectés, octets RX/TX
%USERPROFILE%\OpenVPN\log\*.logLogs côté client GUI

10.2 Problèmes fréquents

SymptômeCause probableRésolution
Le service ne démarre pasErreur de syntaxe dans server.ovpn, fichier de cert introuvableLancer manuellement openvpn.exe --config server.ovpn pour voir l'erreur en clair.
TLS Error: TLS handshake failedNAT box non configuré, UDP 1194 fermé, pare-feu Windows, clés désynchronisées (ta.key)Vérifier Test-NetConnection IP -Port 1194 -InformationLevel Detailed et la NAT box.
Client connecté mais pas d'InternetIPEnableRouter non actif, NAT/RRAS non configuréSection 5 : registre + service RemoteAccess + règle NAT entre TUN et interface physique.
Client connecté mais ne ping pas le LANRoute LAN absente sur le client, ou IPEnableRouter désactivéPousser la route depuis le serveur : push "route 192.168.1.0 255.255.255.0".
Adresse 10.8.0.1 non joignableL'interface TUN/Wintun n'a pas d'IP, le service a planté ou n'a pas fini son initialisationGet-NetIPAddress -InterfaceAlias "OpenVPN Wintun" doit retourner 10.8.0.1/24.
Antivirus tiers (Bitdefender, ESET…)Pare-feu intégré qui ignore Windows FirewallOuvrir UDP 1194 et autoriser TCP 3389 depuis 10.8.0.0/24 dans la console de l'antivirus.

10.3 Commandes de diagnostic utiles

# Voir l'état du service
Get-Service OpenVPNService

# Voir les interfaces et IP
Get-NetAdapter
Get-NetIPAddress | Where-Object InterfaceAlias -like "*OpenVPN*"

# Vérifier l'écoute du port 1194
Get-NetUDPEndpoint -LocalPort 1194

# Tester depuis un client
Test-NetConnection vpn.exemple.fr -Port 1194 -InformationLevel Detailed

# Voir les clients actuellement connectés
Get-Content "C:\Program Files\OpenVPN\log\openvpn-status.log"
Alternative moderne : si la configuration OpenVPN vous semble lourde, WireGuard sous Windows se met en place en moins de 10 minutes (un seul fichier .conf par peer, pas de PKI), pour des performances généralement supérieures. OpenVPN reste cependant la référence pour la compatibilité (clients mobiles, matériels, audits, etc.).