How To set up OpenVPN Server on Windows

OpenVPN Logo

Nous allons voir ici comment mettre en place un serveur OpenVPN sous Microsoft Windows Serveur.

Il sagit de la suite de mon précédent "Tutoriel" que j'ai écris (le lien ici) sous Windows 2019 (ce qui ne change pas grand chose) mais avec l'activation de la fonctionnalité de routage qui permet de joindre le LAN depuis notre client distant.

OpenVPN est un VPN performant, qui a plusieurs avantages : il est gratuit, compatible avec les principaux systèmes d'exploitation, facile à implémenter et hautement paramétrable.

Schéma réseau

Schéma réseau d'une infrastructure OpenVPN sous Windows

Configuration Serveur

Windows Server Logo
  • Propriétés du serveur OpenVPN :
    • OS : Windows Server 2019
    • Role : OpenVPN Server
    • IP : 192.168.0.254

Prérequis

OpenSSL

OpenSSL Logo

Pour créer les certificats de connexion, nous devrons installer OpenSSL. J'utilise personnelement les packages proposés sur slproweb.com.

Télécharger OpenSSL

Télécharger la dernière version d'OpenSSL Light.

Téléchargement d'OpenSSL sur le site slproweb
Installer OpenSSL
  • Accepter le Contrat de Licence :
OpenSSL installation | Contrat de Licence
  • Choisir le dossier d'installation :
OpenSSL installation | Choix du dossier d'installation
  • Définir le dossier du menu démarrer :
OpenSSL installation | Définir le menu démarrer
  • Choisir de copier les DLLs OpenSSL dans le dossier bin :
OpenSSL installation | Choix de l'emplacement des DLLs OpenSSL
  • Cliquer sur install :
OpenSSL installation | Lancement de l'installation
  • Cliquer sur Finish tpour fermer (et si vous le pouvez, faites un don pour supporter l'équipe de développement 😊) :
OpenSSL installation | page de dons
Ajouter OpenSSL dans les variables d'environement

Nous allons avoir besoin d'ajouter OpenSSL dans les variables d'environnement.

  • Exécuter SystemPropertiesAdvanced pour ouvrir les Propriétés Système :
Exécuter SystemPropertiesAdvanced
  • Cliquer sur Variables d'Environnement… :
Windows | Propriétés Système
  • Éditer Path :
Windows | Fenètre des variables d'environement
  • Cliquer sur Nouveau et ajouter %ProgramFiles%\OpenSSL-Win64\bin :
Edit environment variable
  • Ouvrir un prompt Windows et vérifier que l'on peut exécuter une commande openssl :
openssl version test

Ajouter une règle dans le pare-feu Windows

Windows Firewall logo

Nous avons besoin d'ouvrir le port 1194 en udp pour autoriser les flux OpenVPN.

  • On pourra au choix utiliser la Console de Management de pare-feu Windows ou entrer cette commande dans un prompt Administrateur.
C:\Windows\system32>netsh advfirewall firewall add rule name="OpenVPN" dir=in localport=1194 remoteport=0-65535 protocol=UDP action=allow remoteip=any localip=any
  • Également possible avec PowerShell :
PS C:\ > New-NetFirewallRule -DisplayName "OpenVPN" -Direction Inbound -Protocol UDP -LocalPort 1194 -Action Allow

Installation d'OpenVPN

Se rendre sur le site officiel d'OpenVPN et télécharger ici la dernière version de l'installeur msi.

Site de téléchargement d'OpenVPN
  • Comme nous voulons installer OpenVPN en mode serveur nous allons choisir Customize :
Installation d'OpenVPN Windows
  • On active le OpenVPN Service pour que le service soit actif au démarrage de Windows :
Installation d'OpenVPN Windows
  • On installe également EasyRsa afin de pouvoir créer les certificats serveur et clients :
Installation d'OpenVPN Windows
  • Une fois terminé on clique sur Close :
Fermeture de l'installateur OpenVPN

Les Certificats

Création de l'autorité de certification (CA) et génération des certificats et clés pour le serveur et clients

Ici on mettra en place une pki pour la création de nos certificats serveur et clients.

  • Ouvrir l'invite de commande en tant qu'administrateur :
Windows ouvrir l'invite de commande en tant qu'administrateur
  • Et entrer les commandes suivantes pour entrer dans le shell EasyRSA :
C:\Windows\system32>cd C:\Program Files\OpenVPN\easy-rsa
C:\Program Files\OpenVPN\easy-rsa>EasyRSA-Start.bat
  • Supprimer la configuration existante (normalement inutile) :
# ./easyrsa clean-all
  • Initialiser notre pki, entrer yes pour confirmer :
# ./easyrsa init-pki
OpenVPN | Easy RSA Shell init-pki
  • Créer son autorité de certification :
# ./easyrsa build-ca nopass
[…]
Enter PEM pass phrase:MyPassW0rd
Verifying - Enter PEM pass phrase:MyPassW0rd
[…]
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:ovpn
  • Créer la paire de clé pour le serveur :
# ./easyrsa build-server-full server nopass
[…]
Enter pass phrase for c:\Program Files\OpenVPN\easy-rsa\pki\private\ca.key:MyPassW0rd
  • Générer les paramètres Diffie Hellman :
# ./easyrsa gen-dh
  • Générer les certificats client :
# ./easyrsa build-client-full client01 nopass
[…]
Enter pass phrase for c:\Program Files\OpenVPN\easy-rsa\pki\private\ca.key:MyPassW0rd

Déplacer les certificats dans les bons dossiers

  • Déplacer les fichiers suivants (présents dans les répertoires C:\Program Files\OpenVPN\easy-rsa\pki, C:\Program Files\OpenVPN\easy-rsa\pki\issued et C:\Program Files\OpenVPN\easy-rsa\pki\private) :
    • ca.crt
    • dh.pem
    • server.crt
    • server.key
  • Dans C:\Program Files\OpenVPN\config-auto et C:\Program Files\OpenVPN\config.
Dossier config-auto OpenVPN sur Windows

Fichier de Configuration

  • Éditer avec les droits administrateur le fichier C:\Program Files\OpenVPN\config-auto\server.ovpn :
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh.pem

server 10.50.8.0 255.255.255.0
ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key
persist-tun

status openvpn-status.log

verb 3

Redémarrer le service OpenVPN

Le service OpenVPN doit être redémarré pour que la modification du fichier de configuration soit prise en compte.

  • Ouvrir la console de gestion des services :
Windows exécuter, services.msc
  • Et faire un clic droit sur OpenVPNService, puis Redémarrer :
Windows services management console | redémarrer le service openvpnservice.
  • Ou , en tant qu'administrateur depuis une console :
C:\Windows\system32>net stop openvpnservice
C:\Windows\system32>net start openvpnservice
  • Ou, avec PowerShell :
PS C:> Restart-Service OpenVPNService -PassThru

Client OpenVPN

Windows 10 Logo
  • Client OpenVPN :
    • OS : Windows 10
    • Rôle : Client OpenVPN

Installation d'OpenVPN

On téléchargera le même package que pour le serveur, mais ici l'installation par défaut sera suffisante.

Copie des certificats depuis le Serveur

  • Depuis le Serveur récupérer les fichiers suivants (depuis les dossiers C:\Program Files\OpenVPN\easy-rsa\pki, C:\Program Files\OpenVPN\easy-rsa\pki\issued et C:\Program Files\OpenVPN\easy-rsa\pki\private) :
    • ca.crt
    • client01.crt
    • client01.key
  • Et les coller dans C:\Program Files\OpenVPN\config.
Contenu du dossier C:\Program Files\OpenVPN\config dans Windows 10.

Fichier de configuration

  • En tant qu'administrateur, éditer le fichier C:\Program Files\OpenVPN\config\client.ovpn :
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

comp-lzo

verb 3

Établir la connexion VPN

  • Ouvrir OpenVPN en tant qu'administrateur :
Windows 10, Exécuter OpenVPN en tant qu'administrateur.
  • Démarrer la connexion :
Windows 10, OpenVPN se connecter.
  • Un pop up viendra confirmer la connexion :
Windows 10, OpenVPN, pop up de connexion .

Accès au Serveur

Une fois le VPN établit, nous pouvons joindre le serveur depuis l'adresse 10.50.8.1.

Windows 10, OpenVPN, test ping.

⚠️ Troubleshooting : Suite à une mise à jour Windows, je ne pouvais plus avoir accès aux ressources du serveur (le partage de fichiers et ping étaient KO alors même que le VPN était établi), j'ai du réparer l'installation d'OpenVPN (sur le serveur en relançant le programme d'installation) pour que cela fonctionne de nouveau.

Activer le routage

À ce stade nous avons un serveur OpenVPN fonctionnel qui est joignable depuis notre client distant. Mais comment joindre notre serveur sur son ip privée (192.168.0.254 ici) ou d'autres machines (192.168.0.200 ici) de notre réseau local? C'est ce que nous allons voir en activant le routage sur notre serveur OpenVPN Windows.

Schéma Windows OpenVPN with routing Network Scheme

Serveur OpenVPN

Windows Server Logo

Fichier de configuration

  • Éditer en tant qu'administrateur le fichier C:\Program Files\OpenVPN\config-auto\server.ovpn et ajouter la ligne push "route add 192.168.0.0 255.255.255.0" pour annoncer le réseau à notre client distant :
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh.pem

server 10.50.8.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.200"

keepalive 10 120

comp-lzo

persist-key
persist-tun

status openvpn-status.log

verb 3
  • Redémarrer le service OpenVPNService, exemple ici avec PowerShell :
PS C:> Restart-Service OpenVPNService -PassThru

Installer la fonctionnalité de routage

  • En tant qu'administrateur, ouvrir PowerShell et entrer la commande suivante pour installer la fonctionnalité de routage :
PS C:> Install-WindowsFeature -Name Routing -IncludeManagementTools

Configuration du routage

  • Ouvrir la console Routage et accès distant en exécutant rrasmgmt.msc :
Windows | Exécuter rrasmgmt.msc
  • Faire un clic droit au niveau du nom du serveur > Configurer et activer le routage et l'accès à distance :
Windows | Routing and remote access console, Configure and Enabme Routing and Remote Access
  • Cliquer sur Suivant :
Windows | Routing and remote access console, Welcome Wizard
  • Choisir Configuration personnalisée :
Windows | Routing and remote access console, Custom configuration
  • Selectionner NAT et routage réseau :
Windows | Routing and remote access console, selecting NAT and LAN routing configuration
  • Enfin cliquer sur Terminer :
Windows | Routing and remote access console, Finish Wizard
  • Puis sur Démarrer le service. A ce stade le Client distant devrait être en mesure de joindre l' interface LAN (192.168.0.254 ici) du serveur :
Windows | Routing and remote access console, Start the service box
  • En vue de pouvoir atteindre notre réseau LAN nous avons besoin de créer une règle NAT :
Windows | Routing and remote access console, NAT, New interface
  • Choisir l'Interface LAN Network (192.168.0.254 ici) et cliquer sur OK :
Windows | Routing and remote access console, selecting NAT interface
  • Choisir Interface publique connectée à Internet et cocher Activer NAT sur cette interface avant de valider en cliquant sur OK :
Windows | Routing and remote access console, configuring NAT interface

Client OpenVPN

Logo Windows 10
  • Ouvrir une invite de commande et entrer route print pour vérifier que notre route vers le réseau 192.168.0.0 a été correctement poussée par le serveur :
Windows | commande route print
  • Vérifier que l'on puisse correctement joindre notre réseau privé :
Windows | ping depuis deux invites de commande
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :