Server OPENVPN windows
- 1. Prérequis et architecture
- 2. Installation OpenVPN Community (Windows)
- 3. Génération des certificats (EasyRSA)
- 4. Configuration du serveur (server.ovpn)
- 5. Routage IP et NAT sous Windows
- 6. Pare-feu Windows (UDP 1194)
- 7. Démarrage du service OpenVPN
- 8. Configuration et distribution des clients
- 9. Restreindre le RDP au tunnel OpenVPN
- 10. Dépannage
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ément | Recommandé | Remarques |
|---|---|---|
| OS | Windows 10/11 Pro ou Windows Server | L'édition Home fonctionne mais le service « Routage et accès distant » n'existe pas (NAT plus difficile). |
| Privilèges | Compte administrateur local | Pour l'installation, EasyRSA, le pare-feu, le registre et les services. |
| Réseau | IP locale fixe (DHCP réservation ou IP statique) | Indispensable pour que la redirection de port reste stable. |
| Accès Internet | IP publique fixe ou DynDNS (No-IP, DuckDNS…) | Les clients ont besoin d'un point d'entrée résolvable. |
| Box / Routeur | Redirection UDP 1194 vers le PC serveur | Indispensable pour les accès depuis Internet. |
| Pare-feu | Windows Defender Firewall (ou tiers) | Une règle d'autorisation UDP 1194 entrante est à créer. |
2. Installation OpenVPN Community (Windows)
2.1 Téléchargement officiel
| Ressource | URL |
|---|---|
| Hub Community | https://openvpn.net/community/ |
| Wiki téléchargements | https://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 GitHub | https://github.com/OpenVPN/openvpn/releases |
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
| Fichier | Emplacement | Rôle |
|---|---|---|
ca.crt | easy-rsa\pki\ | Certificat racine de la CA (partagé serveur + clients) |
dh.pem | easy-rsa\pki\ | Paramètres Diffie-Hellman (serveur uniquement) |
server.crt | easy-rsa\pki\issued\ | Certificat public du serveur |
server.key | easy-rsa\pki\private\ | Clé privée du serveur (secret) |
client1.crt | easy-rsa\pki\issued\ | Certificat public du client |
client1.key | easy-rsa\pki\private\ | Clé privée du client (secret) |
ta.key | OpenVPN\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\"
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
| Directive | Rôle |
|---|---|
port 1194 / proto udp | Port et protocole d'écoute. UDP est recommandé (meilleures perfs). TCP utile uniquement si le réseau du client bloque l'UDP. |
dev tun | Mode routage (L3). Préféré à dev tap (bridging L2) sauf cas particulier. |
server 10.8.0.0 /24 | Définit le pool d'IP attribuées aux clients. Adaptez-le pour ne pas chevaucher votre LAN. |
redirect-gateway def1 | Le client envoie tout son trafic Internet via le VPN. Retirer cette ligne pour un split-tunnel. |
tls-auth ta.key 0 | Couche HMAC anti-DoS / anti-scan. Le serveur prend la valeur 0, les clients 1. |
explicit-exit-notify 1 | Le 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) :
- Gestionnaire de serveur > Ajouter des rôles > Accès à distance > cocher Routage.
- Console
rrasmgmt.msc> clic droit sur le serveur > Configurer et activer le routage et l'accès à distance > NAT. - 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
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.
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
- Installer OpenVPN GUI (même MSI Community) ou OpenVPN Connect sur le poste client.
- Déposer le
client1.ovpndans%USERPROFILE%\OpenVPN\config\(ou l'importer depuis Connect). - Lancer la connexion — l'icône passe au vert avec l'IP
10.8.0.xattribué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 test | Ré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
| Mesure | Où / comment |
|---|---|
| NLA obligatoire | Système > Paramètres avancés > Utilisation à distance > N'autoriser que les ordinateurs avec NLA |
| Changer le port RDP | Registre : HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber |
| Limiter les comptes RDP | secpol.msc > Stratégies locales > Attribution des droits utilisateur > Autoriser l'ouverture de session par les services Bureau à distance |
| Auditer les connexions | Observateur d'événements > Microsoft-Windows-TerminalServices-LocalSessionManager/Operational |
| Supprimer la NAT 3389 sur la box | S'assurer qu'aucune redirection TCP 3389 n'existe sur le routeur Internet |
10. Dépannage
10.1 Logs à consulter
| Fichier | Contenu |
|---|---|
C:\Program Files\OpenVPN\log\server.log | Log principal du serveur (lancé via le service) |
C:\Program Files\OpenVPN\log\openvpn-status.log | Liste des clients connectés, octets RX/TX |
%USERPROFILE%\OpenVPN\log\*.log | Logs côté client GUI |
10.2 Problèmes fréquents
| Symptôme | Cause probable | Résolution |
|---|---|---|
| Le service ne démarre pas | Erreur de syntaxe dans server.ovpn, fichier de cert introuvable | Lancer manuellement openvpn.exe --config server.ovpn pour voir l'erreur en clair. |
| TLS Error: TLS handshake failed | NAT 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'Internet | IPEnableRouter 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 LAN | Route 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 joignable | L'interface TUN/Wintun n'a pas d'IP, le service a planté ou n'a pas fini son initialisation | Get-NetIPAddress -InterfaceAlias "OpenVPN Wintun" doit retourner 10.8.0.1/24. |
| Antivirus tiers (Bitdefender, ESET…) | Pare-feu intégré qui ignore Windows Firewall | Ouvrir 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"
.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.).