Wintun driver что это

Обновлено: 16.05.2024

Wintun is a very simple and minimal TUN driver for the Windows kernel, which provides userspace programs with a simple network adapter for reading and writing packets. It is akin to Linux's /dev/net/tun and BSD's /dev/tun . Originally designed for use in WireGuard, Wintun is meant to be generally useful for a wide variety of layer 3 networking protocols and experiments. The driver is open source, so anybody can inspect and build it. Due to Microsoft's driver signing requirements, we provide precompiled and signed versions that may be distributed with your software. The goal of the project is to be as simple as possible, opting to do things in the most pure and straight-forward way provided by NDIS.

Usage & Installation

The documentation has extensive information on installing and integrating Wintun into your application, alongside the API reference. Integration is meant to be easy and intuitive, simply requiring the inclusion of a single wintun.dll file.

Source

A small, cute, furry rabbit brings a window into a tunnel.

The source code is provided under the GPL 2.0 and is available via git:

Download

Wintun is distributed as a simple ZIP archive containing signed DLLs for AMD64, X86, ARM64, and ARM32, along with the wintun.h header file for applications. Note that the below signed DLLs are the only supported way of distributing Wintun. The prebuilt signed DLLs are released under a more permissive license than GPL 2.0, included in the ZIP archive.

  • Download Wintun 0.14
    SHA2-256: 6813a1b603734fd6f42ea7706dc23afac4b53b6ea90b3b0996dc07db29b55745

Contribution & Contact

You may email the WireGuard mailing list with patches sent via git-send-email and formatted with git-format-patch . To report security vulnerabilities, please email security at wireguard dot com.

OpenVPN 2.5.1 сервер на Windows

OpenVPN

Вчера обнаружил, что на мой домашний сервер пытаются подобрать пароль к RDP. Спросил наших безопасников с работы, да, порт сканировали, но пароль подбирают не они. Надо что-то делать с этим, и я даже знаю что.

Ударим шифрованием по злобным брутфорсерам! Ставим OpenVPN 2.5.1 сервер на Windows Server 2016.

  • Встретимся с Easy-RSA 3.
  • Решим неочевидный баг с директорией временных файлов.
  • Освоим OpenVPN Connect, в том числе на Android.
  • Запилим адаптер OpenVPN WinTun.

Установка OpenVPN Server

Скачиваем дистрибутив для установки OpenVPN:

vpn

Доступна версия OpenVPN 2.5.1. Скачиваю Windows 64-bit MSI installer, файл OpenVPN-2.5.1-I601-amd64.msi.

vpn

Запускаем инсталлятор OpenVPN.

vpn

Открывается мастер установки, предлагают выбрать тип установки, естественно, нажимаем Customize. Установка по умолчанию нас не устроит.

vpn

OpenVPN GUI отключаю. Мне нужно, чтобы OpenVPN на сервере работал автоматически.

vpn

А OpenVPN Service, наоборот, включаю. OpenVPN у меня будет работать как служба Windows.

Документацию и примеры конфигурации оставляю. Конфигурационные примеры будут использоваться в качестве шаблонов.

vpn

Начиная с версии OpenVPN 2.5 появилась поддержка драйвера WinTUN от разработчиков WireGuard. Говорят, что работает быстрее чем TAP-Windows6. Поэтому драйвер TAP-Windows6 отключаю и включаю Wintun.

ПРИМЕЧАНИЕ: для включения драйвера Wintun необходимо в файле конфигурации сервера включить параметр:

vpn

Утилиты OpenSSL EasyRSA 3 Certificate Management Scripts включаю. Install Now.

vpn

Начинается процесс установки OpenVPN.

openvpn

Установка успешно завершена. Close.

vpn

Установка выполнена в директорию C:\Program Files\OpenVPN.

vpn

После установки у нас появляется новый сетевой адаптер Wintun Userspace Tunnel.

vpn

Создание ключей и сертификатов

Запускаем командную строку под администратором и переходим в рабочую директорию C:\Program Files\OpenVPN\easy-rsa.

В этой папке есть всё необходимое для генерации сертификатов.

vpn

Для работы в Windows нас интересует файл EasyRSA-Start.bat.

vpn

vpn

Запускается оболочка EasyRSA Shell.

Инициализируем новую конфигурацию:

vpn

Появляется новая директория C:\Program Files\OpenVPN\easy-rsa\pki.

vpn

Генерируем ключ и сертификат центра сертификации. Внимание, сейчас мы наступим на грабли, исправим ошибку и снова вернёмся к генерации файлов для центра сертификации.

Нас попросят для раза ввести пароль. Придумываем и вводим.

vpn

Extra arguments given.
genrsa: Use -help for summary.

Easy-RSA error:

Failed create CA private key

Исправим этот баг. Мне не совсем понятно, почему нельзя было всё сделать сразу по-человечески, чтобы люди не встречали эту ошибку. Копируем файл C:\Program Files\OpenVPN\easy-rsa\vars.example, называем копию C:\Program Files\OpenVPN\easy-rsa\vars.

vpn

Редактируем C:\Program Files\OpenVPN\easy-rsa\vars. В данном файле можно много чего прописать, но я не буду на этом сейчас останавливаться подробно. Находим строку:

И заменяем её на:

vpn

Собственно, ошибка и заключалась в том, что оболочка по какой-то причине не могла создать временный файл.

Генерируем ключ и сертификат центра сертификации:

Нас попросят для раза ввести пароль. Придумываем и вводим. После нас просят указать Common Name для центра сертификации, указываю "internet-lab.ru".

vpn

Операция проходит успешно.

vpn

Создаётся сертификат центра сертификации:

Сертификат создаётся на 10 лет, это значение можно переопределить в файле vars.

vpn

И ключ центра сертификации:

Ключ секретный, никому не показываем. он будет храниться на сервере.

Генерируем ключ и запрос на сертификат сервера, назовём сервер именем "server":

Нас просят указать Common Name для сервера, указываю "internet-lab.ru".

vpn

Операция проходит успешно.

vpn

Создаётся запрос на сертификат сервера:

  • C:\Program Files\OpenVPN\easy-rsa\pki\reqs\server.req

vpn

  • C:\Program Files\OpenVPN\easy-rsa\pki\private\server.key

Ключ секретный, никому не показываем. он будет храниться на сервере.

Для создания сертификата сервера нужно подписать запрос на сертификат:

Для подписи нужно ввести слово "yes" и указать пароль от центра сертификации.

vpn

Создаётся сертификат сервера:

  • C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt

Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars.

vpn

Теперь создадим клиентский сертификат. По хорошему клиентский ключ следует запаролить, чтобы исключить утечку при передаче. Для этого есть несколько способов.

Первый

На клиентской машине генерируем запрос на сертификат клиента и ключ без пароля:

Второй

а машине с CA генерируем сертификат клиента и ключ с паролем:

Третий

Но поскольку я генерирую ключ сам для себя, то воспользуюсь небезопасным третьим способом.

Генерируем ключ и запрос на сертификат клиента, назовём клиента именем "client":

Нас просят указать Common Name для клиента, указываю "v.pupkin".

vpn

Операция проходит успешно.

vpn

Создаётся запрос на сертификат клиента:

  • C:\Program Files\OpenVPN\easy-rsa\pki\reqs\client.req

vpn

  • C:\Program Files\OpenVPN\easy-rsa\pki\private\client.key

Для создания сертификата клиента нужно подписать запрос на сертификат:

Для подписи нужно ввести слово "yes" и указать пароль от центра сертификации.

vpn

Создаётся сертификат клиента:

  • C:\Program Files\OpenVPN\easy-rsa\pki\issued\client.crt

Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars.

vpn

Генерируем ключ Диффи-Хеллмана:

vpn

Операция займёт некоторое время.

vpn

vpn

Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:

  • Сканирование прослушиваемых VPN-сервером портов
  • Инициация SSL/TLS-соединения несанкционированной машиной на раннем этапе
  • DoS-атаки и флуд на порты OpenVPN
  • Переполнение буфера SSL/TLS

При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth. Для этого запускаем командную строку под администратором и выполняем:

vpn

В папке C:\Program Files\OpenVPN\bin создаётся файл ta.key.

vpn

Переносим его в папку C:\Program Files\OpenVPN\easy-rsa\pki.

vpn

Минимальный набор сертификатов сгенерирован.

Настройка OpenVPN сервера

Создадим конфигурационный файл сервера C:\Program Files\OpenVPN\config-auto\server.ovpn:

vpn

Открываем блокнотом и редактируем:

Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:

У меня здесь указаны пути к ключам и сертификатам, используется порт TCP 1194. Параметр duplicate-cn позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях. Я использую для того, чтобы с помощью одного и того же сертификата подключиться к OpenVPN серверу и с клиентской машины и со смартфона. Параметр windows-driver wintun подключает использование драйвера WinTun. И что им стоило этот параметр указать в примере конфигурации? Остальное по умолчанию.

ВНИМАНИЕ: в конфигурационных файлах допускается в путях использование прямого слеша:

ca "C:/Program Files/OpenVPN/easy-rsa/pki/ca.crt"

или двойного обратного слеша:

ca "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ca.crt"

Запуск OpenVPN сервера

Переходим к службам:

vpn

Находим службу OpenVPNService.

vpn

Настраиваем на автоматический запуск при загрузке сервера.

vpn

Запускаем (перезапускаем) службу.

Согласно настройкам сервера в папке C:\Program Files\OpenVPN\log должны появиться логи. Это один из инструментов администратора OpenVPN сервера.

vpn

Активировался сетевой адаптер OpenVPN Wintun.

vpn

Согласно настройкам сервера IP адрес 10.8.0.1.

vpn

Проверяем поднялся ли порт tcp 1194:

Порт должен прослушиваться.

vpn

Настройка firewall

Теперь нужно настроить firewall. Открываем Windows Defender Firewall with Advanced Security.

vpn

Переходим в Inbound Rules.

vpn

Создаём правило — New Rule.

vpn

Тип правила — Port. Next.

vpn

Протоколы и порты — TCP 1194. Как в настройках сервера. Next.

vpn

Действия — Allow the connection. Next.

vpn

Для всех сетей. Next.

vpn

Указываем название правила — OpenVPN. Next.

Правило создано, теперь firewall не блокирует входящие TCP соединения на 1194 порту.

Настройка OpenVPN клиента на ПК Windows

На компьютере клиента устанавливаем OpenVPN Connect.

vpn

Я скачиваю версию для Windows.

vpn

vpn

vpn

Принимаем лицензионное соглашение. Next.

vpn

vpn

OpenVPN Connect устанавливается.

vpn

Установка завершена. Finish.

vpn

На рабочем столе появляется иконка OpenVPN Connect.

vpn

Здесь нужно указать протокол, порт адрес сервера и прочие параметры. Пути к ключам и сертификатам относительные.

Создаём директорию, например, C:\openvpn. Копируем в неё с сервера файлы:

WireGuard заработал в режиме ядра WindowsNT


Разработчик WireGuard VPN Джейсон Доненфельд выпустил новую версию WireGuardNT, которая работает в режиме ядра WindowsNT (7, 8.1, 10, 11, 2012, 2016, 2019, 2022). Перенос всего кода в ядро значительно повышает пропускную способность туннеля практически на любых соединениях, особенно по WiFi.

Примечание. Чтобы запустить свою программу на уровне ядра Windows и не иметь проблем с Microsoft SmartScreen, разработчику требуется приобрести сертификат подписи кода типа EV, который стоит намного дороже, чем обычный сертификат подписи кода — примерно $2000 за трёхлетний. Хорошо, что у опенсорсного некоммерческого проекта WireGuard есть спонсоры.

WireGuard — свободный и открытый VPN, который превосходит IPsec и OpenVPN за счёт трёх основных факторов: высокая производительность, лучшая безопасность и простота в использовании.

  • современные криптографические алгоритмы: шифр Curve25519 для ECDH на эллиптических кривых, ChaCha20 для симметричного шифрования с аутентификацией Poly1305 и использованием AEAD-режима блочного шифрования из RFC7539, BLAKE2s для быстрого безопасного хэширования (RFC7693), SipHash для ключей в хэш-таблицах, HKDF для получения ключей, как описано в RFC5869, и др.;
  • компактный читаемый код, который проще исследовать на уязвимости;
  • высокая производительность;
  • чёткая и проработанная спецификация.



Сравнение производительности различных VPN. Источник: WireGuard



Сравнение производительности WireGuard и OpenVPN. Источник: WireGuard

В январе 2020 года после нескольких лет разработки Линус Торвальдс принял WireGuard в основную ветку ядра Linux 5.6. Линус высоко оценил программу с точки зрения качества кода.



Отзыв Линуса можно заносить в резюме

В обычной версии WireGuard для Windows используется реализация WireGuard на Go в userspace. Она привязывается к виртуальному сетевому устройству, большая часть которого также находится в userspace. Джейсон Доненфельд написал собственный виртуальный сетевой интерфейс Wintun, поскольку существующая реализация tap-windows от OpenVPN оставляет желать лучшего.

Wintun определённо лучше tap-windows: даже в проекте OpenVPN такая замена увеличивает пропускную способность туннеля примерно в полтора раза (с 414 до 737 Мбит/с в клиенте OpenVPN 2, с 652 до 904 в OpenVPN 3, в обоих случаях на 7-гигабитном канале). Но при этом мы всё равно не избавляемся от необходимости постоянных контекстных переключений из пространства ядра (реальный сетевой стек) в пространство пользователя (OpenVPN и wireguard-go).

Поэтому для максимальной производительности VPN желательно перенести в ядро весь стек, включая виртуальный адаптер, криптографию и всё остальное. В Linux для этого создаётся модуль DLKM (Dynamically-Loadable Kernel Module), а в Windows — драйвер устройства в ядре. Кстати, проект WireGuardNT начинался именно как прямой порт WireGuard для ядра Linux.


Архитектура ядра WindowsNT

По словам Доненфельда, кодовая база хорошо срослась с нативным кодом ядра и программными интерфейсами NDIS для сетевых драйверов. В итоге получилась «глубоко интегрированная и высокопроизводительная реализация WireGuard для ядра NT, использующая весь спектр возможностей ядра NT и NDIS».

Устранив переключения контекста, удалось значительно повысить производительность. По независимым тестам Ars Technica, на одном и том же оборудовании WireGuardNT даёт на 10−25% больше пропускной способности, чем wireguard-go и Wintun. Другие тестеры говорят даже о росте производительности в несколько раз (с 95 до 600 Мбит/с по WiFi). Сам Джейсон на тестовой Windows-машине зафиксировал производительность 7,5 Гбит/с по VPN.

Каждый может проверить разницу на своём канале. Для этого нужно установить WireGuardNT (последняя версия 0.4.5) и вручную добавить ключ и значение в реестр: regedit от администратора, HKLM → Software , создать ключ WireGuard , а внутри DWORD-значение ExperimentalKernelDriver .


Если значение ExperimentalKernelDriver установлено в DWORD(1) , туннели будут использовать новый код WireGuardNT в ядре, а DWORD(0) запускает старый код wireguard-go/wintun. В будущем код ядра включат по умолчанию.

Вообще, это интересный пример того, как программист-любитель пишет более качественный код для ядра Windows, чем профессионалы из Microsoft. Интересно, сколько человек работает над функцией Always On VPN в Windows Server?

Особенности установки OpenVPN GUI под Windows 7

На днях понадобилось мне настроить клиентскую часть OpenVPN на компьютере с установленной Windows 7.
Я предвидел проблемы и потому сразу погуглил на эту тему. Нашел несколько советов, суть которых сводилась к тому, что отличий от установки на Vista мало, и главное из них — в свойствах инсталятора предварительно установить режим совместимости с Vista, а также запуск от имени администратора.

Сразу оговорюсь — в силу своей ленности использую вариант OpenVPN GUI, который мне очень полюбился по практике использования на Windows XP/2003.

Piccy.info - Free Image Hosting

Сделал предлагаемые действия и начал установку. На первый взгляд всё нормально, но не работает :(. Полез разбираться — Windows 7 не может запустить драйвер виртуальной сетевой карты TAP/TUN v8 необходимый для работы OpenVPN

А вот про это Гугль уже молчал. Путем нехитрых логических построений пришел к решению накатать поверх установки OpenVPN GUI оригинальную версию OpenVPN. Потому как поглядев на содержимое инсталятора OpenVPN увидел что там идет более новая версия этого драйвера v9.

Piccy.info - Free Image Hosting

Собственно на этом и сказочке конец — после установки OpenVPN поверх OpenVPN GUI все завелось с пол-оборота и радует стабильной работой и по сей день.

Читайте также: