OVPN-DCO-WIN adalah singkatan dari "OpenVPN Data Channel Offload untuk Windows". Ini adalah driver Windows modern, yang berfungsi sebagai adaptor jaringan virtual dan mengimplementasikan fungsionalitas yang diperlukan untuk menangani saluran data OpenVPN. Saat menggunakan OVPN-DCO-Win, perangkat lunak OpenVPN tidak mengirim lalu lintas data bolak-balik antara ruang pengguna dan kernel (untuk enkripsi, dekripsi dan perutean), tetapi operasi pada muatan dilakukan di kernel Windows. Driver sedang dikembangkan menggunakan kerangka kerja modern - WDF dan NetAdapterCX. Karena itu, kode lebih mudah dibaca dan mempertahankan perbandingan dengan driver miniport NDIS yang ada. Dari segi kecepatan driver baru melakukan perbandingan yang jauh lebih baik dengan tap-windows6, sehingga harus menghilangkan bottleneck yang menghambat kinerja OpenVPN pada Windows.
OVPN-DCO-WIN adalah driver default mulai dari OpenVPN 2.6.
Anda hanya dapat menginstal rilis OpenVPN 2.6 terbaru, yang termasuk driver yang ditandatangani.
Atau Anda bisa mendapatkan rilis dari GitHub.
Anda dapat menggunakan alat DevCon (tersedia sebagai bagian dari WDK) untuk menginstal driver:
devcon install ovpn-dco.inf ovpn-dco
Proyek ini mencakup alat baris perintah OVPN-DCO-CLI, yang berfungsi sebagai bed tes pengembangan, klien referensi dan contoh penggunaan API. Dengan itu Anda dapat mengatur terowongan VPN antara dua host Windows atau antara host Windows dan Linux menggunakan ./ovpn-cli Tool dari proyek Linux OVPN-DCO.
Untuk mengatur Windows <-> Windows Tunnel, pada Host First Run:
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
Di mana "0.0.0.0 1194" Alamat IP Lokal/Port untuk mengikat soket, "192.168.100.200 1194" Alamat/port jarak jauh, "10.8.0.2" adalah IP VPN lokal.
Pada run host Windows kedua:
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
Perhatikan bahwa IP Remote, IP VPN dan arah kunci (0/1 digit terakhir) berbeda.
Untuk mengatur terowongan antara Windows dan Linux, jalankan pada host kedua (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
Di mana 192.168.100.150 adalah alamat IP host Linux, 192.168.100.100 adalah alamat IP host Windows.
Setelah Anda mendirikan terowongan, Anda harus dapat melakukan ping host (10.8.0.1 <-> 10.8.0.1) dan menjalankan tes Iperf (Iperf3 -s 10.8.0.2 pada host pertama, Iperf3 -c 10.8.0.2 pada yang kedua ) melalui terowongan VPN.
Harap dicatat bahwa menggunakan alat OVPN-DCO-CLI dalam produksi adalah ide yang sangat buruk, karena tidak melakukan negosiasi kunci dan menggunakan kunci statis (data64.key) sebagai gantinya.
Untuk menggunakan driver, klien perlu mendapatkan pegangan file dengan menelepon createFile. Seseorang dapat menggunakan tautan simbolik atau antarmuka perangkat untuk mendapatkan jalur file. Berikut adalah contoh dari alat OVPN-DCO (lihat di bawah):
HANDLE h = CreateFileA("\\.\ovpn-dco", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
Setelah ditangani, klien menggunakan panggilan DeviceIoControl dan Baca/Writefile untuk mengatur koneksi dan mengirim/menerima paket kontrol. Lihat uapi.h untuk daftar perintah ioctl dan ovpn-dco-cli.cpp tentang cara menggunakannya.
Pertama, klien perlu menginisialisasi peer dengan perintah ovpn_ioctl_new_peer. Klien melewati struktur OVPN_NEW_PEER, yang berisi alamat/port IP lokal/jarak jauh (baik IPv4 atau IPv6) dan protokol transportasi (TCP atau UDP).
Setelah menginisialisasi peer, klien lulus algoritma cipher (didukung adalah "tidak ada" dan "AES-GCM"), kunci crypto dan peer-id sebagai bagian dari struktur OVPN_CRYPTO_DATA menggunakan perintah OVPN_iCTL_New_Key. Deskripsi OpenVPN Crypto berada di luar cakupan dokumen ini.
Setelah menyiapkan crypto, klien dapat mengatur parameter KeepAlive (ovpn_set_peer struct) untuk sesi melalui perintah ovpn_ioctl_set_peer. Keepalive Interval mendefinisikan seberapa sering untuk mengirim paket kiper -kigi khusus tanpa adanya lalu lintas data yang keluar. Keepalive Timeout mendefinisikan kapan harus memberi tahu Userspace (dengan menyelesaikan permintaan baca dengan kesalahan) tanpa adanya lalu lintas data yang masuk.
Untuk memulai sesi VPN, klien mengirimkan perintah OVPN_OOCTL_START_VPN. Ini menandakan driver untuk memulai adaptor jaringan.
Setelah memulai sesi VPN, klien mengatur adaptor jaringan (alamat IP, NetMask, gateway) dan routing.
Untuk mengirim dan menerima paket saluran kontrol, klien menggunakan panggilan baca/writefile. Disarankan untuk menggunakan IO yang tumpang tindih dengan melewati file_flag_overlapped ke createFile call dan struktur yang tumpang tindih untuk membaca/menulis panggilan. OVPN-DCO-CLI menggunakan ASIO, yang mengabstraksi detail tingkat rendah tersebut.
Driver OVPN-DCO-Win digunakan secara default OpenVPN mulai dari rilis 2.6.
OpenVPN3 juga mendukung OVPN-DCO-Win di cabang master terbaru.
Pencatatan dilakukan melalui API Tracelogging, yang didasarkan pada ETW. Untuk melihat log pada mesin target:
traceview.exe
sebagai administrator4970F9cf-2c0c-4f11-b1cc-e3a1e9958833
> OKUntuk mengumpulkan log untuk analisis:
wpr -start ovpn-dco-win.wprp
(file WPRP ada di pohon sumber driver)wpr -stop ovpn-dco-win.etl
File ETL dapat dibuka, misalnya, oleh Windows Performance Analyzer ( wpa.exe
).
Untuk melihat log di debbuger terlampir (windbg), gunakan tracelog.exe
dalam prompt perintah administrator:
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
Jika Anda mengalami masalah boot, Anda mungkin ingin mengaktifkan sesi autologger. Jalankan file ovpn-dco-autologger.reg
, yang akan membuat kunci registri neccessary, dan kemudian reboot.
Log driver akan disimpan di %SystemRoot%System32LogFilesWMIovpn-dco.etl
.
Rilis build OVPN-DCO-Win dapat direproduksi, artinya ketika Anda menggunakan lingkungan build yang sama, Anda harus mendapatkan biner OVPN-DCO.sys yang sama persis. Dengan begitu, Anda dapat memverifikasi bahwa driver yang dirilis dalam bentuk biner memang dikompilasi dari kode sumber di repositori ini. Ini berguna karena persyaratan penandatanganan driver Microsoft membuatnya sulit untuk menjalankan driver yang dikompilasi sendiri.
Driver yang dirilis dibangun dengan Windows 11 EWDK (Enterprise Windows Driver Kit). Terlepas dari namanya, ini juga berfungsi di Windows 10. Anda dapat mengunduhnya di sini: https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Jika Anda telah memperoleh file OVPN-DCO.SYS, Anda dapat memverifikasi sebagai berikut:
signtool remove /s ovpn-dco.sys
LaunchBuildEnv.cmd
.msbuild /p:platform=<arch> /p:configuration=release /p:signmode=off ovpn-dco-win.vcxproj /t:Build
di mana <arch>
adalah Win32
, x64
, ARM
atau ARM64
.<arch>/Release/ovpn-dco.sys
dan file dari langkah 1 memiliki hash sha256 yang sama.Hubungi Lev Stipakov [email protected] (Lev__ di #OpenVPN-Devel)