OVPN-DCO-Win steht für "OpenVPN-Datenkanal-Offload für Windows". Es handelt sich um einen modernen Windows -Treiber, der als virtueller Netzwerkadapter fungiert und die erforderliche Funktionen implementiert, um den OpenVPN -Datenkanal zu verarbeiten. Bei der Verwendung von OVPN-DCO-Win sendet die OpenVPN-Software den Datenverkehr zwischen dem Benutzer und dem Kernelraum (zur Verschlüsselung, Entschlüsselung und Routing) nicht, aber die Operationen bei der Nutzlast finden in Windows Kernel statt. Der Treiber wird mit modernen Frameworks - WDF und NetAdaptercx - entwickelt. Aus diesem Grund ist der Code leichter zu lesen und zu verwalten, den Vergleich mit vorhandenen NDIS -Miniport -Treibern. In der Geschwindigkeit führt der neue Treiber einen deutlich besseren Vergleich mit Tap-Windows6 durch. Daher sollte er den Engpass beseitigen, der die Leistung von OpenVPN unter Windows beeinträchtigt.
OVPN-DCO-Win ist ein Standardtreiber von OpenVPN 2.6.
Sie können einfach die neueste OpenVPN 2.6 -Version installieren, die einen signierten Treiber enthält.
Alternativ können Sie Veröffentlichungen von GitHub erhalten.
Sie können das DevCon -Tool (als Teil von WDK erhältlich) verwenden, um den Treiber zu installieren:
devcon install ovpn-dco.inf ovpn-dco
Das Projekt umfasst das OVPN-DCO-CLI-Befehlszeilen-Tool, das als Beispiel für Entwicklungstestbett, Referenzkunde und API-Nutzungsbeispiel funktioniert. Damit können Sie den VPN-Tunnel zwischen zwei Windows-Hosts oder zwischen Windows und Linux-Host mit dem OVPN-DCO-Linux-Projekt einrichten.
So einrichten Windows <--> Windows-Tunnel beim ersten Host-Lauf:
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
wobei "0.0.0.0 1194" lokale IP -Adresse/Port an den Socket "192.168.100.200 1194" Remoteadresse/Port, "10.8.0.2" ist, ist ein lokales VPN -IP.
Auf dem zweiten Windows -Host -Lauf:
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
Beachten Sie, dass Remote IP, VPN IP und Schlüsselrichtung (letzte 0/1 Ziffer) unterschiedlich sind.
Um den Tunnel zwischen Windows und Linux einzurichten, laufen Sie auf dem zweiten (Linux) Host:
# 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
wobei 192.168.100.150 eine Linux -Host -IP -Adresse ist, 192.168.100.100 ist eine Windows -Host -IP -Adresse.
Nachdem Sie Tunnel eingerichtet haben, sollten Sie in der Lage sein, Hosts (10.8.0.1 < -> 10.8.0.1) zu pingen und iPerf -Tests (iperf3 -s 10.8.0.2 auf dem ersten Host, Iperf3 -c 10.8.0.2, durchzuführen, am zweiten ) über VPN -Tunnel.
Bitte beachten Sie, dass die Verwendung von OVPN-DCO-CLI-Tool in der Produktion eine sehr schlechte Idee ist, da es keine wichtigen Verhandlungen durchführt und stattdessen einen statischen Schlüssel (Data64.Key) verwendet.
Um den Treiber zu verwenden, muss der Client das Dateihandle erhalten, indem Sie CreateDFile aufrufen. Man kann entweder eine symbolische Link oder die Geräteschnittstelle verwenden, um den Dateipfad zu erhalten. Hier ist ein Beispiel aus dem OVPN-DCO-Tool (siehe unten):
HANDLE h = CreateFileA("\\.\ovpn-dco", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
Nach dem Erhalten des Handels verwendet Client die GeräteIokontrol- und Lese-/Schreibfile -Anrufe, um die Verbindung einzurichten und Steuerpakete zu senden/empfangen. In der Liste der IOCTL-Befehle und der OVPN-DCO-Cli.cpp finden Sie die Liste der IOCTL-Befehle, um diese zu verwenden.
Zunächst muss der Client Peer mit OVPN_IOCTL_NEW_PEER -Befehl initialisieren. Der Client übergibt die OVPN_New_Peer -Struktur, die eine lokale/Remote -IP -Adresse/den IP (entweder IPv4 oder IPv6) und das Transportprotokoll (TCP oder UDP) enthält.
Nach dem Initialisieren von Peer bestanden der Client-Cipher-Algorithmus (unterstützt sind "None" und "Aes-GCM"), Crypto-Tasten und Peer-ID als Teil der OVPN_Crypto_Data-Struktur unter Verwendung von OVPN_IOCTL_NEW_KEY-Befehl. Die Beschreibung von OpenVPN Crypto liegt außerhalb des Rahmens dieses Dokuments.
Nach dem Einrichten von Crypto kann der Client Keepalive -Parameter (ovpn_set_peer struct) für die Sitzung über OVPN_IOCTL_SET_PEER -Befehl festlegen. Keepalive Intervall definiert, wie oft das spezielle Keepalive -Paket ohne ausgehende Datenverkehr gesendet wird. Keepalive Timeout definiert, wann Benutzerspace (durch Abschluss der Leseanforderung mit einem Fehler) in Mangel eines eingehenden Datenverkehrs benachrichtigt werden soll.
Um die VPN -Sitzung zu starten, sendet der Client den Befehl ovpn_ioctl_start_vpn. Dieser Treiber signalisiert den Netzwerkadapter.
Nach dem Start der VPN -Sitzung richtet Client Netzwerkadapter (IP -Adresse, NetMask, Gateway) und Routing ein.
Um Steuerkanalpakete zu senden und zu empfangen, verwendet der Client Lese-/Writefile -Anrufe. Es wird empfohlen, überlappte IO zu verwenden, indem Sie File_flag_overlapped zum Erstellen von Datei und überlappende Struktur zum Lese-/Schreibfile -Anrufen übergeben. OVPN-DCO-CLI verwendet ASIO, das diese Details auf niedriger Ebene abstrahiert.
Der OVPN-DCO-Win-Treiber wird standardmäßig ab 2.6 veröffentlicht.
OpenVPN3 unterstützt auch OVPN-DCO-Win in der neuesten Master-Filiale.
Die Protokollierung erfolgt über die Tracelogging -API, die auf ETW basiert. Protokolle auf einer Zielmaschine zu sehen:
traceview.exe
als Administrator aus4970F9cf-2c0c-4f11-b1cc-e3a1e9958833
> OKProtokolle zur Analyse sammeln:
wpr -start ovpn-dco-win.wprp
ausführen (WPRP-Datei befindet sich im Treiberquellenbaum)wpr -stop ovpn-dco-win.etl
aus Die ETL -Datei könnte beispielsweise von Windows Performance Analyzer ( wpa.exe
) geöffnet werden.
Um Protokolle in angehängter Debbuger (Windbg) anzuzeigen, verwenden Sie tracelog.exe
in der Administrator -Eingabeaufforderung:
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
Wenn Sie Startprobleme haben, möchten Sie möglicherweise die Autologen -Sitzung aktivieren. Führen Sie ovpn-dco-autologger.reg
Datei aus, mit der neccessary Registrierungsschlüssel erstellt und dann neu gestartet wird.
Treiberprotokolle werden in %SystemRoot%System32LogFilesWMIovpn-dco.etl
gespeichert.
Freisetzungen von OVPN-DCO-Win sind reproduzierbar, was bedeutet, dass Sie, wenn Sie dieselbe Build-Umgebung verwenden, genau dieselben OVPN-DCO.Sys-Binärer erhalten sollten. Auf diese Weise können Sie überprüfen, ob ein in binärer Form freigegebener Treiber tatsächlich aus dem Quellcode in diesem Repository zusammengestellt wird. Dies ist nützlich, da die Anforderungen an die Treibersignierung von Microsoft es schwierig machen, selbstverbundene Fahrer auszuführen.
Veröffentlichte Treiber sind mit Windows 11 EWDK (Enterprise Windows Triver Kit) erstellt. Trotz des Namens funktioniert es auch unter Windows 10. Sie können es hier herunterladen: https://docs.microsoft.com/en-us/windows-hardware/download-the-wdk
Wenn Sie eine ovpn-dco.sys-Datei erhalten haben, können Sie sie wie folgt überprüfen:
signtool remove /s ovpn-dco.sys
LaunchBuildEnv.cmd
.msbuild /p:platform=<arch> /p:configuration=release /p:signmode=off ovpn-dco-win.vcxproj /t:Build
Where <arch>
ist Win32
, x64
, ARM
oder ARM64
.<arch>/Release/ovpn-dco.sys
und die Datei aus Schritt 1 den gleichen SHA256-Hash haben.Wenden Sie sich an Lev Stipakov [email protected] (Lev__ auf #openvpn-devel)