После двух с половиной лет с момента публикации ветки 2.5 подготовлен релиз OpenVPN 2.6.0, пакета для создания виртуальных частных сетей, позволяющего организовать шифрованное соединение между двумя клиентскими машинами или обеспечить работу централизованного VPN-сервера для одновременной работы нескольких клиентов. Код OpenVPN распространяется под лицензией GPLv2, готовые бинарные пакеты формируются для Debian, Ubuntu, CentOS, RHEL и Windows.
Основные новшества:
- Обеспечена поддержка неограниченного числа соединений.
- В состав включён модуль ядра ovpn-dco, позволяющий существенно ускорить производительность VPN. Ускорение достигается за счёт выноса всех операций шифрования, обработки пакетов и управления каналом связи на сторону ядра Linux, что позволяет избавиться от накладных расходов, связанных с переключением контекста, даёт возможность оптимизировать работу за счёт прямого обращения к внутренним API ядра и исключает медленную передачу данных между ядром и пространством пользователя (шифрование, расшифровка и маршрутизация выполняется модулем без отправки трафика в обработчик в пространстве пользователя).
В проведённых тестах по сравнению с конфигурацией на основе интерфейса tun применение модуля на стороне клиента и сервера при использовании шифра AES-256-GCM позволило добиться прироста пропускной способности в 8 раз (с 370 Mbit/s до 2950 Mbit/s). При применении модуля только на стороне клиента пропускная способность возросла в три раза для исходящего трафика и не изменилась для входящего. При применении модуля только на стороне сервера пропускная способность возросла в 4 раза для входящего трафика и на 35% для исходящего.
- Предоставлена возможность использования режима TLS с самоподписанными сертификатами (при применении опции “–peer-fingerprint” можно не указывать параметры “–ca” и “–capath” и обойтись без запуска PKI-сервера на базе Easy-RSA или похожего ПО).
- В UDP-сервере реализован режим согласования соединения на основе Cookie, при котором в качестве идентификатора сеанса используется Cookie на основе HMAC, что позволяет серверу проводить верификацию без сохранения состояния.
- Добавлена поддержка сборки с библиотекой OpenSSL 3.0. Добавлен параметр “–tls-cert-profile insecure” для выбора минимального уровня безопасности OpenSSL.
- Добавлены новые управляющие команды remote-entry-count и remote-entry-get для подсчёта числа внешних подключений и вывода их списка.
- В процессе согласования ключей более приоритетным методом получения материала для генерации ключей теперь является механизм EKM (Exported Keying Material, RFC 5705), вместо специфичного механизма OpenVPN PRF. Для применения EKM требуется библиотека OpenSSL или mbed TLS 2.18+.
- Обеспечена совместимость с OpenSSL в FIPS-режиме, что позволяет использовать OpenVPN на системах, удовлетворяющих требованиям безопасности FIPS 140-2.
- В mlock реализована проверка резервирования достаточного размера памяти. При доступности менее 100 МБ ОЗУ для повышения лимита осуществляется вызов setrlimit().
- Добавлена опция “–peer-fingerprint” для проверки корректности или привязки сертификата по fingerprint-отпечатку на основе хэша SHA256, без применения tls-verify.
- Для скриптов предоставлена возможность отложенной (deferred) аутентификации, реализуемой при помощи опции “–auth-user-pass-verify”. В скриптах и плагинах добавлена поддержка информирования клиента об ожидании (pending) аутентификации при применении отложенной аутентификации.
- Добавлен режим совместимости (–compat-mode), позволяющий подключаться к старым серверам, на которых используется OpenVPN 2.3.x или более старые версии.
- В списке, передаваемом через параметр “–data-ciphers”, разрешено указание префикса “?” для определения необязательных шифров, которые будут задействованы только при наличии поддержки в SSL-библиотеке.
- Добавлена опция “–session-timeout” при помощи которой можно ограничить максимальное время сеанса.
- В файле конфигурации разрешено указание имени и пароля при помощи тега .
- Предоставлена возможность динамической настройки MTU клиента, на основе данных об MTU, переданных сервером. Для изменения максимального размера MTU добавлена опция “–tun-mtu-max” (по умолчанию 1600).
- Добавлен параметр “–max-packet-size” для определения максимального размера управляющих пакетов.
- Удалена поддержка режима запуска OpenVPN через inetd. Удалена опция
ncp-disable. Объявлены устаревшими опция verify-hash и режим статических ключей (оставлен только TLS). В разряд устаревших переведены протоколы TLS 1.0 и 1.1 (параметр tls-version-min по умолчанию выставлен в значение 1.2). Удалена встроенная реализация генератора псевдослучайных чисел (–prng), следует использовать реализацию PRNG из криптобиблиотек mbed TLS или OpenSSL. Прекращена поддержка пакетного фильтра PF (Packet Filtering). По умолчанию отключено сжатие (–allow-compression=no). - В список шифров по умолчанию добавлен CHACHA20-POLY1305.