Windows - OpenVPN Serveur
Le 10-02-2019
Jalounet


Dans cette article nous allons voir comment installer un serveur Open VPN sur Windows avec une prise en charge de Windows Serveur. Nous verrons également le côté client pour le connecter au serveur.

Type : Client - Serveur
Authentification des utilisateurs : Par certificat.
Pas besoin d’utilisateur et de mot de passe.
Attention, l'article ne prend pas en charge la version Linux

1. Introduction
OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel (VPN). Son développement a commencé le 13 mai 2001 grâce à James Yonan.
OpenVPN permet à des pairs de s'authentifier entre eux à l'aide d'une clé privée partagée à l'avance, de certificats électroniques ou de couples de noms d'utilisateur/mot de passe. Il utilise de manière intensive la bibliothèque d'authentification OpenSSL ainsi que le protocole SSLv3/TLSv1. Disponible avec une multitude d'environnements tel que Solaris, OpenBSD, FreeBSD, NetBSD, Linux (Debian, Redhat, Ubuntu, etc.), Mac OS X, Windows 2000, XP, Vista, 7, 8 et 10, il offre de nombreuses fonctions de sécurité et de contrôle.
OpenVPN n'est pas compatible avec IPsec ou d'autres logiciels VPN. Le logiciel contient un exécutable pour les connexions du client et du serveur, un fichier de configuration optionnel et une ou plusieurs clés suivant la méthode d'authentification choisie.
Source : Wikipédia.


1.1 Prérequis :

Télécharger la dernière version disponible en exécutable sur le site officiel :
La version de l'article est la 2.4.6.


2. Installation
2.1 Logiciel Open VPN
Lancer l’installation, la seule étape importante est la suivante :



3. Configuration Prérequis
3.1 Variable d’environnement
Nous devons rajouter dans les variables d’environnement nos exécutables Open VPN pour pouvoir lancer les scripts de configuration.
"Panneau de configuration///Système///Paramètres système avancés///Variables d’environnement"
Sélectionner Path puis modifier, s’il n’est pas présent créer le.



Ajouter le chemin vers le dossier « BIN » d’Open VPN.

3.2 Autoriser le routage
Pour que le serveur partage son réseau, il est nécessaire de faire une petite modification dans la base de registre.
Ouvrer "Ordinateur//HKEY_LOCAL_MACHINE//SYSTEM//CurrentControlSet//Services//Tcpip//Parameters"


"IPEnableRouter" est à 0 par défaut. Passer le à 1.
Redémarrer
Note : Pour Windows serveur 2012-2019 vous avez une étape supplémentaire à effectuer dans la documentation. Voir « NAT avec Windows Serveur ».

3.3 Droits
Donnez-vous l’ensemble des droits sur le dossier OpenVPN.


3.4 Carte virtuelle
Modifier le nom de la carte réseau virtuelle installé par défaut par OpenVPN. Mettre "ServeurVPN".

Désactiver également l’IPV6 pour éviter des problèmes réseau.



4. Configuration
4.1 Les certificats et clés de cryptages
Ouvrir une invite de commande en administrateur.
(Petite note, si vous ouvrez Powershell par défaut vous pouvez lui indiquer de passer en invite de commande en lui marquant « cmd » puis entrer. Et inversement.)
cd
cd "C:/Program Files/OpenVPN/easy-rsa"
init-config.bat



Éditer le fichier vars avec Notepad de préférence sinon un bloc note.


Modifier les clés selon les informations de votre client. Voici une petite version d’exemple avec les points à ne pas modifier.


set KEY_COUNTRY=FR
set KEY_PROVINCE=FR
set KEY_CITY=VilleClient
set KEY_ORG=Société
set KEY_EMAIL=mail@host.domain
set KEY_CN=PasImportant
set KEY_NAME=NePasModifier
set KEY_OU=PasImportant
set PKCS11_MODULE_PATH=PasImportant
set PKCS11_PIN=7001


Lancer
vars.bat




clean-all.bat



Note : Vérifier le dossier Key dans le répertoire easy-rsa. Les utilisateurs doivent avoir le droit de modifier le dossier. Si ce n’est pas le cas, ajouter le droit nécessaire sinon on va avoir une erreur sur la configuration du serveur.

build-ca.bat



build-key-server.bat server

Ligne « commonName » rentrer « server ».
Ligne « Certifcate is to be certified… répondre « Y ».
Ligne 1 out of 1 certificate … répondre « Y ».



Création du certificat client (à refaire autant de fois qu’il a de poste client)
Note : NomClient = Le nom du poste / Le prénom d’une personne. Voir nomenclature du client. Par défaut, je recommande le hostname.
build-key NomClient

Ligne « commonName » rentrer « NomClient»
Ligne Certifcate is to be certified… répondre « Y »
Ligne 1 out of 1 certificate … répondre « Y »



Générer des paramètres Diffie Hellman (nécessaire pour configurer le cryptage)
build-dh



openvpn --genkey --secret ta.key


Copier le fichier « ta.key » du dossier « easy-rsa » vers le dossier « Key ».

4.2 Fichier de configuration OpenVPN Serveur
Copier « client.ovpn et server.ovpn » du dossier "sample-config" dans "config".



Éditer avec Notepad le fichier « server.ovpn ».

Sélectionner et supprimer tout.
Copier-coller la configuration suivante :

Note : Les commentaires type "texte" sont en "#" et les types "commandes non utilisées" en ";".


# Configuration du SERVEUR
dev-node "ServeurVPN"
mode server
port 1194

#Adapter soit udp soit tcp celons la connexion du client et du pare-feu. Voir annexe.
proto udp4
;proto tcp4-client
dev tun

tls-server
tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ta.key" 0

ca "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\server.crt"
key "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\server.key"
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh2048.pem"

topology subnet
#Cette ligne définie le réseau du VPN
server 10.10.10.0 255.255.255.0
#Cette ligne définie l’adresse de votre serveur. Le logiciel va donc configure la carte virtuelle avec.
ifconfig 10.10.10.1 255.255.255.0

client-to-client
keepalive 10 120
cipher AES-128-CBC

persist-key
persist-tun

client-config-dir "C:\\Program Files\\OpenVPN\\config"

verb 3

route-delay 5
route-method exe
#Cette ligne indique que l’ensemble du flux internet passe par le serveur.
#A utiliser dans le cas où on souhaite que le client utilise la connexion internet du serveur.
;push "redirect-gateway def1 bypass-dhcp"

#Cette ligne indique la route qu’on envoi au poste client.
#Dans tous les cas, il faut l’utiliser sinon le client ne connaîtra pas la route qu’il doit prendre pour votre réseau côté serveur.
#Pas besoin de la passerelle, elle se règle toute seule.
push "route 192.168.x.0 255.255.255.0"

#Cette ligne renseigne une route à ajouter au serveur.
#Vous pouvez l’utiliser dans le cas du site à site pour indiquer au serveur la route vers le client.
;route 192.168.x.0 255.255.255.0

#Cette ligne indique le serveur DNS à remonter au client
#Par défaut désactivé, mais utilisable en cas de besoin.
;push "dhcp-option DNS 192.168.x.x"
;push "dhcp-option DNS 8.8.8.8"
;push "dhcp-option DNS 8.8.4.4"



Même manipulation pour le fichier client :
#Configuration CLIENT

#IP = Adresse de la pâte externe de la box (exemple : serveur.jambon.fr ou 88.45.56.12)
remote IP
client
port 1194

#Adapter celons conf serveur
proto udp4
;proto tcp4-client
dev tun

tls-client
tls-auth ta.key 1
remote-cert-tls server

#Ces lignes indique le chemin des certificats client.
ca ca.crt
cert NomClient.crt
key NomClient.key

cipher AES-128-CBC

persist-key
persist-tun

verb 3
mute 20




5. Ouverture de port
5.1 Pare-feu Windows
5.1.1 Par une interface graphique :
Suivez les images.
Pour autoriser le PING.






Pour OpenVPN






5.1.2 En ligne de commande
(Ne pas utiliser si vous avez effectué la manipulation en interface graphique)
Dans une invite de commande avec les droits administrateurs.
Les lignes ci-joint ont été testées sur Windows 10 et Windows Server 2016-2019.

Autoriser le PING :
netsh advfirewall firewall add rule name= "All ICMP V4" dir=in action=allow protocol=icmpv4


Ouverture du port pour OpenVPN :
netsh advfirewall firewall add rule name="OpenVPN" dir=in action=allow protocol=UDP localport=1194


Si besoin, commande pour supprimer la règle :
netsh advfirewall firewall delete rule name= "OpenVPN" protocol=UDP localport=1194"


Note : Changer UDP/TCP et le port celons la configuration que vous avez établie pour votre serveur.


5.2 NAT avec le routeur client
Plusieurs cas de figure sont envisageables. Routeur administré par un autre prestataire, box orange, sfr, etc…
Dans le nôtre on va utiliser un exemple avec une Freebox Mini4K, mais le principe est le même pour tous.
Vous devez faire du NAT et entre la pâte externe qui redirige vers votre serveur.
Donc dans notre exemple on va rediriger le flux qui arrive sur la pâte externe port 1194 UDP vers le port 1194 UDP du serveur interne.

Connectez-vous à l’interface


Suivez les images suivantes :



Validez et votre Natage est terminé. Le principe est similaire pour les autres box grands publics. Pour les professionnels type Sophos / Netasq rapportez-vous à la doc technique.

5.3 NAT avec Windows Serveur
Sur une configuration OpenVPN Serveur sur Windows server 2012-2016-2019, il est obligatoire de faire cette étape sinon vous ne pourrez pas router le réseau.
















Valider
Si vous travailler en RDP une coupure de la connexion peut être observé.
Relancer le serveur OpenVPN



6. Démarrer le serveur
Nous avons vu comment l’installer maintenant on va voir comment le démarrer, l’automatiser et surtout le débugger.
6.1 Démarrage manuel par interface :
Non recommandé si vous voulez que le serveur tourne en permanence. En cas de redémarrage le serveur ne se relance pas, mais pratique pour tester votre fichier de configuration.


6.2 Démarrage en automatique :
Recommandé pour une utilisation permanence du serveur VPN. Se relance seul après un redémarrage serveur.
Ouvrir les services Windows « WIN R » « services.msc »
Chercher « OpenVPNService »

Par défaut le service est en « Manuel », passer le en Automatique.

Démarrer le service.


6.3 Débugger
Dans « C:\Program Files\OpenVPN\log » vous avez les fichiers client et serveur qui contiennent le log de la connexion.
Exemple d’un fonctionnement correct du lancement serveur :

Exemple avec un bug que j’ai causé moi-même sur la commande proto

On voit la commande qui pose problème et la liste des variables qu’il comprend. Dans mon cas j’ai mis un 5 a la place du 4.



7. Poste client
7.1 Préparation sur le serveur
Préparation des éléments nécessaires pour le poste client sur le serveur.
Créez-vous un dossier VPN sur le bureau du serveur ou dans CMIE_Sources.
Créer un dossier par poste client dont vous avez généré le certificat.
Copier les éléments suivants dans le dossier « poste client » que vous avez créé :

C:\Program Files\OpenVPN\config\client.opvn
C:\Program Files\OpenVPN\easy-rsa\keys\ca.crt
C:\Program Files\OpenVPN\easy-rsa\keys\NomClient.crt
C:\Program Files\OpenVPN\easy-rsa\keys\NomClient.key
C:\Program Files\OpenVPN\easy-rsa\keys\ta.key


Je vous invite à renommer « client.ovpn » avec le « NomClient » que vous avez renseigné pour le certificat.
Vous devriez avoir quelque chose comme ceci :

Éditer le fichier « ovpn » de la configuration client pour changer le nom de son Certificat et sa Key
#Ces lignes indiquent le chemin des certificats client.
Exemple

ca "C:\Program Files\OpenVPN\config\ca.crt"
cert "C:\Program Files\OpenVPN\config\poste1.crt"
key "C:\Program Files\OpenVPN\config\poste1.key"


Fais la même chose pour l’ensemble des clients que vous avez créée.

Il ne vous reste plus cas installer OpenVPN sur le poste client et de déposer la configuration dans « C:\Program Files\OpenVPN\config »
Ce qui devrez donner :

Il ne vous reste cas tester.

8. Test
8.1 Vérification de la table de routage

8.2 Vérification du ping
Vers un serveur ou un poste interne autre que le serveur.





9. Annexe
9.1 OpenVPN en mode UDP ou TCP ?

OpenVPN est un protocole extrêmement versatile et flexible. Il a été conçu pour de multiples usages avec le maximum d'ouverture.

La configuration habituelle d'OpenVPN utilise le protocole UDP et le port "standard" 1194 assigné par l'IANA. Toutefois rien n'empêche de configurer OpenVPN pour fonctionner sur n'importe quel autre port et même utiliser le protocole TCP si nécessaire.

Quels sont donc les avantages et inconvénients de chaque implémentation ?

La configuration "classique" (UDP, port 1194) a l'avantage d'être un peu plus rapide du fait de l'utilisation de UDP. Le revers de la médaille (il y en a toujours un quelque part) c'est que UDP n'assure aucune correction d'erreur. Donc, dans certaines situations, si votre connexion internet n'est pas irréprochable, ceci peut entraîner une plus grande répétition de paquets, donc une baisse notable de la bande passante apparente.

Pourquoi donc ne pas utiliser TCP ? Et bien, pour les mêmes raisons ... à l'envers !

TCP présente l'avantage de gérer nativement les corrections d'erreurs, mais présente de ce fait un "overhead" plus important (plus d'information sont consacrées à la vérification de l'intégrité et donc moins aux données "utiles"). De plus, encapsuler TCP dans TCP aboutit parfois à des résultats assez ... étranges, sans parler d'une demande en CPU plus importante, que ce soit sur votre PC ou sur nos plateformes d'accès (qui sont largement surdimensionnées, rassurez-vous).

Pourquoi proposer une implémentation TCP alors ? Quels en sont les avantages ?

Les avantages sont de deux types :
- Plus de souplesse dans le cas de connexions un peu "limite"

- La possibilité de "masquer" le tunnel OpenVPN sous les traits d'un trafic "habituel", par exemple une session sécurisée HTTPS, comme si vous consultiez un site sécurisé avec votre navigateur.

Dans ce dernier cas, l'utilisation conjointe de TCP et du port 443 (qui est le port standard pour le protocole HTTPS) rend le tunnel OpenVPN pratiquement indétectable. Certaines vulnérabilités sont toutefois associées à ce type d'approche et la configuration doit être particulièrement étudiée pour y remédier. Ceci permet par exemple à certains de nos clients de communiquer sans problèmes depuis la Chine ...

En résumé, utilisez la configuration UDP dans la majorité des cas, sauf si la qualité de votre connexion internet ou les restrictions imposées par votre FAI rendent son utilisation impraticable ou impossible. Dans ce cas, la configuration TCP devient votre meilleur choix.

9.2 Commandes options :
proto option: [proto-uninitialized] [udp] [tcp-server] [tcp-client] [tcp] [udp4] [tcp4-server] [tcp4-client] [tcp4] [udp6] [tcp6-server] [tcp6-client] [tcp6]

9.3 Bug connu

9.3.1Windows serveur 2012 R2

Problème :
L’adresse définie dans « ifconfig » ne remonte pas sur ma carte réseau virtuelle. Celle-ci reste sur une adresse défaut comme 169……

Observation complémentaire du problème :
Si on désactive la ligne ifconfig la carte ne prend toujours d’adresse IP.
Si on fixe une adresse IP sur la carte virtuelle manuellement celle-ci revient en DHCP avec une IP en 169…

Solution :
Pour résoudre ce problème, il vous faut :
Une version 2.3.6 d’OpenVPN.
Désactiver la ligne ifconfig
Fixer l’adresse « 10.10.10.1 masque 255.255.255.0 » sur la carte réseau virtuelle.
Démarrer votre serveur VPN.
Tester de le redémarrer plusieurs, voir redémarrer le serveur Windows.
Normalement votre problème est résolu.


com0


Commentaire - 0
Aucun commentaire


Poster un commentaire

Vous devez être connecté pour poster un commentaire.
Cliquez ici pour vous connecter.