OVPN-DCO-WIN signifie "OpenVPN Data Channel Opload pour Windows". Il s'agit d'un pilote Windows moderne, qui fonctionne comme un adaptateur réseau virtuel et implémente les fonctionnalités requises pour gérer le canal de données OpenVPN. Lorsque vous utilisez OVPN-DCO-win, le logiciel OpenVPN n'envoie pas de trafic de données entre l'espace utilisateur et le noyau (pour le cryptage, le décryptage et le routage), mais les opérations sur la charge utile ont lieu dans le noyau Windows. Le pilote est développé à l'aide de frameworks modernes - WDF et NetAdapterCX. Pour cette raison, le code est plus facile à lire et à maintenir la comparaison avec les pilotes Miniport NDIS existants. En termes de vitesse, le nouveau pilote effectue une comparaison nettement meilleure avec Tap-Windows6, il devrait donc éliminer le goulot d'étranglement qui entrave les performances d'OpenVPN sur Windows.
OVPN-DCO-WIN est un pilote par défaut à partir d'OpenVPN 2.6.
Vous pouvez simplement installer la dernière version OpenVPN 2.6, qui comprend le pilote signé.
Vous pouvez également obtenir des sorties de GitHub.
Vous pouvez utiliser DevCon Tool (disponible dans le cadre de WDK) pour installer le pilote:
devcon install ovpn-dco.inf ovpn-dco
Le projet comprend l'outil de ligne de commande OVPN-DCO-CLI, qui fonctionne comme le lit de test de développement, le client de référence et l'exemple d'utilisation de l'API. Avec cela, vous pouvez configurer le tunnel VPN entre deux hôtes Windows ou entre Windows et Linux Host à l'aide de l'outil ./OVPN-CLI du projet OVPN-DCO Linux.
Pour configurer Windows <-> Tunnel Windows, lors de la première exécution de l'hôte:
ovpn-dco-cli.exe udp i4 0.0.0.0 1194 192.168.100.200 1194 10.8.0.2 255.255.255.0 10.8.0.1 data64.key 0
Lorsque "0.0.0.0 1194" Adresse IP locale / port pour lier la prise, "192.168.100.200 1194" Adresse / port distante, "10.8.0.2" est un IP VPN local.
Sur la deuxième exécution de l'hôte Windows:
ovpn-dco-cli.exe udp i4 0.0.0.0 1194 192.168.100.100 1194 10.8.0.1 255.255.255.0 10.8.0.1 data64.key 1
Notez que l'IP distant, la direction IP VPN et la clé (dernier chiffre 0/1) sont différentes.
Pour configurer le tunnel entre Windows et Linux, exécutez le deuxième hôte (Linux):
# ip link add dev ovpn0 type ovpn-dco
# ip link set ovpn0 up
# ip link set mtu 1428 dev ovpn0
# ip addr add dev ovpn0 10.8.0.1/24
# tests/ovpn-cli ovpn0 new_peer 1194 0 192.168.100.100 1194 10.8.0.2
# tests/ovpn-cli ovpn0 new_key 0 aes 1 tests/data64.key
Lorsque 192.168.100.150 est une adresse IP hôte Linux, 192.168.100.100 est une adresse IP hôte Windows.
Après avoir établi un tunnel, vous devriez être en mesure de cingler des hôtes (10.8.0.1 <-> 10.8.0.1) et d'exécuter des tests IPERF (IPERF3 -S 10.8.0.2 sur le premier hôte, IPERF3 -C 10.8.0.2 sur le deuxième ) via le tunnel VPN.
Veuillez noter que l'utilisation de l'outil OVPN-DCO-CLI en production est une très mauvaise idée, car il ne fait aucune négociation de clé et n'utilise pas une clé statique (data64.key) à la place.
Pour utiliser le pilote, le client doit obtenir la poignée du fichier en appelant CreateFile. On peut soit utiliser une interface de liaison symbolique ou de périphérique pour obtenir le chemin du fichier. Voici l'exemple de l'outil OVPN-DCO (voir ci-dessous):
HANDLE h = CreateFileA("\\.\ovpn-dco", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
Après avoir obtenu la poignée, le client utilise des appels de dispositiveiocontrol et de lecture / écriture pour configurer la connexion et envoyer / recevoir des paquets de contrôle. Voir uapi.h pour la liste des commandes IOCTL et OVPN-DCO-CLI.CPP sur la façon de les utiliser.
Tout d'abord, le client doit initialiser les pairs avec OVPN_IOCTL_NEW_PEER Commande. Le client passe la structure OVPN_NEW_PER, qui contient une adresse IP locale / distante (Port IPv4 ou IPv6) et un protocole de transport (TCP ou UDP).
Après avoir initialisé le pair, le client a passé un algorithme de chiffrement (pris en charge ne sont "Aucun" et "AES-GCM"), des clés crypto et un homologue dans le cadre de la structure OVPN_CRYPTO_DATA à l'aide de la commande ovpn_ioctl_new_key. La description de l'OpenVPN crypto dépasse le cadre de ce document.
Après la configuration de Crypto, le client peut définir des paramètres Keepalive (OVPN_SET_PER STRUCT) pour la session via OVPN_IOCTL_SET_PEER Commande. L'intervalle Keepalive définit la fréquence à laquelle envoyer un paquet Keepalive spécial en l'absence de trafic de données sortant. Keepalive Timeout définit quand informer l'espace utilisateur (en terminant la demande de lecture avec une erreur) en l'absence de trafic de données entrant.
Pour démarrer la session VPN, le client envoie OVPN_IOCTL_START_VPN Commande. Ce pilote signale pour démarrer l'adaptateur réseau.
Après avoir démarré la session VPN, le client configure l'adaptateur réseau (adresse IP, masque de net, passerelle) et le routage.
Pour envoyer et recevoir des paquets de canaux de contrôle, le client utilise des appels de lecture / écriture. Il est recommandé d'utiliser IO chevauché en passant File_FLAG_Overlapage sur CreateFile Call et Structure chevauchée pour lire / écrire des appels. OVPN-DCO-CLI utilise ASIO, qui résume ces détails de bas niveau.
Le pilote OVPN-DCO-WIN est utilisé par défaut OpenVPN à partir de la version 2.6.
OpenVPN3 prend également en charge OVPN-DCO-win dans la dernière branche maître.
La journalisation est effectuée via l'API de transfert, qui est basée sur ETW. Pour voir les journaux sur une machine cible:
traceview.exe
en tant qu'administrateur4970F9cf-2c0c-4f11-b1cc-e3a1e9958833
-> OKPour collecter des journaux pour l'analyse:
wpr -start ovpn-dco-win.wprp
(le fichier WPRP est dans l'arborescence de la source du pilote)wpr -stop ovpn-dco-win.etl
Le fichier ETL pourrait être ouvert, par exemple, par Windows Performance Analyzer ( wpa.exe
).
Pour voir les journaux dans Debbuger joint (WindBG), utilisez tracelog.exe
dans l'invite de commande Administrator:
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
Si vous rencontrez des problèmes de démarrage, vous voudrez peut-être activer la session Autologger. Exécutez ovpn-dco-autologger.reg
Fichier, qui créera des clés de registre NECCECSSARY, puis redémarrez.
Les journaux du pilote seront stockés dans %SystemRoot%System32LogFilesWMIovpn-dco.etl
.
Les versions de libération d'OVPN-DCO-win sont reproductibles, ce qui signifie que lorsque vous utilisez le même environnement de construction, vous devriez obtenir exactement le même binaire OVPN-DCO.SYS. De cette façon, vous pouvez vérifier qu'un pilote libéré sous forme binaire est en effet compilé à partir du code source de ce référentiel. Ceci est utile car les exigences de signature du pilote de Microsoft rendent difficile l'exécution de pilotes autonomes.
Les pilotes publiés sont construits avec Windows 11 EWDK (Enterprise Windows Driver Kit). Malgré le nom, cela fonctionne également sur Windows 10. Vous pouvez le télécharger ici: https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Si vous avez obtenu un fichier ovpn-dco.sys, vous pouvez le vérifier comme suit:
signtool remove /s ovpn-dco.sys
LaunchBuildEnv.cmd
.msbuild /p:platform=<arch> /p:configuration=release /p:signmode=off ovpn-dco-win.vcxproj /t:Build
où <arch>
est Win32
, x64
, ARM
ou ARM64
.<arch>/Release/ovpn-dco.sys
et le fichier de l'étape 1 ont le même hachage SHA256.Contactez Lev Stipakov [email protected] (LEV__ sur # OpenVPN-Devel)