Введение

Свободное и открытое программное обеспечение для виртуальных частных сетей.

OpenVPN — это система виртуальной частной сети (VPN), реализующая методы создания защищенных соединений типа «точка-точка» или «сеть-сеть» в маршрутизируемых или мостовых конфигурациях, а также средства удаленного доступа. Она включает в себя клиентские и серверные приложения. OpenVPN позволяет узлам аутентифицировать друг друга с использованием предварительно согласованных секретных ключей, сертификатов или имени пользователя/пароля. При использовании в многоклиентской серверной конфигурации сервер может выдавать сертификат аутентификации для каждого клиента, используя подписи и центр сертификации. OpenVPN активно использует библиотеку шифрования OpenSSL и протокол TLS, а также содержит множество функций безопасности и управления. Он использует собственный протокол безопасности, который применяет SSL/TLS для обмена ключами. OpenVPN способен обходить сетевые трансляторы адресов (NAT) и брандмауэры. OpenVPN был портирован и встроен во множество систем. Например, DD-WRT имеет функцию сервера OpenVPN. SoftEther VPN, многопротокольный VPN-сервер, также включает в себя реализацию протокола OpenVPN. Он был разработан Джеймсом Йонаном и является свободным программным обеспечением, распространяемым по лицензии GNU General Public License версии 2 (GPLv2). Также доступны коммерческие лицензии.

Шифрование

OpenVPN использует библиотеку OpenSSL для шифрования как каналов данных, так и каналов управления. OpenVPN поручает OpenSSL выполнение всех операций шифрования и аутентификации, что позволяет использовать все шифры, доступные в пакете OpenSSL. Также поддерживается использование функции аутентификации пакетов HMAC для дополнительной защиты соединения (автором это называется "HMAC Firewall"). Для повышения производительности шифрования может применяться аппаратное ускорение. Поддержка mbed TLS доступна, начиная с версии 2.3.

Аутентификация

OpenVPN предоставляет несколько способов аутентификации между узлами. OpenVPN поддерживает аутентификацию по предварительно согласованным ключам, по сертификатам и по имени пользователя/паролю. Аутентификация по предварительно согласованному ключу – самая простая, а аутентификация по сертификатам – наиболее надежная и функциональная. Начиная с версии 2.0, можно включить аутентификацию по имени пользователя/паролю, как с использованием сертификатов, так и без них. Однако для работы аутентификации по имени пользователя/паролю OpenVPN требует сторонние модули.

Сетевые связи

OpenVPN может работать через протокол пользовательских данных (UDP) или протокол управления передачей (TCP), мультиплексируя созданные SSL-туннели на одном TCP/UDP порту (RFC 3948 для UDP). Начиная с версии 2.3.x, OpenVPN полностью поддерживает IPv6 как протокол виртуальной сети внутри туннеля, а приложения OpenVPN также могут устанавливать соединения через IPv6. Он способен работать через большинство прокси-серверов (включая HTTP) и хорошо преодолевает сетевой адресный перевод (NAT) и межсетевые экраны. Конфигурация сервера позволяет "передавать" определенные параметры сетевой конфигурации клиентам, такие как IP-адреса, команды маршрутизации и некоторые параметры подключения. OpenVPN предлагает два типа интерфейсов для сетевого взаимодействия через универсальный драйвер TUN/TAP. Он может создавать либо IP-туннель (TUN) на основе 3-го уровня, либо Ethernet TAP на основе 2-го уровня, способный передавать любой тип трафика Ethernet. OpenVPN может опционально использовать библиотеку сжатия LZO для сжатия потока данных. Порт 1194 является официальным номером порта, назначенным IANA для OpenVPN, и новые версии программы теперь используют его по умолчанию. Функция, представленная в версии 2.0, позволяет одному процессу управлять несколькими одновременными туннелями, в отличие от ограничения "один туннель на процесс", существовавшего в серии 1.x. Использование OpenVPN распространенных сетевых протоколов (TCP и UDP) делает его предпочтительной альтернативой IPsec в ситуациях, когда интернет-провайдер может блокировать определенные VPN-протоколы, чтобы вынудить пользователей подписаться на более дорогой тарифный план "бизнес-класса". Например, Comcast ранее заявляла, что их продукт @Home был и всегда оставался предназначенным для домашнего использования и не допускал использования коммерческих приложений. Они утверждали, что удаленная работа через VPN может негативно повлиять на производительность сети их обычных пользователей. Они предложили альтернативу – @Home Professional, которая стоила дороже. Таким образом, любой, желающий использовать VPN, должен был бы подписаться на более дорогой тарифный план бизнес-класса. При использовании OpenVPN протокола управления передачей (TCP) для установления туннеля производительность будет приемлемой только при наличии достаточной избыточной пропускной способности на нетуннелизированном сетевом соединении, чтобы гарантировать, что таймеры TCP в туннеле не истекут. Если это условие не выполняется, производительность резко падает. Это известно как "проблема сбоя TCP".

Безопасность

OpenVPN предлагает различные встроенные функции безопасности. Он поддерживает шифрование до 256 бит с использованием библиотеки OpenSSL, хотя некоторые провайдеры могут предлагать более низкие уровни, что фактически обеспечивает одни из самых быстрых VPN, доступных пользователям. OpenVPN работает в пользовательском пространстве, не требуя операций с IP-стеком (и, следовательно, с ядром). OpenVPN способен сбрасывать root-привилегии, использовать mlockall для предотвращения выгрузки конфиденциальных данных на диск, переходить в chroot-окружение после инициализации и применять контекст SELinux после инициализации. OpenVPN использует собственный протокол безопасности, основанный на SSL и TLS. Это делается часто для расширения функциональности OpenVPN, включая более продвинутое ведение журналов, усиленную аутентификацию по имени пользователя и паролю, динамическое обновление правил брандмауэра, интеграцию с RADIUS и т.д. Плагины представляют собой динамически загружаемые модули, обычно написанные на языке C, а интерфейс скриптов позволяет выполнять любые скрипты или исполняемые файлы, доступные OpenVPN. В исходном коде OpenVPN есть примеры таких плагинов, включая плагин аутентификации PAM. Также существуют сторонние плагины для аутентификации по базам данных LDAP или SQL, таким как SQLite и MySQL.

Платформы

Он доступен на Solaris, Linux, OpenBSD, FreeBSD, NetBSD, QNX, macOS и Windows XP и более поздних версиях. OpenVPN доступен для мобильных операционных систем, включая Maemo, Windows Mobile 6.5 и ниже, устройств iOS 3GS+, устройств iOS 3.1.2+ с джейлбрейком, устройств Android 4.0+ и устройств Android, на которые установлена прошивка Cyanogenmod или установлен соответствующий модуль ядра. Он не совместим с некоторыми мобильными операционными системами, включая Palm OS. Это не веб-VPN, представленный в виде веб-страницы, как, например, Citrix или Terminal Services Web access; программа устанавливается отдельно и настраивается путем ручного редактирования текстовых файлов, а не с помощью мастера с графическим интерфейсом. OpenVPN не совместим с VPN-клиентами, использующими протоколы IPsec поверх L2TP или PPTP. Вся программа состоит из одного исполняемого файла для клиентских и серверных соединений, необязательного конфигурационного файла и одного или нескольких файлов ключей, в зависимости от используемого метода аутентификации.

Реализация программного обеспечения

OpenVPN была интегрирована в SoftEther VPN, многопротокольный VPN-сервер с открытым исходным кодом, что позволяет пользователям подключаться к VPN-серверу с использованием существующих OpenVPN-клиентов. OpenVPN также интегрирована в Vyos, операционную систему маршрутизации с открытым исходным кодом, созданную на основе программного маршрутизатора Vyatta.