Разработчики пакета для создания виртуальных частных сетей OpenVPN представили модуль ядра ovpn-dco, позволяющий существенно ускорить производительность VPN. Несмотря на то, что модуль пока развивается с оглядкой только на ветку linux-next и имеет статус экспериментального, он уже достиг уровня стабильности, позволившего задействовать его для обеспечения работы сервиса OpenVPN Cloud.
По сравнению с конфигурацией на основе интерфейса tun применение модуля на стороне клиента и сервера при использовании шифра AES-256-GCM позволило добиться прироста пропускной способности в 8 раз (с 370 Mbit/s до 2950 Mbit/s). При применении модуля только на стороне клиента пропускная способность возросла в три раза для исходящего трафика и не изменилась для входящего. При применении модуля только на стороне сервера пропускная способность возросла в 4 раза для входящего трафика и на 35% для исходящего.
Ускорение достигается за счёт выноса всех операций шифрования, обработки пакетов и управления каналом связи на сторону ядра Linux, что позволяет избавиться от накладных расходов, связанных с переключением контекста, даёт возможность оптимизировать работу за счёт прямого обращения к внутренним API ядра и исключает медленную передачу данных между ядром и пространством пользователя (шифрование, расшифровка и маршрутизация выполняется модулем без отправки трафика в обработчик в пространстве пользователя).
Отмечается, что негативное влияние на производительность VPN оказывают главным образом ресурсоёмкие операции шифрования и задержки, вызванные переключением контекста. Для ускорения шифрования привлекались процессорные расширения, такие как Intel AES-NI, но переключения контекста до появления ovpn-dco оставались узким местом. Помимо применения предоставляемых процессором инструкций для ускорения шифрования в модуле ovpn-dco дополнительно обеспечено разделение операций шифрования на отдельные сегменты и их обработка в многопоточном режиме, что позволяет задействовать все имеющиеся ядра CPU.
Из текущих ограничений реализации, которые в будущем будут устранены, выделяется поддержка только режимов AEAD и ‘none’ (без аутентификации) и шифров AES-GCM и CHACHA20POLY1305. Поддержку DCO планируют включить в состав выпуска OpenVPN 2.6, запланированного на 4 квартал нынешнего года. В настоящее время модуль поддерживается в проходящем бета-тестирование Linux-клиенте OpenVPN3 и в экспериментальных сборках сервера OpenVPN для Linux. Похожий модуль ovpn-dco-win также развивается для ядра Windows.