Openvpn мануал на русском

Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.

По соображениям безопасности доступ к этим ресурсам ограничен при помощи межсетевого экрана (файервола) по портам и адресам IP. Ежедневную перенастройку доступа при изменении динамических IP сотрудников едва ли можно назвать разумным решением.

Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.

В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.

Теме OpenVPN посвящены многочисленные статьи и сообщения на форумах. Тем не менее, нужную информацию мне пришлось собирать по частям из разных мест. Попутно приходилось разбираться с многочисленными терминами и технологиями. В качестве серверов OpenVPN были использованы VDS на базе FreeBSD и Debian Linux, в качестве клиентов — рабочие станции FreeBSD, Debian Linux, Ubuntu и Microsoft Windows.

Надеюсь, что эта статья будет полезна тем, кто впервые столкнулся с необходимостью создания сети VPN или уже использует ее для решения тех или задач, а также тем, кто ищет замену коммерческим реализациям VPN.

С благодарностью приму замечания и предложения по содержимому статьи.

Оглавление

  • Немного теории
  • Компоненты сети OpenVPN
  • Готовим оборудование для установки OpenVPN
  • Создание удостоверяющего центра CA
  • Установка утилиты Easy-RSA
  • Создание сервера OpenVPN
  • Установка и запуск ПО клиента OpenVPN
  • Установка прокси-сервера Squid
  • Особенности установки на FreeBSD
  • Особенности установки клиента OpenVPN в Microsoft Windows
  • Полезные ссылки

Немного теории

Если раньше для создания безопасного канала передачи данных крупным компаниям и организациям приходилось прокладывать (либо арендовать) кабели и защищать их от физического доступа злоумышленников, то теперь в этом нет необходимости. С помощью VPN можно создавать защищенные виртуальные каналы, работающие через безопасный «туннель» в Интернете. Такое решение может позволить себе любая, даже очень небольшая компания.

Конечно, если предъявляются повышенные требования к защите данных, необходимо применять сертифицированные средства и обращаться к специалистам. Однако уровень защиты, обеспечиваемый OpenVPN, позволяет использовать эту технологию для многих коммерческих приложений.

Почему сеть VPN называется виртуальной и частной?

Виртуальная она потому, что узлы сети объединяются не физическими линиями, а виртуальными соединениями, которые создаются программным обеспечением (ПО) VPN.

Сеть VPN частная, так как к ней могут подключаться только узлы компании, создавшей эту сеть, а не все желающие. На каждом узле сети VPN должно работать ПО VPN. Еще там должны находиться ключи и сертификаты, обеспечивающие узлам доступ к сети VPN и криптографическую защиту передаваемых данных.

Таким образом, сеть VPN может объединять ресурсы (серверы и рабочие станции) компании в единую безопасную виртуальную сеть, созданную на базе Интернета. И теперь сотрудники, работающие удаленно (из дома или из другой страны) будут находиться как бы в общей сети своей компании. Сеть VPN подходит и для консолидации территориально разделенных офисов компании.

Обмен данными по сети

ПО OpenVPN передает данные по сети с помощью протоколов UDP или TCP с применением драйвера TUN/TAP. Протокол UDP и драйвер TUN позволяет подключаться к серверу OpenVPN клиентам, расположенным за NAT.

Для OpenVPN можно выбрать произвольный порт, что позволяет преодолевать ограничения файервола, через который осуществляется доступ из локальной сети в Интернет (если такие ограничения установлены).

Безопасность и шифрование

Безопасность и шифрование в OpenVPN обеспечивается библиотекой OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (SSL).

В OpenSSL может использоваться симметричная и ассиметричная криптография.

В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.

Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).

Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.

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

Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой «атаки посредника» (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.

Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.

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

Хотя размер ключа влияет на сложность расшифрования, никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.

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

Сертификаты и удостоверяющий центр CA

Как мы уже сказали, при ассиметричной криптографии открытый ключ используется для зашифрования данных, а закрытый — для расшифрования. Чтобы избежать подделки открытого ключа, какая-то третья сторона должна его заверить. В результате этой процедуры создается так называемый сертификат открытого ключа.

Сертификат должна заверить организация, которой доверяют. Эта организация играет роль удостоверяющего центра (Certification authority, CA).

Если создается открытый ключ для публичного использования, в качестве удостоверяющего центра должна выступать коммерческая или государственная организация с неоспоримой репутацией. Эта организация публикует собственный открытый ключ, доступный всем.

Существует немало коммерческих организаций, выпускающих сертификаты, пригодные, например, для создания HTTPS-сайтов, для цифровой подписи сообщений электронной почты или документов, для систем мгновенного обмена сообщениями, такими как Jabber. Эти сертификаты выдаются на ограниченный срок и стоят денег.

Но для сети VPN, создаваемой для своей компании, вы можете самостоятельно создать свой удостоверяющий центр CA и выпускать так называемые самоподписанные сертификаты. Конечно, доверие к таким сертификатам не будет выходить за рамки вашей компании, но во-первых, этого будет вполне достаточно, а во-вторых, самоподписанные сертификаты совершенно бесплатны.

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

Сертификаты создаются в соответствии со стандартом X.509. Этот стандарт определяет форматы данных и процедуры распределения открытых ключей с помощью сертификатов, снабженных электронными подписями.

Сертификат X.509 — это публичный ключ, содержащий такие данные, как субъект, владеющий сертификатом, имя узла, период действия, алгоритм и значение подписи сертификата, и т.д. Сертификат должен быть подписан приватным ключом удостоверяющего центра (Certification authority, CA).

Когда наш узел рабочей станции подключается к удаленному узлу (серверу) с использованием протокола TLS, сервер отправляет ему сертификат X.509. На нашем узле есть публичный ключ удостоверяющего центра CA, который подписал этот сертификат. Этот ключ используется для проверки подписи.

Таким образом, имеется способ проверки удаленного узла (сервера), к которому наш узел собирается подключиться, чтобы исключить «атаки посредника» MITM.

Список отзыва сертификатов

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

Для упрощения этой процедуры в OpenVPN предусмотрен список отзыва сертификатов (Сertificate Revocation List, CRL) и простые средства для управления этим списком.

Список CRL создается в удостоверяющем центре CA и потом копируется на сервер OpenVPN. После внесения изменений в список CRL его необходимо повторно скопировать на сервер OpenVPN.

Файл Диффи-Хелмана

Файл Диффи-Хелмана (Diffie-Hellman) необходим для реализации одноименного протокола, позволяющего использовать небезопасный канал для получения общего секретного ключа. Этот ключ будет в дальнейшем использоваться для защищенного обмена данными с помощью алгоритмов симметричного шифрования.

В применении к OpenVPN файл Диффи-Хелмана нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены. Здесь имеется в виду тот трафик, который был записан и сохранен еще до похищения ключей.

Файл Диффи-Хелмана создается на сервере OpenVPN.

Статический ключ HMAC

Статический ключ (хэш-код) аутентификации сообщений (Hash-based Message Authentication Code, HMAC) обеспечивает проверку подлинности информации, передаваемой между сторонами. Этот ключ создается на сервере OpenVPN с целью дополнительной защиты от DoS-атак и флуда.

Компоненты сети OpenVPN

Прежде чем мы перейдем от теории к практике, перечислим основные компоненты сети OpenVPN и объекты, с которыми нам придется иметь дело.

Удостоверяющий центр CA

Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. Управляет списком отзыва сертификатов CRL.

Сервер OpenVPN

ПО сервера OpenVPN создает туннель внутри незащищенной сети, например, Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами — участниками обмена данными в сети OpenVPN.

Клиент OpenVPN

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

Сертификаты (публичные ключи) X.509 

Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону, передающую зашифрованные данные.

Файл запроса на сертификат создается на узлах сети, затем он переносится на узел удостоверяющего центра и там подписывается. Созданный в результате подписанный сертификат переносится обратно на запросивший его узел сети OpenVPN.

Приватные ключи

Приватные ключи секретные. Они должны создаваться и храниться на каждом узле сети OpenVPN, предназначены для расшифрования данных и никогда не должны передаваться по сети.

Приватные ключи создаются на узлах сети OpenVPN одновременно с файлом запроса на получение сертификата.

Список отзыва сертификатов CRL

Содержит список сертификатов, утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL.

После создания и каждого изменения список CRL переносится на серверы OpenVPN.

Файл Диффи-Хелмана

Используется, чтобы в случае похищения ключей исключить расшифрование трафика, записанного еще до этого похищения. Создается на сервере OpenVPN.

Статический ключ HMAC

Служит для проверки подлинности передаваемой информации. Обеспечивает защиту от DoS-атак и флуда. Создается на сервере OpenVPN.

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

Если вы впервые настраиваете сеть VPN, лучше всего экспериментировать на виртуальных машинах VDS. Это могут быть VDS, созданные локально на вашем компьютере или на сервере в вашей сети, либо арендованные у провайдера. Перед арендой VDS поинтересуйтесь, поддерживается ли драйвер TUN/TAP. Некоторые провайдеры требуют дополнительной оплаты для подключения TUN/TAP.

На рис. 1. мы показали схему стенда, на котором будем устанавливать компоненты и узлы OpenVPN (имена и адреса IP хостов могут быть другими).

Рис. 1. Стенд для изучения OpenVPN.

Здесь изображены три узла (хоста), для каждого из которых потребуется отдельный VDS:

  • сервер OpenVPN (vpnsrv, 192.168.0.54);
  • клиент OpenVPN (vpnclient, 192.168.0.55);
  • удостоверяющий центр CA (ca, 192.168.0.53)

Хосты клиента и сервера VPN соединены обычным, небезопасным каналом. В случае макета это может быть локальная сеть, в реальной жизни — канал сети Интернет. ПО OpenVPN создает в этой сети канал, обозначенный на рис. 1 красным цветом, внутри которого устанавливается безопасный шифрованный канал (обозначен зеленым цветом).

В макете хост удостоверяющего центра CA можно подключить к вашей локальной сети. Для реальной работы хост CA нужно отсоединить от сети, а обмен сертификатами и ключами осуществлять с помощью, например, USB флэш-диска.

Если к безопасности предъявляются повышенные требования, хост CA необходимо поместить в охраняемое помещение — расположенная на этой машине информация позволяет создавать ключи доступа к вашей сети VPN.

Мы проводили установку серверов OpenVPN в среде ОС Debian Linux и FreeBSD, клиентов OpenVPN в ОС Debian Linux, FreeBSD и Microsoft Windows.

Основная часть статьи посвящена установке компонентов OpenVPN для Debian Linux. Далее мы рассмотрим особенности установки для FreeBSD и Microsoft Windows.

По возможности на узлах сети OpenVPN используйте новые версии ОС. Перед тем как приступить к работе с OpenVPN, обновите пакеты Linux:

# apt-get update
# apt-get upgrade

Установите на всех узлах пакет пакет zip, если он не был установлен ранее:

# aptitude install zip

Этот пакет будет нужен для распаковки архива утилиты Easy-RSA, с помощью которой мы будем создавать ключи и сертификаты.

На всех узлах настройте обновление и синхронизацию времени.

# apt-get install ntpdate
# apt-get install -y ntp
# /etc/init.d/ntp stop
# ntpdate pool.ntp.org
# /etc/init.d/ntp start

Синхронизация времени необходима, т.к. сертификаты имеют период действия. Если часы, например, на хосте удостоверяющего центра CA и сервера OpenVPN не синхронны, может получиться так, что выданный удостоверяющим центром сертификат не будет действителен на узлах сети OpenVPN из-за ограничений по дате или времени.

Дальнейшие работы мы начнем с подготовки хоста удостоверяющего центра CA. Затем установим хосты сервера и клиента OpenVPN.

Создание удостоверяющего центра CA

Как мы уже говорили, задача удостоверяющего центра CA — выдача подписанных сертификатов для сервера и клиентов OpenVPN.

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

Одновременно с запросом сертификата создается приватный ключ. Приватные ключи создаются для всех узлов сети OpenVPN: для удостоверяющего центра CA, для сервера и всех клиентов OpenVPN.

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

На рис. 2 показан процесс получения подписанного сертификата для сервера OpenVPN.

Рис. 2. Получение сертификата для сервера OpenVPN

Сервер OpenVPN создает свой приватный ключ и файл запроса на получение сертификата. Файл запроса передается в удостоверяющий центр, например, на USB флеш-диске.

Удостоверяющий центр на основе запроса создает подписанный сертификат, который затем требуется перенести на сервер OpenVPN, также на USB флэш-диске.

Если к безопасности не предъявляется особых требований или вы только изучаете OpenVPN, можно подключить машину удостоверяющего центра к сети и передавать запросы и сертификаты, например, с помощью утилит SFTP или SCP. Можно даже совместить функции CA и, например, сервера OpenVPN в одном хосте.

Аналогичным образом необходимо получить сертификаты для всех клиентских узлов (рис. 3).

Рис. 3. Получение сертификата для клиента OpenVPN

Установка утилиты Easy-RSA

Все операции по созданию ключей и сертификатов можно выполнить с помощью утилиты openssl. Однако проще воспользоваться специально созданной для этого программой Easy-RSA, которая использует openssl для выполнения действий с ключами и сертификатами.

Ранее утилита Easy-RSA поставлялась вместе с OpenVPN, но теперь это отдельный проект.

Все операции с удостоверяющим центром и сертификатами можно (и нужно) проводить от имени непривилегированного пользователя.

Создайте пользователя с именем, например, ca и перейдите в его домашний каталог:

# adduser ca
# su ca
$ cd

Загрузите дистрибутив программы утилитой wget.

$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

После загрузки распакуйте архив master.zip:

$ unzip master.zip

В табл. 1 перечислены файлы и каталоги, входящие в дистрибутив Easy-RSA.

Таблица 1. Состав дистрибутива Easy-RSA.

Мы рекомендуем ознакомиться с файлом README.quickstart.md, а также с файлами из папки Doc. Для создания ключей и сертификатов нужно перейти в каталог easyrsa3, где находится исполнимый файл программы Easy-RSA.

Создание инфраструктуры публичных ключей PKI

На первом шаге создайте инфраструктуру публичных ключей (Public Key Infrastructure, PKI):

$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

Вы увидите сообщение:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/ca/easy-rsa-master/easyrsa3/pki

В результате выполнения команды init-pki был создан каталог /home/ca/easy-rsa-master/easyrsa3/pki, где и находится инфраструктура публичных ключей PKI.

На втором шаге с помощью команды build-ca создайте удостоверяющий центр CA:

$ ./easyrsa build-ca

В ответ на эту команду вам будет предложено ввести пароль и так называемое имя Common Name:

Generating a 2048 bit RSA private key
.....+++
................................................................+++
writing new private key to '/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key'
Enter PEM pass phrase:********
Verifying - Enter PEM pass phrase:********
----You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value, 
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:ca.mydomain.ru>
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt

Пароль будет защищать приватный ключ удостоверяющего центра, созданный в формате PEM (Privacy Enhancement for Internet Electronic Mail). Этот пароль потребуется каждый раз, когда вы будете подписывать в удостоверяющем центре сертификаты для серверов и клиентов OpenVPN.

Чтобы избавиться от необходимости ввода пароля, можно при запуске команды build-ca задать опцию nopass:

$ ./easyrsa build-ca nopass

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

В качестве Common Name задайте, например, доменное имя, выделенное для удостоверяющего центра CA, имя пользователя или хоста сервера CA.

Для удостоверяющего центра команда build-ca создаст два файла:

/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt

Файл ca.key представляет собой приватный ключ центра CA, он секретный, и его нельзя переносить на другие узлы вашей сети.

Файл сертификата удостоверяющего центра ca.crt, напротив, открытый, и он будет нужен на узлах серверов и клиентов OpenVPN. Запишите файл ca.crt на USB флэш-диск, чтобы перенести на другие узлы.

Смонтировать USB флэш-диск, можно, например, так:

# fdisk -l
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash

Здесь мы предполагаем, что USB флэш-диск стал устройством /dev/sdb1, а его файловая система — FAT32.

Копируем файл сертификата CA:

# cp /home/ca/easy-rsa-master/easyrsa3/pki/ca.crt /mnt/flash/ca.crt

Для работы с USB флэш-диском с файловой системой NTFS сначала установите пакет ntfs-3g:

# aptitude install ntfs-3g

Смонтируйте диск следующим образом:

# mount -t ntfs-3g /dev/sdb1 /mnt/flash

После окончания копирования размонтируйте USB диск:

# umount /mnt/flash

Создание списка отзывов сертификатов

Если сотрудник уволился, необходимо заблокировать его доступ в сеть VPN компании. Специально для этой цели в OpenVPN предусмотрен список отзыва сертификатов CRL. Создайте его такой командой:

$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa gen-crl

У вас будет запрошен пароль доступа к приватному ключу ca.key удостоверяющего центра. Список отзыва сертификатов будет создан в файле /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem.

Скопируйте этот файл на USB флэш-диск:

# cp /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem /mnt/flash

Если нужно заблокировать выданный ранее сертификат, воспользуйтесь следующей командой:

$ ./easyrsa revoke developer5

Здесь мы отозвали сертификат для клиента developer5. Далее нужно скопировать новый файл CRL на сервер OpenVPN и перезапустить демон OpenVPN.

Созданные файлы и каталоги PKI

В табл. 2 мы привели краткое описание некоторых файлов и каталогов PKI, созданных в результате наших действий.

Таблица 2. Структура каталога PKI.

Справка по утилите Easy-RSA

Запустите утилиту Easy-RSA без параметров:

$ ./easyrsa

На экране появится список всех команд утилиты, а также полный путь к программе и к PKI.

Для того чтобы получить справку по нужной команде, добавьте опцию help. Например, так можно получить справку по команде build-ca:

$ ./easyrsa help build-ca

Создание сервера OpenVPN

Процесс создания сервера OpenVPN включает в себя установку пакета openvpn, подготовку файлов конфигурации, ключей и сертификатов.

Установка пакета openvpn

Установите пакет сервера OpenVPN следующим образом:

# apt-get install openvpn

Подготовка файлов конфигурации

Файлы конфигурации, сертификаты и ключи нужно поместить в каталог /etc/openvpn, который будет создан автоматически в процессе установки пакета openvpn.

Прежде всего, подготовим файлы конфигурации openssl.cnf и server.conf. Первый из этих файлов определяет конфигурацию OpenSSL, второй — конфигурацию сервера OpenVPN.

В комплекте с утилитой Easy-RSA поставляется пример файла конфигурации OpenSSL (предполагается, что мы установили утилиту в домашний каталог пользователя ca):

/home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf

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

В файле openssl.cnf указан абсолютный путь к каталогу с ключами и сертификатами, который вы только что создали.

Содержимое файла openssl.cnf

[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /etc/openvpn
crl_dir = $dir
database = $dir/index.txt
new_certs_dir = $dir
certificate = $dir/ca.crt
serial = $dir
crl = $dir/crl.pem
private_key = $dir/server.key
RANDFILE = $dir/.rand
default_days = 3650
default_crl_days = 365
default_md = md5
unique_subject = yes
policy = policy_any
x509_extensions = user_extensions
[ policy_any ]
organizationName = match
organizationalUnitName = optional
commonName = supplied
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = CA_extensions
[ req_distinguished_name ]
organizationName = Organization Name (must match CA)
organizationName_default = Company
organizationalUnitName = Location Name
commonName = Common User or Org Name
commonName_max = 64
[ user_extensions ]
basicConstraints = CA:FALSE
[ CA_extensions ]
basicConstraints = CA:TRUE
default_days = 3650
[ server ]
basicConstraints = CA:FALSE
nsCertType = server

Пример файла openvpn.conf конфигурации сервера OpenVPN есть на сайте проекта по адресу openvpn.net/index.php/open-source/documentation/howto.html#server. Мы предлагаем начать с сокращенной версии этого файла из нашей статьи.

Содержимое файла server.conf

port 1194
proto udp
dev tun
user openvpn
group openvpn
cd /etc/openvpn
persist-key
persist-tun
tls-server
tls-timeout 120
dh /etc/openvpn/dh.pem
ca /etc/openvpn/ca.crt
cert /etc/openvpn/vpn-server.crt
key /etc/openvpn/server.key
crl-verify /etc/openvpn/crl.pem
tls-auth /etc/openvpn/ta.key 0
server 10.15.0.0 255.255.255.0
client-config-dir /etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
push "dhcp-option DNS 10.15.0.1"
route 10.15.0.0 255.255.255.0
comp-lzo
keepalive 10 120
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
verb 3
mute 20

Чтобы запуск сервера OpenVPN произошел успешно, необходимо создать каталоги, сертификаты и ключи, на которые есть ссылки в файлах openssl.cnf и server.conf, а также пользователя openvpn.

Создайте каталог для журнала сервера OpenVPN:

# mkdir /var/log/openvpn/

Создайте каталог для конфигураций клиентов (пока не используем):

# mkdir /etc/openvpn/ccd

Подготовка сертификата и ключа для сервера OpenVPN

Помимо openssl.cnf и openvpn.conf в каталоге /etc/openvpn/ нам потребуются файлы, перечисленные в табл. 3.

Таблица 3. Файлы для сервера OpenVPN.

Прежде всего мы создадим приватный ключ и файл запроса на сертификат для сервера OpenVPN, а также получим по созданному запросу в удостоверяющем центре CA подписанный сертификат. В результате у нас появятся файлы server.crt и server.key. Далее займемся остальными файлами, перечисленными в табл. 3.

Чтобы создать для сервера OpenVPN запрос на сертификат и приватный ключ, нам потребуется установить на сервер OpenVPN программу Easy-RSA, аналогично тому, как мы это делали для удостоверяющего центра CA.

Установку Easy-RSA, генерацию приватного ключа сервера OpenVPN и запроса на сертификат мы будем делать от имени пользователя vpnoperator, не имеющего привилегий администратора. Добавьте этого пользователя перед началом работ:

# adduser vpnoperator

Прежде всего, устанавливаем на сервере OpenVPN утилиту Easy-RSA и запускаем инициализацию инфраструктуры публичных ключей PKI:

$ cd /home/vpnoperator
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

После успешной инициализации PKI в консоли появится сообщение:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/vpnoperator/easy-rsa-master/easyrsa3/pki

Так как наш сервер OpenVPN не будет играть роль удостоверяющего центра, то после инициализации PKI мы не будем создавать CA командой build-ca.

Инфраструктура PKI будет создана в каталоге /home/vpnoperator/easy-rsa-master/easyrsa3/pki.

На следующем этапе получим запрос на сертификат и приватный ключ сервера OpenVPN:

$ ./easyrsa gen-req server

Этой командой будет создан файл запроса server.req и приватного ключа server.key. В процессе генерации у вас будет запрошен пароль, а также имя Common Name для сервера OpenVPN:

Generating a 2048 bit RSA private key
...............................................................................................................+++
....................................+++
writing new private key to '/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key'
Enter PEM pass phrase:******
Verifying - Enter PEM pass phrase:******
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]: vpn-server
Keypair and certificate request completed. Your files are:
req: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req
key: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key

Первый из этих файлов нам нужно передать на сервер удостоверяющего центра CA, он не секретный. Второй файл — секретный, и он не должен покидать пределы сервера OpenVPN.

Как мы уже говорили, безопаснее всего передавать запрос на сертификат через USB флеш-диск, чтобы не подключать сервер CA к сети:

# fdisk -l
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req /mnt/flash/server.req
# umount /mnt/flash

Заметим, что при генерации приватного ключа был запрошен пароль. Этот пароль обеспечивает защиту, если приватный ключ будет скомпрометирован (украден злоумышленником). Пароль приватного ключа OpenVPN будет запрашиваться с консоли каждый раз при загрузке сервера и запуске OpenVPN.

Но что делать, если у вас нет доступа к консоли сервера OpenVPN или этот доступ затруднен? Такое может случиться, например, если вы создали сервер OpenVPN на базе VDS, арендованного у провайдера, не предоставляющего консольный доступ.

В этой ситуации можно создать приватный ключ без пароля с помощью опции nopass:

$ ./easyrsa gen-req server nopass

Итак, вы создали приватный ключ сервера OpenVPN и запрос на сертификат.

Смонтируйте USB флэш-диск на хосте удостоверяющего центра CA, а затем импортируйте от имени пользователя ca запрос в PKI:

# mount -t vfat /dev/sdb1 /mnt/flash
# su ca
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/server.req vpn-server

Здесь мы указали сокращенное имя запроса на сертификат как «vpn-server». Это сокращенное имя будет использовано в дальнейших операциях с сертификатом.

После удачного импорта запроса вы увидите следующее сообщение:

The request has been successfully imported with a short name of: vpn-server
You may now use this name to perform signing operations on this request.

Если ошибок нет, подписываем запрос на получение сертификата:

./easyrsa sign-req server vpn-server

В процессе создания подписанного сертификата будет запрошено подтверждение (ответьте на него «yes»), а также пароль приватного ключа удостоверяющего центра CA:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key:******
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Jun 26 15:48:25 2024 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt

Теперь сертификат получен, и он находится на сервере удостоверяющего центра в файле home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt. Этот файл нам нужно передать на сервер OpenVPN.

Скопируйте через USB флеш-диск файл сертификата /ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt с сервера удостоверяющего центра в файл на сервере OpenVPN /home/vpnoperator/vpn-server.crt:

# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /mnt/flash/

Затем смонтируйте USB диск на VDS OpenVPN и скопируйте файлы ca.crt сертификата CA, список отзыва сертификатов crl.pem и сертификат vpn-server.crt сервера OpenVPN в каталог /etc/openvpn:

# mount -t vfat /dev/sdb1  /mnt/flash
# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/crl.pem /etc/openvpn
# cp /mnt/flash/vpn-server.crt /etc/openvpn
# umount /mnt/flash

Файл приватного ключа скопируйте из каталога usr/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/ в каталог /etc/openvpn/:

# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key /etc/openvpn

Генерация файла Диффи-Хелмана

Создайте ключи Диффи-Хелмана следующей командой:

$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa gen-dh

Команда gen-dh работает довольно долго. По завершении вы увидите сообщение:

DH parameters of size 2048 created at /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem

Скопируйте файл/home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem в каталог /etc/openvpn/ :

# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn

Создание статического ключа HMAC

Для создания ключа HMAC используйте команду openvpn с опциями —genkey и —secret:

# cd /etc/openvpn
# openvpn --genkey --secret ta.key

Запишите файл ta.key на USB диск:

# cp /etc/openvpn/ta.key /mnt/flash

Ревизия файлов перед запуском OpenVPN

Итак, мы получили из удостоверяющего центра подписанный сертификат сервера OpenVPN, сертификат самого удостоверяющего центра CA, список отзыва сертификатов, создали файл Диффи-Хелмана и ключ HMAC.

Перед тем как запустить демон OpenVPN, нам нужны в каталоге /etc/openvpn/ для Linux или /usr/local/etc/openvpn/ для FreeBSD следующие файлы:

  • openssl.cnf — файл конфигурации OpenSSL;
  • server.conf — файл конфигурации сервера OpenVPN;
  • ca.crt — cертификат удостоверяющего центра;
  • vpn-server.crt — cертификат сервера OpenVPN;
  • server.key — приватный ключ сервера OpenVPN, секретный;
  • crl.pem — cписок отзыва сертификатов;
  • dh.pem — файл Диффи-Хелмана для обеспечения защиты трафика от расшифровки;
  • ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда

Добавление пользователя openvpn

Добавьте непривилегированного пользователя и группу openvpn, от имени которого будет работать демон сервера OpenVPN:

# adduser --system --no-create-home --home /nonexistent --disabled-login --group openvpn

Запуск демона OpenVPN

Запустите демон OpenVPN следующей командой:

# /etc/init.d/openvpn start

Проверка результата запуска демона OpenVPN

Если сервер OpenVPN стартовал без ошибок, убедитесь с помощью команды ifconfig в том, что появился интерфейс TUN:

# ifconfig 
...
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.15.0.1 P-t-P:10.15.0.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Как мы уже говорили, использование TUN/TAP на арендованных VDS может потребовать дополнительной оплаты.

Если все хорошо, то в интерфейсе tun появился адрес IP 10.15.0.1. Это адрес сервера OpenVPN в нашем защищенном туннеле, заданный в файле конфигурации server.conf.

После проверки наличия интерфейса TUN убедитесь, что OpenVPN занял порт 1194:

# netstat -ltupn | grep 1194

Если демон запустился нормально и порт 1194 занят сервером OpenVPN, можно переходить к установке клиента OpenVPN, описанной в следующем разделе статьи. При возникновении ошибок проанализируйте журнал /var/log/openvpn/openvpn-server.log.

При установке OpenVPN на Linux с новыми ядрами, начиная с 2.6, интерфейс TUN может не появится. При этом в логах появляется ошибка:

Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-tun instead

Чтобы избавиться от проблемы, добавьте в файл /etc/modprobe.d/dist.conf строку:

alias netdev-tun tun

Если такого файла нет, его следует создать. После внесения изменений в файл /etc/modprobe.d/dist.conf перезагрузите ОС.

Степень детализации журнала зависит от параметра verb файла конфигурации server.conf. Параметр verb может принимать значения от 0 до 11, при этом 11 соответствует максимальной детализации, а значение по умолчанию равно 1. Если значение параметра verb равно 0, то в журнал будут записываться сообщения только о наиболее серьезных, фатальных ошибках.

Для отладки установите значение этого параметра, равным 5 или выше.

Установка и запуск ПО клиента OpenVPN

Процедура установки клиента OpenVPN аналогична процедуре установки сервера OpenVPN. Основные отличия в файлах конфигурации. Перед установкой не забудьте обновить пакеты и порты.

# apt-get install openvpn

Подготовка файлов конфигурации

Файлы конфигурации, ключи и сертификаты должны находится в каталоге /etc/openvpn.

Далее подготовьте файлы конфигурации openssl.cnf и server.conf.

Файл openssl.cnf, определяющий конфигурацию OpenSSL, используйте точно такой же, как и для сервера OpenVPN. Что касается файла server.conf для клиента OpenVPN, то для начала возьмите его из нашей статьи.

Содержимое файла server.conf для клиента OpenVPN

dev tun
proto udp
remote 192.168.0.54 1194
client
resolv-retry infinite
ca "/etc/openvpn/ca.crt"
cert "/etc/openvpn/developer1.crt"
key "/etc/openvpn/client.key"
tls-auth "/etc/openvpn/ta.key" 1
remote-cert-tls server
persist-key
persist-tun
comp-lzo
verb 3
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-client.log

Обратите внимание на параметр remote, в котором указан адрес IP сервера OpenVPN:

remote 192.168.0.54 1194

Вы должны указать здесь реальный адрес IP вашего сервера OpenVPN, чтобы клиент OpenVPN смог к нему подключиться.

Создайте каталог для журнала клиента OpenVPN:

# mkdir /var/log/openvpn/

Создание инфраструктуры публичных ключей PKI

Подключитесь к хосту клиента OpenVPN (в нашем случае это хост разработчика ПО) с правами обычного пользователя developer1 и скачайте утилиту Easy-RSA с сайта github.com/OpenVPN/easy-rsa.

$ cd /home/developer1
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip

Запустите инициализацию инфраструктуры публичных ключей PKI:

$ cd /home/developer1/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

В результате будет подготовлен каталог PKI:

/home/developer1/easy-rsa-master/easyrsa3/pki

Подготовка сертификата и ключа для клиента OpenVPN

Создайте запрос на сертификат и приватный ключ рабочей станции разработчика developer1:

$ ./easyrsa gen-req client nopass

Вам потребуется ввести имя Common Name для создания запроса на сертификат и приватного ключа рабочей станции:

Generating a 2048 bit RSA private key
..............................................................................................+sftp++
................................+++
writing new private key to '/home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client]:developer1
Keypair and certificate request completed. Your files are:
req: /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req
key: /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key

Если к защите данных предъявляются повышенные требования, создавайте приватный ключ с паролем, без использования опции nopass:

$ ./easyrsa gen-req client

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

Теперь вам потребуется перенести созданный запрос сертификата /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req на хост удостоверяющего центра CA и записать в файл /home/ca/client.req.

Сделайте это с помощью USB флэш-диска, если хост CA не подключен к сети.

Запишите запрос на USB диск:

# mkdir /mnt/flash
# mount -t vfat /dev/sdb1  /mnt/flash
# cp /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req /mnt/flash
# umount /mnt/flash

Импортируйте запрос в PKI, используя в качестве короткого имени developer1:

$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/client.req developer1

Далее подпишите запрос на получение сертификата:

$ ./easyrsa sign-req client developer1

После ввода подтверждения и пароля приватного ключа CA будет создан сертификат:

/home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt

Запишите файл developer1.crt на USB флэш-диск, чтобы перенести его на хост клиента OpenVPN.

# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt /mnt/flash
# umount /mnt/flash

Скопируйте файл сертификата в каталог /etc/openvpn:

# mount -t vfat /dev/sdb1  /mnt/flash
# cp /mnt/flash/developer1.crt /etc/openvpn

Итак, теперь у нас есть файл приватного ключа рабочей станции client.key и файл сертификата developer1.crt, подписанного удостоверяющим центром CA.

Скопируйте файл ключа в каталог /etc/openvpn:

# cp /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key /etc/openvpn

Скопируйте в каталог /etc/openvpn клиента VPN следующие файлы, подготовленные на USB диске:

# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/ta.key /etc/openvpn

Напомним, что файлы ca.crt и crl.pem были созданы на хосте удостоверяющего центра CA, а файл ta.key — на хосте сервера OpenVPN.

Запуск клиента OpenVPN

Запустите демон следующей командой:

# /etc/init.d/openvpn start

Если возникла проблема с запуском клиента, проверьте содержимое журнала /var/log/openvpn/openvpn-client.log

В том случае, когда демон клиента запустился без ошибок, проверьте наличие интерфейса TUN, аналогично тому, как мы это делали при запуске демона сервера OpenVPN.

# ifconfig
...
 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 inet addr:10.15.0.2 P-t-P:10.15.0.2 Mask:255.255.255.0
 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:100
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Проверьте также, что сервер OpenVPN откликается на команду ping по адресу 10.15.0.1:

# ping 10.15.0.1

Установка прокси-сервера Squid

Итак, у нас есть сеть VPN, и сотрудники, работающие удаленно, могут подключаться к VDS сервера OpenVPN с помощью безопасного туннеля. Теперь нам нужно организовать доступ сотрудников к защищенным ресурсам компании через прокси-сервер, установленный на сервер OpenVPN. В этом случае рабочие станции сотрудников с динамическими адресами IP смогут подключаться к ресурсам компании, для которых разрешен доступ с фиксированного адреса IP сервера OpenVPN.

В качестве прокси-сервера мы выбрали ПО с открытым исходным кодом Squid, который часто применяется, в частности, для кэширования Web-страниц в высоконагруженных проектах. Нам, однако, сейчас пригодится только его функция проксирования.

Установку Squid проще всего выполнить из пакета:

# apt-get install squid3

После завершения установки в каталоге /etc/squid3 будет создан файл конфигурации squid.conf внушительных размеров, который необходимо отредактировать. Впрочем, в нашем случае требуется внести лишь очень небольшие изменения.

Прежде всего, отыщите в файле squid.conf следующую строку:

http_access deny all

Перед этой строкой добавьте:

acl allowed_hosts src 10.15.0.0/24
http_access allow allowed_hosts
http_access deny manager

Первая из этих строк разрешает доступ к Squid из вашей сети OpenVPN.

Если требуется проксировать доступ к каким-либо нестандартным портам SSL, добавьте их к строке:

acl SSL_ports port 443

Например, здесь мы добавили нестандартный порт 7195:

acl SSL_ports port 443 7195

Убедитесь, что в файле squid.conf разрешен доступ из сети 10.0.0.0/8. По умолчанию там есть такая строка:

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network

После завершения редактирования файла конфигурации перезапустите Squid:

# /etc/init.d/squid3 restart

Журналы Squid помогут при отладке, если что-то пойдет не так. Они находятся в каталоге /var/log/squid3. Это файлы access.log и cache.log.

После установки и запуска Squid пропишите в браузере прокси 10.15.0.1, порт 3128. Если все настроено правильно, браузер будет ходить в Интернет через ваш сервер OpenVPN. В этом можно убедиться, например, посетив сайт 2ip.ru, myip.ru или аналогичный, показывающий IP-адрес посетителя.

Особенности установки на FreeBSD

Перед началом работ обновите порты FreeBSD:

# portsnap fetch
# portsnap extract

Также позаботьтесь о настройке синхронизации времени на узлах сети OpenVPN. Однократная синхронизация выполняется так:

# ntpdate 1.pool.ntp.org

Вы можете добавить эту команду в задание cron. Также для синхронизации можно установить демон ntpd.

Установка утилиты Easy-RSA

Для загрузки дистрибутива используйте команду fetch:

$ fetch --no-verify-peer https://github.com/OpenVPN/easy-rsa/archive/master.zip

Опция —no-verify-peer позволяет избавиться от ошибки, которая возникает при проверке сертификата digicert.com в FreeBSD версии 10.0. FreeBSD версии 9.2 проверяет данный сертификат успешно, там эта опция не нужна.

В остальном приемы работы с утилитой Easy-RSA в среде FreeBSD ничем не отличаются от приемов работы в среде Debian Linux.

Установка сервера и клиента OpenVPN

Запустите установку OpenVPN на хосте сервера и клиентов OpenVPN из портов следующем образом:

# сd /usr/ports/security/openvpn
# make install clean

Файлы конфигурации OpenVPN

Файлы конфигурации сервера OpenVPN при его установке в ОС FreeBSD необходимо размещать в каталоге /usr/local/etc/openvpn.

Создайте этот каталог:

# mkdir /usr/local/etc/openvpn

Файлы конфигурации openssl.cnf и server.conf содержат путь к каталогу /usr/local/etc/openvpn.

Файл openssl.cnf

[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /usr/local/etc/openvpn
crl_dir = $dir2
database = $dir/index.txt
new_certs_dir = $dir
certificate = $dir/ca.crt
serial = $dir
crl = $dir/crl.pem
private_key = $dir/server.key
RANDFILE = $dir/.rand
default_days = 3650
default_crl_days = 365
default_md = md5
unique_subject = yes
policy = policy_any
x509_extensions = user_extensions
[ policy_any ]
organizationName = match
organizationalUnitName = optional
commonName = supplied
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = CA_extensions
[ req_distinguished_name ]
organizationName = Organization Name (must match CA)
organizationName_default = Company
organizationalUnitName = Location Name
commonName = Common User or Org Name
commonName_max = 64
[ user_extensions ]
basicConstraints = CA:FALSE
[ CA_extensions ]
basicConstraints = CA:TRUE
default_days = 3650
[ server ]
basicConstraints = CA:FALSE
nsCertType = server 

Содержимое файла server.conf для сервера OpenVPN

port 1194
proto udp
dev tun
user openvpn
group openvpn
cd /usr/local/etc/openvpn
persist-key
persist-tun
tls-server
tls-timeout 120
dh /usr/local/etc/openvpn/dh.pem
ca /usr/local/etc/openvpn/ca.crt
cert /usr/local/etc/openvpn/server.crt
key /usr/local/etc/openvpn/server.key
crl-verify /usr/local/etc/openvpn/crl.pem
tls-auth /usr/local/etc/openvpn/ta.key 0
server 10.15.0.0 255.255.255.0
client-config-dir /usr/local/etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
push "dhcp-option DNS 10.15.0.1"
route 10.15.0.0 255.255.255.0
comp-lzo
keepalive 10 120
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
verb 3
mute 20

Содержимое файла server.conf для клиента OpenVPN

dev tun
proto udp
remote 192.168.0.54 1194
client
resolv-retry infinite
ca "/usr/local/etc/openvpn/ca.crt"
cert "/usr/local/etc/openvpn/developer1.crt"
key "/usr/local/etc/openvpn/client.key"
tls-auth "/usr/local/etc/openvpn/ta.key" 1
#ns-cert-type server
remote-cert-tls server
#ifconfig 10.15.0.0 255.255.255.0
persist-key
persist-tun
comp-lzo
verb 3
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-client.log

Создайте каталог для конфигураций клиентов:

# mkdir /usr/local/etc/openvpn/ccd

Работа с инфраструктурой PKI

Установите на сервере OpenVPN утилиту Easy-RSA и запустите инициализацию инфраструктуры публичных ключей PKI:

$ cd /home/vpnoperator
$ fetch https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

В процессе передачи файлов запроса на сертификаты и подписанные сертификаты вы можете использовать USB флэш-диск. Ниже приведены команды для монтирования и размонтирования диска:

# ls  /dev/da*
# mount_msdosfs /dev/da1s1 /mnt
# umount /mnt

Здесь предполагается, что для USB флэш-диска выделено устройство /dev/da1s1.

Добавление пользователя openvpn

С помощью команды adduser добавьте пользователя openvpn. В качестве Shell для этого пользователя укажите nologin.

Запуск демона OpenVPN

Создайте каталог для записи журнала демона OpenVPN:

# mkdir /var/log/openvpn

Добавьте в файл /etc/rc.conf строки:

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"

Здесь указан путь к рабочему файлу конфигурации демона OpenVPN.

Запустите демон OpenVPN:

# /usr/local/etc/rc.d/openvpn start

При успешном запуске на сервере и клиенте OpenVPN должен появится интерфейс TUN. Убедитесь в этом с помощью команды ifconfig:

# ifconfig
 ...
 tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
 options=80000<LINKSTATE>
 inet6 fe80::20c:29ff:fe28:d4be%tun0 prefixlen 64 scopeid 0x3
 inet 10.15.0.1 --> 10.15.0.1 netmask 0xffffff00
 nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
 Opened by PID 493

Проверьте, что демон сервера OpenVPN занял порт 1194:

# sockstat | grep 1194

Если при запуске возникли ошибки, изучите журнал. Путь к файлу журнала задан в файле конфигурации демона OpenVPN.

Установка SQUID

В среде ОС FreeBSD мы выполнили установку Squid из портов:

# cd /usr/ports/www/squid33
# make install clean

Файл конфигурации Squid находится в каталоге /usr/local/etc/squid/ и называется squid.conf. В него надо внести такие же изменения, что и в случае установки для Debian Linux.

Для запуска добавьте в файл /etc/rc.conf строку:

squid_enable="YES"

Чтобы запустить Squid, используйте следующую команду:

/usr/local/etc/rc.d/squid start

Особенности установки клиента OpenVPN в Microsoft Windows

Для тех сотрудников, кто использует на своих рабочих станциях ОС Microsoft Windows, мы настроили доступ к серверу OpenVPN с помощью ПО OpenVPN-GUI. Дистрибутив OpenVPN-GUI можно скачать здесь.

Установка OpenVPN-GUI

Выберите вариант загрузки Windows Installer (64-bit) или Windows Installer (32-bit) в зависимости от разрядности вашей версии ОС Microsoft Windows. Далее запустите полученный файл и выполните установку по умолчанию. Файлы конфигурации, сертификаты и ключи необходимо записать в папку C:\Program Files\OpenVPN\config.

В папку C:\Program Files\OpenVPN\easy-rsa устанавливается версия программы Easy-RSA для Windows.

Краткую инструкцию по использованию Easy-RSA для Windows вы найдете в файле C:\Program Files\OpenVPN\easy-rsa\README.txt

Мы рассмотрим вариант, при котором запрос на сертификат создается на хосте Microsoft Windows, а затем передается через USB флэш-диск на хост удостоверяющего центра CA. Там на основании запроса создается подписанный файл сертификата и, опять же, через USB флэш-диск, передается на хост Microsoft Windows.

Создание запроса на сертификат

Перейдем к процедуре создания запроса на сертификат.

Прежде всего, запустите консоль с правами администратора. Для удобства вместо стандартной консоли Microsoft Windows мы использовали бесплатный эмулятор консоли ConEmu-Maximus5.

Запустив консоль, перейдите в каталог Easy-RSA и выполните команды:

cd C:\Program Files\OpenVPN\easy-rsa
init-config.bat
clean-all 

В результате будет создан каталог C:\Program Files\OpenVPN\easy-rsa\keys и файл vars.bat.

Отредактируйте в файле vars.bat строки по примеру, приведенному ниже, указав код своей страны KEY_COUNTRY и региона KEY_PROVINCE, название города KEY_CITY, компании KEY_ORG, адрес электронной почты KEY_EMAIL и название отдела KEY_OU:

set KEY_COUNTRY=RU
set KEY_PROVINCE=RU
set KEY_CITY=Moscow
set KEY_ORG=IT-Company
set KEY_EMAIL=develop@itcompany.ru
set KEY_CN=changeme
set KEY_NAME=changeme
set KEY_OU=IT

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

vars
build-ca
build-key client

Ответьте на вопросы, аналогичные тем, что задаются при создании ключей и сертификатов для узлов OpenVPN в Debian Linux или FreeBSD.

После этого в каталоге C:\Program Files\OpenVPN\easy-rsa\keys будет создан файл запроса сертификата client.csr, сертификат client.crt и файл приватного ключа клиента client.key.

Из этих файлов нам потребуются только два — запрос сертификата client.csr и приватный ключ client.key. Сертификат client.crt подписан приватным ключом хоста Microsoft Windows, созданным командой build-ca, и не подойдет для работы с нашим сервером OpenVPN. Тут необходим сертификат, созданный нашим удостоверяющим центром CA.

Получение сертификата от удостоверяющего центра CA

Скопируйте файл запроса сертификата client.csr через USB флэш-диск на хост удостоверяющего центра и создайте запрос, аналогично тому, как мы это делали для клиента OpenVPN на базе Debian Linux. Запишите полученный сертификат на USB флэш-диск, чтобы перенести его на хост Microsoft Windows.

Создание файла конфигурации клиента OpenVPN

Создайте файл конфигурации клиента OpenVPN в каталоге C:\Program Files\OpenVPN\config. Расширение имени этого файла должно быть ovpn. Вот пример нашего файла:

client
dev tun
proto udp
remote 192.168.0.54 1194
tls-client
ca "key/ca.crt"
cert "key/developer-w1.crt"
key "key/client.key"
tls-auth "key/ta.key" 1
comp-lzo
tun-mtu 1500
mssfix 1450
verb 3

Здесь предполагается, что мы скопировали в каталог C:\Program Files\OpenVPN\config\key следующие файлы:

  • ca.crt — сертификат удостоверяющего центра CA;
  • developer-w1.crt — сертификат хоста Microsoft Windows, подписанный удостоверяющим центром CA;
  • client.key — приватный ключ хоста Microsoft Windows;
  • ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда, скопированный с сервера OpenVPN

Запуск OpenVPN-GUI

Запустите OpenVPN-GUI как обычное приложение Windows с помощью кнопки Пуск (существует также возможность запуска OpenVPN-GUI в качестве службы). В панели системных задач (в системном «трее», или в панели System Tray) появится значок OpenVPN-GUI в виде небольшого окна с замком.

Щелкните этот значок правой клавишей мыши и выберите имя файла конфигурации, который вы создали в каталоге C:\Program Files\OpenVPN\config. Если все настроено правильно, на экране появится окно соединения, в котором будут отображаться сообщения.

После успешного соединения изображение окна с замком станет зеленого цвета. Это означает, что канал VPN установлен. В случае возникновения проблем читайте сообщения в окне подключения, а также журнал сервера OpenVPN. В большинстве случаев проблемы связаны с ошибками при подготовке сертификатов и ключей.

Чтобы разъединить канал OpenVPN, щелкните значок OpenVPN-GUI правой клавишей мыши и выберите из меню строку Отключиться.

Полезные ссылки

Протокол Диффи — Хеллмана

HMAC

Шифрование

X.509

OpenVPN: создание сервера на Windows

Центр сертификации или удостоверяющий центр (Certification authority, CA)

#статьи


  • 0

Дешёвый и сердитый ответ блокировкам.

Изображение: mrsiraphol / freepik / rawpixel / Freepik / Mickey O`Neil / Hofmann Natalia / Unsplash / OpenVPN Inc/ Wikimedia Commons / Дима Руденок для Skillbox Media

Богдан Островерхов

Пишет о сетях, инструментах для разработчиков и языках программирования. Любит готовить, играть в инди‑игры и программировать на Python.

Пользоваться VPN несложно — на рынке есть много готовых решений, в том числе бесплатных. Но не все VPN одинаково надёжны. Некоторые из них могут просматривать ваш трафик и продавать его третьим лицам. Чтобы избежать этого, можно поднять VPN на своём собственном сервере.

В этой статье мы расскажем о том, как настроить свой VPN на базе OpenVPN. Это вполне по силам сделать даже начинающим, да и стоить будет дешевле, чем пользоваться платными сервисами. Ещё один плюс: ваш VPN будет почти неуязвим для блокировок, так как Роскомнадзору нет дела до частных сетей.

А если не хотите заморачиваться с настройкой своего сервера, в конце статьи есть список бесплатных серверов и инструкция, как к ним подключиться. Так у вас тоже получится свой рабочий VPN — но чуть менее быстрый и безопасный.

Содержание

  • Почему OpenVPN
  • Часть первая: настраиваем сервер
  • Подключаемся к серверу: Windows
  • Подключаемся к серверу: GNU/Linux
  • Подключаемся к серверу: macOS
  • Устанавливаем OpenVPN на сервер
  • Создаём пользователей
  • Часть вторая: устанавливаем клиент
  • На компьютере (Windows, Linux, macOS)
  • На Android-смартфоне
  • На iPhone
  • Список бесплатных VPN-серверов
  • Настраиваем файл конфигурации
  • Заключение

OpenVPN — это один из самых гибких и надёжных протоколов VPN. Его используют как обычные люди, так и сетевики и безопасники для настройки корпоративных сетей.

Вот его главные фишки:

Безопасность. OpenVPN обеспечивает высокий уровень безопасности благодаря шифрованию и аутентификации на основе сертификатов. Это защищает ваши данные от несанкционированного доступа и прочтения.

Кросс-платформенность. OpenVPN поддерживается на большом количестве платформ, включая Windows, macOS, Linux, Android и iOS. Это значит, что вы можете использовать его на разных устройствах и ОС.

Гибкость. OpenVPN настраивается для работы через различные порты и прокси-серверы. Это полезно, когда некоторые порты или протоколы блокируются вашим интернет-провайдером или сетью.

Открытый исходный код. Код OpenVPN доступен общественности для просмотра и аудита. Это делает проект прозрачнее и позволяет обнаруживать и исправлять уязвимости быстрее.

Стабильность. Долгая история разработки и широкое комьюнити — это плюсики к стабильности и надёжности. Ещё OpenVPN автоматически восстанавливает соединение при обрыве связи.

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

Чтобы настроить серверную часть, нам потребуется собственно сервер. Он может быть физическим или облачным. Выбор за вами, но мы рекомендуем второй вариант — это дешевле и не так трудозатратно. Услуги аренды облачного сервера предлагает, например, Timeweb. На момент написания статьи там доступны серверы в России, Польше, Нидерландах и Казахстане.

Скриншот: Timeweb / Skillbox Media

На сайте вам предложат пройти регистрацию и выбрать следующие параметры сервера:

  • операционную систему;
  • страну, где сервер физически расположен;
  • конфигурацию серверного железа;
  • возможность бэкапа;
  • SSH-ключ;
  • тип сети — публичную или приватную.

Будем отталкиваться от того, что мы выбрали операционную систему Ubuntu версии 20.04. Если хотите пользоваться ресурсами, заблокированными в России, лучше выбирать страну за пределами СНГ.

Скриншот: Timeweb / Skillbox Media

Конфигурация подойдёт любая, поэтому берём самую дешевую — она будет верхней строчкой в списке. Тратить деньги на бэкап смысла нет, проще настроить VPN заново, если настройки слетят. SSH-ключи тоже излишни — они нужны, чтобы сервер и клиент убедились, что они те, за кого себя выдают. В нашем случае смысла в этом нет. Сеть оставляем публичной.

Скриншот: Timeweb / Skillbox Media

После настроек пополните счет в Timeweb (обычной банковской карты будет достаточно) и оплатите желаемый срок аренды сервера. Ваш сервер создан! Подождите несколько минут и обновите страницу — сервер запустится, и мы сможем двигаться дальше.

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

Скриншот: Timeweb / Skillbox Media

Но если вы выбрали другого хостера — не проблема: сервер можно настроить и с компьютера.

Если вы используете Windows, то перед настройкой нужно будет установить SSH-терминал, так как встроенная командная строка Windows не обрабатывает SSH-команды. Мы будем использовать MobaXterm, но вы можете выбрать любой другой. Linux и macOS поддерживают SSH из собственной командной строки. В терминале MobaXterm:

  • Выберите Session.
  • Выберите SSH.
  • Введите IP-адрес сервера в поле Remote Host.
  • Отметьте чекбокс и введите имя пользователя в поле Specify username.
  • Нажмите ОК.
  • Появится запрос на ввод пароля — введите или вставьте его комбинацией Shift + Insert (пароль не будет отображаться в терминале — это нормально). Если вы пользуетесь ноутбуком, то загуглите комбинацию клавиш, которая заменяет Insert в вашей модели и зажмите её вместе с Shift.

Скриншот: Skillbox Media

Откройте терминал. В командной строке:

Шаг 1. Введите следующую команду:

ssh -l username XXX.XXX.XXX.XXX 

Иксы замените на IP-адрес сервера, а username — на имя пользователя.

Шаг 2. Если будет предложено подтвердить подлинность сервера, введите yes.

Шаг 3. Введите пароль (вводимые символы не отображаются в терминале, это нормально).

Откройте терминал (нажмите значок Launchpad в панели Dock, введите слово Терминал в поле поиска и нажмите значок терминала). В командной строке:

Шаг 1. Введите:

ssh -l username XXX.XXX.XXX.XXX 

Иксы замените на IP-адрес сервера, username — на имя пользователя.

Шаг 2. Если будет предложено подтвердить подлинность сервера, введите yes.

Шаг 3. Введите пароль (вводимые символы не отображаются в терминале, это нормально).

Теперь переходим на сайт openvpn.net, в раздел в раздел products → self-hosted solutions → software packages.

Далее кликаем на эмблему Ubuntu и в появившемся окне выбираем Ubuntu 20 для x86_64 или ARM64, в зависимости от конфигурации вашего сервера (Timeweb обычно предоставляет x86_64).

Далее последовательно введите команды из списка Option 1. После ввода последней команды скопируйте куда-нибудь значения следующих полей из вывода терминала:

Admin UI
Client UI
login
password

Скриншот: Skillbox Media

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

Скопируйте данные строки Admin UI в строку браузера — вы окажетесь в админской панели сервера. Проигнорируйте предупреждение браузера о безопасности (ДополнительноПринять рискПродолжить). Ничего страшного не произойдёт — вы и так знаете, что это ваш сервер.

Введите логин и пароль (из вывода терминала). Вы попадёте в админскую панель своего сервера. Прочтите и примите лицензионное соглашение.

Далее заходите в ConfigurationNetwork settings. Проверьте, правильно ли указан IP-адрес в соответствующем поле.

Скриншот: OpenVPN / Skillbox Media

Теперь переходите в User managementUser permissions. Здесь мы создаём пользователей. Одновременно только два пользователя могут работать с некоммерческой версией OpenVPN.

Скриншот: OpenVPN / Skillbox Media

Введите имя пользователя в предложенном поле и нажмите на иконку в столбике More settings. Развернётся панель, где нужно будет назначить пароль для пользователя. После создания пароля сверните панель щелчком по той же иконке и нажмите Save settings. Если хотите пользоваться VPN и с мобильного устройства, то создайте ещё одного пользователя.

Далее вам предложат перезагрузить сервер. Нажимайте Update Running Server, и после перезагрузки изменения вступят в силу.

Скриншот: OpenVPN / Skillbox Media

Самое сложное позади. Дальше нас ждёт, по сути, простая установка приложения.

Если вы перешли в эту часть статьи из оглавления и не настраивали собственный сервер, вам нужно будет скачать клиент с официального сайта — есть версии для Windows, Linux и macOS. А ещё — файл конфигурации стороннего сервера, который можно найти здесь.

Если вы были с нами всю первую часть статьи, выходите из админки и заходите в пользовательскую версию страницы по только что созданным логину и паролю. Для этого скопируйте строку вывода Client UI или просто удалите из строки браузера с админкой /admin.

Скачайте на открывшейся странице установщик клиента для своей операционной системы. Если у вас уже установлен клиент, то кликайте на Yourself (user-locked profile) — вы скачаете конфигурационный файл, который нужно будет открыть в клиенте.

Скриншот: OpenVPN / Skillbox Media

Запустите установщик. Мы покажем установку в Windows, но в Linux и macOS процесс проходит идентично. Разве что в Windows система будет ругаться. Это не страшно — нажимайте ПодробнееВыполнить в любом случае.

Скриншот: Skillbox Media

Следуйте инструкциям из установщика.

Скриншот: Skillbox Media

Поздравляем! Клиент установлен.

Скриншот: Skillbox Media

Если вы подняли свой сервер, то при запуске профиль пользователя уже будет добавлен в клиент. Кликайте на ползунок, вводите пароль, и вуаля — вы подключены к VPN через собственный сервер. С подключением!

Скриншот: OpenVPN / Skillbox Media

Если вы решили использовать сторонний VPN-сервер и скачали файл конфигурации OpenVPN, то в меню клиента кликайте на плюсик, выбирайте вкладку File и перетаскивайте файл в поле для загрузки. Дальше подключайтесь так, как описывалось в предыдущем абзаце.

Скриншот: OpenVPN / Skillbox Media

Шаг 1. Установите приложение OpenVPN Connect с Google Play.

Скриншот: Skillbox Media

Шаг 2. Сохраните файл конфигурации OpenVPN (.ovpn) своего сервера на мобильное устройство или скачайте бесплатный чуть ниже. Если вы создали разных пользователей на сервере — для десктопа и для мобильного, то заходите под пользователем для мобильного.

Скриншот: OpenVPN / Skillbox Media

Шаг 3. Откройте приложение OpenVPN Connect. Нажмите на значок меню (обычно это три горизонтальные линии) в верхнем левом углу.

Скриншот: Skillbox Media

Шаг 4. Выберите вкладку File. Выберите скачанный с сервера файл конфигурации OpenVPN (.ovpn).

Скриншот: OpenVPN / Skillbox Media

Шаг 5. Нажмите Выбрать или Импортировать для импорта конфигурации.

Шаг 6. Введите логин и пароль пользователя, которого вы создавали под мобильное устройство (если подключаетесь к своему серверу).

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

Шаг 1. Установите приложение OpenVPN Connect из App Store.

Скриншот: OpenVPN / Skillbox Media

Шаг 2. Скопируйте файл конфигурации OpenVPN (.ovpn) на ваше устройство, например через iCloud Drive, Telegram, WhatsApp или по email. Или скачайте бесплатный в разделе ниже.

Шаг 3. На вашем устройстве найдите файл конфигурации и нажмите на него.

Шаг 4. В меню файла нажмите на значок, как на картинке ниже, и выберите OpenVPN.

Скриншот: OpenVPN / Skillbox Media

Шаг 5. Откроется приложение OpenVPN Connect с предложением импортировать конфигурацию. Нажмите Импортировать для импорта конфигурации в приложение OpenVPN Connect.

Шаг 6. Введите логин и пароль пользователя, которого вы создавали под мобильное устройство (если подключаетесь к своему серверу).

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

Скриншот: OpenVPN / Skillbox Media

Существуют и бесплатные VPN-серверы. Главная их проблема — в скорости и качестве соединения, вряд ли получится комфортно сёрфить через такой сервер. Вторая проблема — конфиденциальность: непонятно, кто владеет сервером и кто имеет доступ к истории активности пользователей.

Если такие риски и неудобства вас не смущают, то заходите сюда. Прокрутите страницу немного вниз, пока не увидите список серверов.

Скриншот: VPN Gate / Skillbox Media

Выбирайте сервер нужной вам страны и переходите по ссылке на скачивание конфигурационного файла OpenVPN. Что делать с этим файлом, написано выше, в разделе про установку клиента.

После перехода по ссылке скачайте один из четырёх файлов конфигурации. Мы рекомендуем тот, который указывается вместе с IP-адресом и работает через TCP — это самый последний вариант.

Скриншот: vpngate / Skillbox Media

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

Как видите, пользоваться OpenVPN для личного веб-сёрфинга просто и удобно. Однако на этом его преимущества не заканчиваются. При желании вы можете настроить соединение, используя файлы конфигурации OpenVPN — прописать маршруты, прокси-серверы для отдельных портов и так далее.

Если для личного использования заморачиваться с этим не имеет смысла, то при создании корпоративной сети это может пригодиться.

Вот некоторые основные параметры, которые могут быть указаны в файле конфигурации сервера OpenVPN:

port — порт, на котором сервер OpenVPN будет слушать входящие подключения.

proto — протокол, который будет использоваться сервером (TCP или UDP).

dev — виртуальное устройство сетевого интерфейса, которое будет использоваться сервером, например TUN или TAP.

ca, cert и key — пути к сертификатам и ключам, которые сервер OpenVPN будет использовать для аутентификации клиентов и установки безопасного соединения.

dh — путь к файлу с параметрами протокола Диффи — Хеллмана, используемыми для обмена ключами и установки шифрования.

server — внутренний IP-адрес и диапазон подсетей, которые сервер будет присваивать клиентам.

push позволяет серверу отправлять настройки клиентам, например маршруты, DNS-серверы или другие параметры сети.

keepalive указывает интервал проверки активности подключения между сервером и клиентом.

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

log — путь к файлу журнала, где будут записываться события и сообщения сервера OpenVPN.

Продвинутая настройка выходит за рамки этого материала. Если вам нужно настроить корпоративное соединение с помощью OpenVPN, для этого есть отличный материал на «Хабре». Но, чтобы понимать, о чём идёт речь, вам нужно хотя бы базово разбираться в устройстве сетей и принципах кибербеза.

Если вам интересен этот путь, то начните с книги «Компьютерные сети: принципы, технологии, протоколы» авторства В. Олифер и Н. Олифер — это хороший выбор для новичков. А на YouTube есть простой и понятный курс по сетям от замдекана факультета ИТ МФТИ Андрея Созыкина.

Как зарабатывать больше с помощью нейросетей?
Бесплатный вебинар: 15 экспертов, 7 топ-нейросетей. Научитесь использовать ИИ в своей работе и увеличьте доход.

Узнать больше

Содержание

OpenVPN

OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.

Варианты применения данной статьи

  • Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах, географически расположенных в разных местах, посредством Интернета.

  • Хотим иметь доступ в рабочую локальную сеть из дома или в поездке

  • Имея сервер с белым IP есть желание выходить в сеть с этого IP (например если этот IP за пределами страны или сети, в которой блокируются определенные ресурсы в Интернете)

Исходные данные

Локальная сеть 1

192.168.1.0/24 192.168.1.1
Белый внешний IP (здесь будет сервер OpenVPN)
Внутренний IP сервера OpenVPN - 192.168.1.100

Локальная сеть 2

192.168.0.0/24 192.168.0.1
Динамический IP (или даже серый - не важно для клиента OpenVPN)
Внутренний IP клиента OpenVPN - 192.168.0.100. Клиент в данном случае будет являться шлюзом для устройств в своей подсети.

Настройка OpenVPN

Все действия проводятся с правами суперпользователя root.

sudo -i

Установка

И на сервере и на клиенте ставим один и тот же пакет.

apt-get install openvpn

Создание сервера

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

Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов.

apt-get install easy-rsa
mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa/2.0

Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов

cd /etc/openvpn/easy-rsa/2.0

Редактируем файл переменных

nano vars

Здесь можно заполнить например так:

# Почти в самом низу файла, заполняем информацию о сертификатах по умолчанию (ваши значения).
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Amur Region"
export KEY_CITY="Blagoveschensk"
export KEY_ORG="Organization"
export KEY_EMAIL="vash@email.tut"
export KEY_OU="MyOrganizationalUnit"
# PKCS11 я не использовал, поэтому оставил без изменений. Кто шарит нафига эта штука, допишите статью.
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

#Добавить
export KEY_ALTNAMES="VPNsRUS"

копируем конфиг openssl

cp openssl-1.0.0.cnf openssl.cnf

Загружаем переменные

source ./vars

Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей

./clean-all

Создаем сертификат. По умолчанию поля будут заполняться данными, введенными ранее в vars, поэтому можно ничего не менять.

./build-ca

Создаем ключ сервера

FIXME A challenge password []: Если вы решили ввести challenge password, то необходимо убедиться, что сохранили этот пароль в безопасном месте. Если вам понадобится когда-нибудь переустановить этот сертификат, то потребуется ввести этот пароль снова.

./build-key-server server

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

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

Создаем ключ Диффи-Хеллмана

./build-dh

Cоздаем ключ для tls-аутификации

openvpn --genkey --secret keys/ta.key

Перемещаем сертификаты

cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/

Создание файла конфигурации сервера

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
cd /etc/openvpn
gunzip -d /etc/openvpn/server.conf.gz

nano /etc/openvpn/server.conf
port 1194
# Протокол может быть UDP или TCP, я выбрал 1-й вариант.
proto udp
# Если вы выберите протокол TCP, здесь должно быть устройство tap. Однако, это вариант я не проверял, поэтому ищите информацию отдельно. FIXME
dev tun

# Указываем где искать ключи
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key  # This file should be kept secret
dh /etc/openvpn/keys/dh2048.pem
# Для 12.04 dh1024.pem

# Задаем IP и маску виртуальной сети. Произвольно, но если не уверены лучше делайте как показано здесь
server 10.8.0.0 255.255.255.0

# Указыем, где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
client-config-dir /etc/openvpn/ccd

# Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
ifconfig-pool-persist /etc/openvpn/ipp.txt

# Указываем сети, в которые нужно идти через туннель (сеть-клиента).
route 192.168.0.0 255.255.255.0

# Включаем TLS
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
tls-timeout 120
auth SHA1
cipher AES-256-CBC

# Если нужно, чтобы клиенты видели друг друга раскомментируйте
;client-to-client

keepalive 10 120

# Сжатие трафика. Для отключения используйте на сервере и клиенте comp-lzo no
comp-lzo

# Максимум клиентов
max-clients 10

user nobody
group nogroup

# Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
persist-key
persist-tun

status openvpn-status.log
log /var/log/openvpn.log
# Детальность логирования
verb 3
# Защита от повторов (максимум 20 одинаковых сообщений подряд)
mute 20

# Файл отозванных сертификатов. Разремить, когда такие сертификаты появятся.
;crl-verify /etc/openvpn/crl.pem

Создадим директорию для клиентских конфигов

mkdir /etc/openvpn/ccd

Можно запускать наш сервер OpenVPN

service openvpn restart

Смотрим список интерфейсов

ifconfig

Если среди прочих видим

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

значит VPN-сервер завелся. Если нет, то смотрим лог

tail -f /var/log/openvpn.log

Настройка маршрутизации на стороне сервера

Если сервер имеет «белый» IP то никакой маршрутизации на стороне сервера настраивать не нужно. Если сервер находится в локальной сети за NAT роутера то необходимо настроить маршрутизацию.
Для того, чтобы клиенты могли достучаться до сервера нужно пробросить порты с роутера на сервер. В разных моделях это делается по разному. Суть в том, чтобы стучась на внешний порт, например 12345 1), клиенты попадали на порт OpenVPN-сервера 1194 (или другой, который мы задали для нашего сервера).
Кроме того устройствам в локальной сети нужно сообщить, что для доступа к сети за OpenVPN-сервером нужно обращаться к нему. Но проще задать этот маршрут на роутере, который обслуживает локалку.

Создаем файл в каталоге ccd с тем же именем, что и ключ для клиента, т.е. /etc/openvpn/ccd/client

# Маршрут в сеть клиента. Требуется для доступа к сетевым устройствам в сети клиента. Если не требуется - не прописывайте.
iroute 192.168.0.0 255.255.255.0

# Задаем маршрут для клиента, чтобы он видел сеть за OpenVPN-сервером.
# Если маршрут требуется для всех подключаемых клиентов, достаточно эту
# строку прописать в конфигурационный файл сервера server.conf 
push "route 192.168.1.0 255.255.255.0"

Включаем ipv4_forwarding

В /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1
после чего

sysctl -p

Создание клиента

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

Ключи клиента создаются на сервере

Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов

cd /etc/openvpn/easy-rsa/2.0

Загружаем переменные

source vars

Создаем ключ клиента

В данном случае название ключа — client. Каждый ключ должен быть со своим именем.

./build-key client

Если хотим защитить ключ паролем, то генерируем его другой командой

./build-key-pass client

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

Теперь нужно не забыть скопировать ключи (ca.crt, client.crt, client.key, ta.key) на клиента OpenVPN в /etc/openvpn/keys/

Если планируется на клиенте импортировать файл настроек .ovpn вместе с сертификатами и ключами, например, для Android, важно в конфигурации клиента исключить строку tls-auth, вместо нее добавить key-direction 1. В противном случае будет ошибка вида tls error: incoming packet authentication failed from [af_inet].

Создание файла конфигурации клиента

/etc/openvpn/client.conf

client
dev tun
proto udp

# Внеший IP, на или за которым находится ваш сервер OpenVPN и порт (на сервере или роутере, за которым стоит сервер)
remote 111.222.333.444 1194

# необходимо для DynDNS
resolv-retry infinite

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
key /etc/openvpn/keys/client.key
tls-client
tls-auth /etc/openvpn/keys/ta.key 1
auth SHA1
cipher AES-256-CBC
remote-cert-tls server
comp-lzo
persist-key
persist-tun

status openvpn-status.log
log /var/log/openvpn.log
verb 3
mute 20

ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта

client
dev tun
proto udp

# Внеший IP, на или за которым находится ваш сервер OpenVPN и порт (на сервере или роутере, за которым стоит сервер)
remote 111.222.333.444 1194

# необходимо для DynDNS
resolv-retry infinite

tls-client

# Строка tls-auth /etc/openvpn/keys/ta.key 1, как выше говорилось, заменяется на 
key-direction 1

auth SHA1
cipher AES-256-CBC
remote-cert-tls server
comp-lzo
persist-key
persist-tun

verb 3
mute 20

# Далее идут сертификаты и ключи которые берутся из соответствующих файлов сгенерированных выше

# Из ca.crt
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>

# Из client.crt
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

# Из client.key
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>

# Из ta.key
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

Можно запускать наш клиент OpenVPN

service openvpn restart

Настройка маршрутизации на стороне клиента

Машина с openvpn уже готова работать с сервером в чём можно убедится

ping -c 2 10.8.0.1
ping -c 2 192.168.1.100

Но для того, чтобы пользоваться туннелем в другой офис могли другие устройства в локальной сети нужно указать им, чтобы доступ в подсеть 192.168.1.0/24 осуществляется через 192.168.0.100. Или, что часто проще и быстрее прописать это правило маршрутизации на роутере, который является шлюзом для устройств в сети.

Включаем ipv4_forwarding

Также как в случае с сервером.

Настройка выхода в интернет с IP сервера

Если ваши цели были — только организовать VPN сеть или соединится с изолированной сетью (например из дома с локальной сетью на работе), то эта часть статьи вам не нужна.

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

Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера, то вам нужно настроить на сервере NAT.
Сделать это можно следующей командой (на сервере):

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Здесь мы указали, что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0.

Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить:

iptables-save > /etc/iptables.up.rules
echo "pre-up iptables-restore < /etc/iptables.up.rules" >> /etc/network/interfaces

Настройки клиента

К конфиге клиента client.conf нужно добавить строчку

redirect-gateway def1

Отзыв сертификата

cd /etc/openvpn/easy-rsa/2.0
. ./vars
./revoke-full client2

Если все прошло штатно вы должны увидеть следующий вывод, сообщающий о том, что сертификат отозван:

error 23 at 0 depth lookup:certificate revoked

Скрипт revoke-full создаст CRL-файл (certificate revocation list, список отозванных сертификатов) с именем crl.pem в подкаталоге keys. Файл должен быть скопирован в каталог, в котором сервер OpenVPN может получить к нему доступ. Ранее в конфиге мы прописали, что этот файл должен находится в /etc/openvpn, туда и копируем.

Отключение автозапуска OpenVPN

Это бывает полезно, например для клиента с ключем защищенным паролем, т.к. всё равно при старте системы такое соединение не поднимется в виду отсутствия пароля для ключа. Да и в том случае, если вы сделали ключ с паролем, значит, скорее всего, вам не нужно постоянное соединение.

nano /etc/default/openvpn

Раскомментируем строчку

AUTOSTART="none"

Тест производительности OpenVPN

Условия теста:

  1. VPN-сервер на ВМ Virtualbox (1 ядро i5-4670)

  2. Сеть гигабит (без шифрования последовательная скорость передачи 120 МБ/с). Скорость буду указывать в мегабайтах, НЕ в мегабитах!

  3. Форвардинг на хоста

  4. Клиент Windows 7, OpenVPN 2.3 64, FX-6300

Результаты:

  1. Скорость всегда упиралась в ВМ, где процессор бы полностью занят. ЦП клиента был загружен не более 10% — 40% на 1/6 ядер.

  2. С конфигом выше — 14 МБ/с

  3. Отключаем сжатие ;comp-lzo — прибавка не более 1 МБ/с — до 15 МБ/с

  4. Отключаем аутентификацию auth none +2 МБ/с — до 17 МБ/с

  5. Отключаем шифрование cipher none +2 МБ/с — до 19 МБ/с

  6. Сжатие comp-lzo сжимает хорошо сжимаемые файлы в 2 раза хуже, чем zlib, зато почти не влияет не загрузку ЦП (в десятки раз быстрее). Проверял на копировании установленного в Windows Libreoffice 5. Сжатие в zip с помощью архиватора 7z дало результат около 35%, сжатие comp-lzo по статистике сетевого интерфейса — около 70%.

Максимальный прирост при отключении сжатия, шифрования и аутентификации составил около 35%. Не думаю, что это стоит того, чтобы отключать механизмы защиты, но ситуации бывают разные.

Может кому-то как мне будет интересно влияние опций на производительность и не придется тратить время на проведение замеров, хотя я бы с удовольствием ознакомился с результами других людей. Изначально тестил для себя, поэтому точных замеров не проводил, потом решил поделиться результатами.

Источники

В интернете много статей как поднять OpenVpn за 5 минут. Да, действительно сервер OpenVPN можно поднять быстро. Но моя статья показывает, сколько всего остается за кадром, если устанавливать OpenVPN без понимания как он в действительности работает. И стремясь все сделать быстро — вы сможете столкнуться как с проблемой безопасности, так и с тем что не сможете подключить все свои устройства к вашему пятиминутному OpenVpn.

Вы после установки по мануалу «пятиминутного» OpenVPN, прочекайте его конфигурационный файл согласно этому руководству, что же Вы в действительности установили.

Dmytro Yakovenko статья обновлена 2023/09/10

  1. Статья протестирована под Ubuntu 22

  2. Явным образом указано, что в статье используется Easy-RSA версии 2.3.3

  3. Обновлен раздел: Шаг 15: Отзыв клиентских сертификатов crl-verify

  4. Добавлен раздел: Настройка EdgeRouter X (EdgeOS) в качестве OpenVPN клиент

OpenVPN — это приложение для создания безопасного IP-туннеля через единый UDP- или Порты TCP. Что такое TCP / IP порт-порт 1194. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/TLSv1) т.е. доступны все возможности шифрования, аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация Алгоритм HMAC для OpenVPN, для обеспечения большей безопасности, и аппаратное ускорение для улучшения производительности шифрования.

OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.

  1. Предустановленный ключ, — самый простой метод.

  2. Сертификатная Аутентификация, — наиболее гибкий в настройках метод.

  3. С помощью логина и пароля, — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).

OpenVPN может использовать статические, предустановленные ключи или обмен динамическими ключами на основе TLS. Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT преобразование сетевых адресов или через полноценный межсетевой экран (например, Правила iptables в Linux).

Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.

В первую очередь нужно арендовать виртуальный сервер VPS/VDS c root-доступом к операционной системе, с постоянным IP- адресом. Если вы собираетесь использовать сервер только в качестве VPN сервера, то вам не нужны дополнительные панели управления, типа ISPmanager, Hestia.

Не все хостинг-провайдеры разрешают использование VPN-серверов, поэтому перед заказом услуги предварительно у техподдержки узнайте разрешают ли они использование VPN сервера.

Рекомендация: если вам нужен доступ доступ к российским сайтам (Яндекс.Директ, Яндекс Почта, Wordstat, Вконтакте, Одноклассники, Mail.ru), то на мой взгляд, стоит выбрать российские сервера, например проверенный Perfect Quality Hosting (PQ). Для тех, кому нужен доступ к заблокированным в Российской Федерации сайтам, нужно арендовать сервер за пределами России, например Список абузоустойчивых хостингов.

Основные компоненты сети OpenVPN и объекты

Безопасность и шифрование в OpenVPN обеспечивается библиотекой Как пользоваться OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (Что такое SSL сертификат для сайта, почты).

В OpenSSL может использоваться симметричная и ассиметричная криптография.

В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.

Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).

Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.

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

Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой «атаки посредника» (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.

Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.

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

Хотя размер ключа влияет на сложность расшифрования, никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.

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

Изначально статья писалась для Ubuntu 18.04.4 LTS, также она была протестирована под Ubuntu 22 LTS.

Задача:

  1. Настроить сервер OpenVPN на VPS или облаке. Выбор Linux сервера для OpenVPN: Облачная технология от DigitalOcean, Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам, прекрасная связь с Украиной в этом центре.

  2. Создать простую инструкцию для подчиненного сисадмина по управлению сертификатами/ключами: создание, удаление и отзыв сертификатов клиентов OpenVPN

Предоставить доступ удаленным сотрудникам к локальным сетям для работы с бухгалтерским программным обеспечением и для просмотра видеокамер наблюдения.
Подключаемые удаленные офисы:

  1. Офис Московский: 4 локальных сети со шлюзом под управлением Debian GNU/Linux 7.11 (wheezy)

  2. Офис Гагарина 1: 1 локальная сеть

Клиенты:

  1. Мобильные клиенты на Android

  2. Удаленные клиенты Windows 10

Создание нового сертификата пользователя, под правами обычного пользователя (не root).

cd ~/openvpn-ca
source vars
./build-key zabbix
cd ~/client-configs
./make_config.sh zabbix
cp /etc/openvpn/ccd/base.client /etc/openvpn/ccd/zabbix

Шаблон base.client содержит комментированные строки такого содержания

base.client
$ cat base.client
 
#ifconfig-push 10.8.0.21 10.8.0.22
#push "route 192.168.35.0 255.255.255.0"
#push "route 192.168.22.0 255.255.255.0"
#push "route 10.90.91.0 255.255.255.0"
#iroute 192.168.35.0 255.255.255.0
#iroute 192.168.22.0 255.255.255.0
#iroute 10.90.91.0 255.255.255.0
# all trafic to VPN
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 208.67.222.222"
#push "dhcp-option DNS 208.67.220.220"

Для отзыва дополнительных сертификатов выполните следующие шаги.

Настройка сетевой конфигурации Linux — сервера для безопасной работы сервера OpenVPN: iptables/UFW, ядро Linux.

Делаем первичную настройку безопасности Ubuntu. Iptables при помощи ufw разрешаем только SSH.

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

Необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик. Инструкция применима для операционных систем на базе Linux ядра: Debian, Ubuntu, CentOS и т.д..

Разрешим серверу перенаправлять трафик, настройка производится в файле /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Найдите строку настройки net.ipv4.ip_forward. Удалите “#” из начала строки, чтобы раскомментировать её.
Для применения настроек к текущей сессии наберите команду:

sudo sysctl -p

В общем случае для корректной работы сервера OpenVPN вы должны открыть входящий порт для клиентов и включить NAT преобразование сетевых адресов Маскарадинг (Masquerading) преобразование, если вы весь трафик клиента, хотите маршрутизировать через VPN.

В моей практике, чаще встречается конфигурация, когда клиентам нужно дать доступ только к локальным сетям, а весь основной трафик идет через обычного провайдер. В этом случае NAT настраивать не надо.

Firewall iptables:
Открываем UDP порт 1194 и разрешаем пакеты приходящие с интерфейса TUN и TAP или tun.

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
or
iptables -A INPUT -i tun+ -j ACCEPT
# для динамического IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Если вы используете надстройку над iptables UFW, выполните нижеприведенные действия.

Найдите публичный интерфейс сети (public network interface). Для этого наберите команду:

ip route | grep default

Публичный интерфейс должен следовать за словом «dev».
Зная название интерфейса откроем файл /etc/ufw/before.rules и добавим туда соответствующие настройки:

sudo nano /etc/ufw/before.rules

Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat.

Не забудьте заменить eth0 в строке -A POSTROUTING на имя интерфейса, найденное нами ранее.

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
 
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
 
# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw. Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Далее настроим сам файрвол для разрешения трафика в OpenVPN.

Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения.

sudo ufw allow 1194/udp

Теперь деактивируем и активируем UFW для применения внесённых изменений:

sudo ufw disable
sudo ufw enable

Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать apt для его установки. Также мы установим пакет easy-rsa, который позволит нам настроить наш собственный внутренний центр сертификации (certificate authority, CA) для использования с нашей VPN.

Обновим список пакетов сервера и установим необходимые пакеты следующими командами:

sudo apt update
sudo apt full-upgrade
sudo apt install openvpn
 
wget https://github.com/OpenVPN/easy-rsa-old/archive/refs/heads/master.zip

Эта статья написана easy-rsa версии 2.3.3. В современных дистрибутивах в репозиториях версия 3. Версия 3 очень сильно изменена и не подходит для использования в этой статье.

OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.

Первый вариант копирования файлов easy-rsa

cp -r /usr/share/easy-rsa  /etc/openvpn/
cd /etc/openvpn/easy-rsa

Но я буду использовать второй вариант копирования файлов easy-rsa
Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:

make-cadir ~/openvpn-ca

Откройте на компьютере CA каталог EasyRSA, для этого перейдем в директорию openvpn-ca для начала настройки центра сертификации:

cd ~/openvpn-ca

В этом каталоге есть файл с именем vars, создайте его копию.

cp vars vars.original

Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:

nano vars

Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.

Чтобы в дальнейшем, при создании сертификатов, не появлялась ошибка про отсутствие файла openssl.cnf, вы можете пойти двумя путями. Первый просто переименовать нужный файл.

cp openssl-1.0.0.cnf openssl.cnf

И второй путь, отредактировать в файле vars параметр export KEY_CONFIG:

# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
#export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf

Перейдите ближе к концу файла и найдите настройки полей, используемые по умолчанию при создании сертификатов. Они должны выглядеть примерно так:

~/openvpn-ca/vars
. . .
 
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
 
. . .

Замените значения, на что-нибудь другое, не оставляйте их не заполненными:

~/openvpn-ca/vars
. . .
 
export KEY_COUNTRY="UA"
export KEY_PROVINCE="NY"
export KEY_CITY="Kharkiv"
export KEY_ORG="Mirax"
export KEY_EMAIL="darkfire@example.com"
export KEY_OU="MyPersonal"
 
. . .

Отредактируйте значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Проще всего задать ему имя server, потому что в документации примеры конфигов сервера OpenVPN используют это имя:

~/openvpn-ca/vars
export KEY_NAME="server"

Сохраните и закройте файл.

Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.

Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars:

cd ~/openvpn-ca
source vars

Вы должны увидеть следующий вывод:

Вывод

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

Возможно вам нужно будет переименовать файл:

cp openssl-1.0.0.cnf openssl.cnf

Убедимся, что мы работаем в “чистой среде” выполнив следующую команду:

./clean-all

Теперь мы можем создать наш корневой центр сертификации командой:

./build-ca

Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора:

В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.

Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.

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

Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:

Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.

./build-key-server server

Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.

Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:

Вывод

. . .

Certificate is to be certified until May  1 17:51:16 2026 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:

./build-dh

Для завершения этой команды может потребоваться несколько минут.

Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:

openvpn --genkey --secret keys/ta.key

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

В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.

Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars. Мы будем использовать параметр client1 для создания первого сертификата и ключа.

Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key:

cd ~/openvpn-ca
source vars
./build-key client1

Для создания файлов, защищённых паролем, используйте команду build-key-pass:

cd ~/openvpn-ca
source vars
./build-key-pass client1

В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.

Далее настроим конфигурационный файл сервера OpenVPN с использованием созданных ранее файлов.

Копирование файлов в директорию OpenVPN. Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.

Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:

cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

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

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Изменения вносимые в скопированный конфигурационный файл /etc/openvpn/server.conf. Приведенные ниже директивы, нужно или добавить или раскомментировать, а директиву cipher заменить.

tls-auth ta.key 0
key-direction
cipher AES-128-CBC
auth SHA256
user nobody
group nogroup

Рабочий конфигурационный файл OpenVPN сервера:

server.conf
;local a.b.c.d
local xxx.xxx.xxx.xxx
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge
push "route 192.168.35.0 255.255.255.0"
client-config-dir ccd
route 192.168.35.0 255.255.255.0
route 192.168.22.0 255.255.255.0
route 10.90.91.0 255.255.255.0
# маршрут передается всем клиентам
push "route 192.168.35.0 255.255.255.0"
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
client-to-client
;duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
key-direction 0
cipher AES-128-CBC
auth SHA256
;compress lz4-v2
;push "compress lz4-v2"
;comp-lzo
max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
;log-append  /var/log/openvpn/openvpn.log
verb 3
;mute 20
explicit-exit-notify 1

Включим сервис OpenVPN с помощью systemd.

При запуске сервера OpenVPN необходимо указать имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf, поэтому мы добавим @server в конец имени файла при его вызове:

sudo systemctl start openvpn@server

Убедимся, что сервис успешно запущен командой:

sudo systemctl status openvpn@server

Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:

sudo systemctl enable openvpn@server

Создание структуры директорий для конфигурационных файлов клиентов. В домашней директории создайте структуру директорий для хранения файлов:

mkdir -p ~/client-configs/files

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

chmod 700 ~/client-configs/files

Создание базовой конфигурации:
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Откройте этот файл в вашем текстовом редакторе:

nano ~/client-configs/base.conf

Работающий base.conf. Я привел его одинаковым настройкам с сервером, изменил параметры cipher, auth, key-direction. Основное отличие клиентского файла от серверного в директиве client и задании местонахождения сервера OpenVPN, при помощи директивы remote.

Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf нужно раскомментировать три нижние строчки.

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
base.conf
client
dev tun
proto udp
;remote xxx.xxx.xxx.xxx 1194
remote vpn8.example.net 1194
resolv-retry infinite
nobind
#user nobody
#group nogroup
persist-key
persist-tun
#ca ca.crt
#cert client.crt
#key client.key
remote-cert-tls server
tls-auth ta.key 1
#cipher AES-256-CBC
cipher AES-128-CBC
auth SHA256
#comp-lzo
verb 3
;mute 20
key-direction 1
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files.

Создайте и откройте файл make_config.sh внутри директории ~/client-configs:

nano ~/client-configs/make_config.sh

Вставьте следующие текст в этот файл:

make_config.sh
~/client-configs/make_config.sh
#!/bin/bash
 
# First argument: Client identifier
 
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
 
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Сохраните и закройте файл.

Сделайте его исполняемым файлом командой:

chmod 700 ~/client-configs/make_config.sh

Теперь легко и понятно можно генерировать файлы конфигурации клиентов.

Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt и ключ клиента client1.key командой ./build-key client1 на шаге 7. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs и используя только что созданный нами скрипт:

cd ~/client-configs
./make_config.sh client1

Если всё прошло успешно, мы должны получить файл client1.ovpn в директории ~/client-configs/files:

ls ~/client-configs/files
 
client1.ovpn

Теперь вы должны скопировать или переместить полученный файл конфигурации на клиентское устройство: на компьютер или смартфон.

ШАГ 13: Клиенты OpenVPN для разных ОС Windows, Android, MikroTik, Ubuntu, MacOS

Для Linux проще всего ставить этот же пакет OpenVPN, но настраивать его клиентом.

sudo apt install openvpn

Пример рабочего конфига для Ubuntu 20.04.1 LTS скачиваем файл (с расширением ovpn) созданный на этапе 10. Копируем его в директорию /etc/openvpn клиента (переименовываем расширение):

cp client1.ovpn client1.conf

Тестируем работу клиента:

sudo openvpn --config client1.conf

Если все ОК — настраиваем автозапуск клиента в Ubuntu. Для Ubuntu 18.04 LTS и выше нужно включить службу OpenVPN для запуска во время загрузки перечитать конфиг systemctl. Положите конфигурационный файл в /etc/openvpn/client/имя-конфига.conf

sudo systemctl enable openvpn-client@client1.conf
sudo systemctl daemon-reload

Запускаем клиента

sudo systemctl start openvpn-client@client1.conf

В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды, выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:

  1. добавляет клиенту маршрут к локальной подсети центрального офиса(push «route 192.168.1.0 255.255.255.0»)

  2. определяет адрес локальной подсети, находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)

  3. привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22), где ifconfig-push <IP-адрес клиента> <IP-адрес сервера>. Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN).

# mkdir /etc/openvpn/ccd
# nano ccd/farm1c
push "route 192.168.1.0 255.255.255.0"
#push "route 192.168.35.0 255.255.255.0"
# static IP
ifconfig-push 192.168.14.21 192.168.14.22
#iroute 192.168.2.0 255.255.255.0

Сотрудники увольняются и им нужно запретить доступ к VPN. Значит нужно отозвать их сертификат. Команда revoke-full с именем клиента используется для отзыва ssl сертификата OpenVPN.

Если нет файла .rnd (это файл генератора псевдослучайных чисел) в каталоге пользователя, от имени которого вы создаете сертификаты, выполните командой:

$ cd
$ touch .rnd
default_crl_days= 3000                  # how long before next CRL

Переходим в директорию центра сертификации и вводим команды:

$ cd ~/openvpn-ca
$ source vars

Отзываем сертификат используя команду revoke-full с именем клиента, например client1.

$ ./revoke-full client1

В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.
Теперь нужно объяснить серверу OpenvPN, где ему брать информацию об отозванных сертификатах, для этого используется директива crl-verify. Сервер OpenVPN будет проверять список отозванных сертификатов из файла каждый раз crl.pem, когда кто-то устанавливает соединение с сервером.

Копируем crl.pem в каталог. В конце файла /etc/openvpn/server.conf задаем путь через директиву crl-verify

crl-verify crl.pem

Перезапускаем сервер OpenVPN

# service openvpn restart

Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат, в логе сервера будет появляться строка о том что сертификат отозван: VERIFY ERROR: depth=0, error=certificate revoked. В логе OpenVPN клиента будет написано:

Wed Aug 25 14:28:09 2021 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Wed Aug 25 14:28:09 2021 TLS Error: TLS handshake failed

Эта процедуру нужно проделывать для отзыва каждого созданного вами сертификата.

Если у вас 2 сервера openvpn, вам следует переименовать crl.pem и в crl-verify задать файл со своим именем. Просто для второго сервера копируем и переименовываем crl.pem например в crltcp.pem. Если вы укажите один и тот же файл для разных OpebVPN серверов — ваши сервера будут падать.

Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN

Проблема: Если сервер подключён к ISP при помощи технологии Как работает PPPoE, в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:

# netstat -rn
Kernel IP routing table              
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0

Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс, такой записи сервер OpenVPN не понимает, для корректной работы сервера OpenVpn маршрут должен бы вида:

# netstat -rn
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         91.196.96.35    255.255.255.255 UGH       0 0          0 ppp0

Решение: Исправить маршрут по умолчанию можно командой (соответственно указав нужный вам IP)

route add 0/0 gw 91.196.96.35

или в скрипте при загрузке системы, но после поднятия интерфейса ppp0

route del default
route add default gw 91.196.96.35 dev ppp0

Окружение: Клиент выходит в интернет с Ubuntu 14.04.3 LTS + Настройка Dnsmasq Ubuntu установленной в Виртуализация при помощи VirtualBox. Сеть установлена в VirtualBox как сетевой мост. IP получается от Настройка DHCP сервера Linux, FreeBSD на интернет роутере (Netis WF2419R).

Проблема: Не работает push «dhcp-option DNS 10.26.95.254″. Соответственно все Раздел DNS: Что такое DNS Dnsmasq отсылает основному DNS серверу. Все бы ничего если бы клиенту не нужны локальные Раздел DNS: Что такое DNS.

Решение: Был доустановлен основной пакет

aptitude install dnsmasq

добавлены описания наших локальных зон (non-public domains) в конфигурационный файл dnsmasq.conf

server=/gaga.lan/10.26.95.254
server=/m86a.lan/10.26.95.254
server=/atlex.lan/10.26.95.254
 
server=/95.26.10.in-addr.arpa/10.26.95.254
server=/168.192.in-addr.arpa/10.26.95.254
server=/85.161.10.in-addr.arpa/10.26.95.254

В файле /etc/logrotate.d/openvpn прописываем настройки для приложения logrotate, ключевой параметр copytruncate (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл)

openvpn
etc/openvpn/servers/vpnluxor/logs/openvpn.log {
        daily
        rotate 8
        compress
        delaycompress
        missingok
        copytruncate
        notifempty
        create 640 root
}

Для управления сертификатами/клиентами сервера OpenVPN при помощи веб-интерфейса существует не так много программ:

Файл Машина Назначение Доступ
ca.crt Сервер и клиенты Сертификат корневого СА Публичный
ca.key Только на сервере Необходим для подписи других сертификатов Секретный
dh{n}.pem Только на сервере Diffie Hellman параметры Публичный
vpnspar.crt Только на сервере Сертификат сервера Публичный
vpnspar.key Только на сервере Ключ сервера Секретный
darkfire.crt Только на клиенте Сертификат клиента Публичный
darkfire.key Только на клиенте Ключ клиента Секретный

Подборка руководств по настройке сервера и клиентов OpenVPN.

В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов, которым я доверяю.

Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)

Поскольку VPN действует только в режиме точка-точка, может возникнуть желание расширить границы VPN так, чтобы клиенты могли связываться с другими машинами в сети сервера, а не только с самим сервером.

Чтобы проиллюстрировать это примером, предположим, что в локальной сети на стороне сервера используется подсеть 10.66.0.0/24 и для пула VPN-адресов используется 10.8.0.0/24, о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.

Во-первых, вы должны сообщить VPN-клиентам, что подсеть 10.66.0.0/24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:

push "route 10.66.0.0 255.255.255.0"

Далее, необходимо настроить на LAN— шлюзе в сети сервера маршрут для маршрутизации пакетов, предназначенных для подсети VPN-клиентов (10.8.0.0/24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN-шлюз – разные машины).

Убедитесь, что вы включили пересылку для IP (ip-forwarding) (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.

Проталкивание изменений DNS для перенаправления всего трафика через VPN.

Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.

Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway и удалите “;” из начала строки для расскоментирования redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Чуть ниже находится секция dhcp-option. Удалите “;” для обеих строк:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.

Интернет в современном обществе так же широко распространен как и любое коммунальное сооружение. Когда кто-то покупает дом или переезжает в новую квартиру, или бизнес переезжает в новое место, интернет является первой услугой в списке, за которой следует электричество, тепло, мусор и, возможно (но маловероятно) наземная линия или телефонная служба. Вы можете даже возразить, что современный квалификатор даже не нужен. С помощью таких программ, как One Laptop per Child, в сочетании с усилиями таких компаний как Facebook и Google, так называемые страны третьего мира, где нет водопроводов, канализации или даже телефонной связи, имеют Интернет.

Когда у вас есть развитая служба с большим количеством людей настанет момент, когда необходимо будет обеспечить безопасность и защиту данных, передаваемых по этой сети. В большинстве толп и больших скоплений людей есть более гнусный элемент, стремящийся воспользоваться теми, у кого меньше знаний. Виртуальные частные сети (VPN) были созданы из-за большой потребности в защищенной связи через незащищенную инфраструктуру. Первоначальная крупномасштабная сеть ARPANET имела очень низкую (если вообще имела) защиту и аутентификацию, а все остальные узлы были изначально доверенными. Сетевые ландшафты сегодня очень разные, и даже многие случайные, нетехнические пользователи осознают отсутствие безопасности своих соединений.

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

Вторая мировая война дала развитие многим величайшим достижениям в криптографии и защищенной связи. От таких устройств, как немецкая машина “Энигма” до Кодовых говорунов Навахо, надежная связь между войсками и командованием была бесконечной гонкой вооружений. Сегодня правительства и военные — не единственные группы, которые стремятся к уединению. Корпорации хотят поддерживать целостность данных и защиту стандартов индустрии платежных карт (PCI) для защиты потребителей. Члены семьи хотят обсуждать семейные дела по частным каналам, где сообщество в целом не может подслушивать. Другие хотят прорваться через национальные брандмауэры, предназначенные для наблюдения за населением и ограничения контента, считающегося спорным или противоречащим политике партии.

Каждый день большинство людей используют VPN или имеют возможность использовать VPN независимо от того, осознают они это или нет. Существует множество различных технологий VPN как от коммерческих поставщиков, так и в виде проектов с открытым исходным кодом. Одним из самых популярных программных проектов для VPN с открытым исходным кодом является OpenVPN. Цель этой книги — сделать вас мастером OpenVPN; вы узнаете не только технологию, лежащую в ее основе, но и рассуждения, логику и логистику всего, что связано с этим. В то время как эта книга будет упоминать и касаться коммерческого предложения от OpenVPN Technologies Inc., Access Server, основной акцент будет сделан на open source/community версию OpenVPN.

Что такое VPN?

Проще говоря, VPN позволяет администратору создавать “локальную” сеть между несколькими компьютерами в разных сегментах сети. В некоторых случаях эти машины могут находиться в одной и той же локальной сети, они могут быть удалены друг от друга через общедоступный Интернет или даже могут быть подключены через множество соединительных сред, таких как беспроводные восходящие каналы, спутниковая связь, коммутируемая сеть, и так далее. P в VPN происходит от дополнительной защиты (private), чтобы сделать эту виртуальную сеть приватной. Сетевой трафик, проходящий через VPN, часто называют внутри туннеля (VPN) по сравнению со всем другим трафиком за пределами туннеля.

На следующем рисунке показан сетевой трафик, который традиционно проходит через несколько сегментов сети и общий Интернет. Здесь этот трафик относительно открыт для проверки и анализа. Хотя защищенные протоколы, такие как HTTPS и SSH, менее уязвимы, их все же можно идентифицировать; если злоумышленник отслеживает сетевой трафик, он все еще может видеть, какой тип соединения установлен, с какого компьютера к какому серверу.

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

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

  • Банкоматы: банкоматы могут использовать VPN для более безопасного подключения к банковским системам.
  • Открытый/бесплатный Wi-Fi: С распространением бесплатных или публичных беспроводных сетей обычные пользователи могут использовать VPN для защиты своего интернет-серфинга.
  • Корпоративные сети: корпорации и другие организации могут использовать VPN для подключения нескольких офисов или даже целых центров обработки данных.
  • Сервисы GeoIP / Геолокации: некоторые веб-сайты предоставляют данные, основанные на географическом местоположении, используя базы данных GeoIP и другие записи. VPN может позволить вам “прыгать” через другую машину в месте, ближе к контенту, который вы действительно хотите. Интернет-видеосервисы, такие как Hulu, YouTube и Netflix, являются типичными примерами этого.
  • Обход цензуры / политической свободы: некоторые режимы, такие как в Северной Корее или Китае, имеют чрезвычайно ограничительные правила цензуры. “Великий брандмауэр Китая” — один из крайних примеров. Запрет доступа к Интернету во время политических восстаний, таких как «Арабская весна», пытается сдерживать и контролировать сообщения вне конфликта. Виртуальные частные сети могут помочь выйти за пределы этих ограничительных правил в более широкий Интернет.

Вот пример трафика внутри VPN. В то время как сама VPN маршрутизируется через Интернет, как на предыдущем рисунке, устройства по сетевому пути видят только трафик VPN; эти устройства совершенно не знают о том, что передается внутри частного туннеля. Защищенные протоколы, такие как HTTPS и SSH, по-прежнему будут защищены внутри туннеля от других пользователей VPN, но будут дополнительно неопознаваемы извне туннеля. VPN не только шифрует трафик внутри, но и скрывает и защищает отдельные потоки данных от потоков вне туннеля.

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

В большинстве реализаций VPN используется некоторая форма шифрования и, кроме того, аутентификация. Шифрование VPN гарантирует что другие стороны, которые могут отслеживать трафик между системами, не смогут декодировать и дополнительно анализировать конфиденциальные данные. Аутентификация состоит из двух компонентов, каждый в своем контексте.

Во-первых, существует аутентификация пользователя или системы, которая обеспечивает авторизацию тех, кто подключается к сервису. Этот тип аутентификации может быть в форме сертификатов для каждого пользователя или комбинации имени пользователя и пароля. Кроме того, могут быть согласованы правила, специфичные для данного пользователя, такие как конкретные маршруты, правила брандмауэра или другие сценарии и утилиты. Как правило, они уникальны для каждого экземпляра, хотя даже это можно настроить (когда используется OpenVPN, см. --duplicate-cn).

Вторым компонентом аутентификации является дополнительная защита потока связи. В этом случае устанавливается метод подписи каждого отправленного пакета. Каждая система проверяет, что полученные VPN-пакеты правильно подписаны, прежде чем расшифровывать полезную нагрузку. За счет аутентификации пакетов, которые уже зашифрованы, система может сэкономить время обработки, даже не расшифровывая пакеты, которые не соответствуют правилам аутентификации. В конце концов, это серьезно мешает потенциальной атаке Отказ в обслуживании (Denial of Service — DoS), а также срыве Атаки посредника (Man in the middle — MITM), предполагая что ключи подписи хранятся в безопасности!

Типы VPN

Есть множество продуктов VPN, доступных на рынке, как коммерческих, так и с открытым исходным кодом. Почти всех их можно разделить на следующие четыре категории:

  • протокол PPTP на основе VPN
  • протокол IPSec на основе VPN
  • SSL на основе VPN
  • OpenVPN

Некоторые люди утверждают что OpenVPN — это также VPN на основе SSL, поскольку он использует протокол SSL или TLS для установления безопасного соединения. Тем не менее, мы сделали отдельную категорию для OpenVPN, так как она отличается от любого другого SSL-решения VPN.

Теперь мы рассмотрим более подробно каждый из четырех типов VPN:

PPTP

Одним из самых старых протоколов VPN является Туннельный протокол типа точка-точка (Point-to-Point Tunneling Protoco — PPTP), разработанный Microsoft и Ascend в 1999 году. Он официально зарегистрирован как RFC2637 (полный стандарт см. https://www.ietf.org/rfc/rfc2637.txt). Клиент PPTP был включен в Windows с 1995 года и до сих пор входит в большинство операционных систем.

В настоящее время протокол PPTP считается принципиально небезопасным, так как степень безопасности соединения напрямую связана с силой выбранного механизма аутентификации (например, пароля). Таким образом, небезопасный пароль приводит к небезопасному VPN-соединению. Большинство настроек PPTP используют протокол MS-CHAPv2 для шифрования паролей и именно этот протокол существенно небезопасен. Безопасность протокола PPTP, включая расширения Microsoft MS-CHAPv2, обсуждалась в статье, доступной по адресу https://www.schneier.com/paper-pptpv2.html.

Также можно использовать сертификаты X.509 для защиты соединения PPTP, что приводит к довольно безопасному соединению. Однако не все клиенты PPTP поддерживают EAP-TLS, что необходимо для использования сертификатов X.509.

PPTP использует два канала: канал управления для настройки соединения и другой канал для передачи данных. Канал управления инициируется через TCP-порт 1723. Канал данных использует протокол General Routing Encapsulation (GRE), который является IP-протоколом 47. Для сравнения, «обычный» трафик TCP/IP передается с использованием IP-протокола 6 (TCP) и 17 (UDP).

Клиенты PPTP доступны практически во всех операционных системах от Windows до Linux и производных Unix, для устройств iOS и Android.

IPSec

Стандарт IPSec является официальным стандартом IEEE/IETF для защиты IP. Он официально зарегистрирован как RFC2411 (полный стандарт см. https://www.ietf.org/rfc/rfc2411.txt). IPSec также встроен в стандарт IPv6.

IPSec работает на уровне 2 и 3 сетевого стека модели OSI. Он вводит концепцию политик безопасности, что делает его чрезвычайно гибким и мощным, а также чрезвычайно сложным в настройке и устранении неполадок. Политики безопасности позволяют администратору шифровать трафик между двумя конечными точками на основе многих параметров, таких как IP-адрес источника и назначения, а также TCP и UDP-порты источника и назначения.

IPSec может быть настроен на использование предустановленных общих ключей или сертификатов X.509 для защиты VPN-подключения. Кроме того, для аутентификации VPN-подключения используются сертификаты X.509, одноразовые пароли или протоколы имени_пользователя/пароля.

В IPSec есть два режима работы: туннельный и транспортный режим. Транспортный режим чаще всего используется в сочетании с протоколом туннелирования 2 уровня (Layer 2 Tunneling Protocol — L2TP). Этот протокол L2TP выполняет аутентификацию пользователя, как описано в предыдущем разделе. Клиенты IPSec, встроенные в большинство операционных систем, обычно выполняют IPSec + L2TP, хотя также возможно установить соединение только для IPSec. VPN-клиент IPSec, встроенный в Microsoft Windows, по умолчанию использует IPSec + L2TP, но его можно отключить или обойти. Тем не менее он включает в себя команды шифрования и изменения политики безопасности.

Как и PPTP, IPSec также использует два канала: канал управления для настройки соединения и канал для передачи данных. Канал управления инициируется через UDP-порт 500 или 4500. Канал данных использует протокол Encapsulated Security Payload (ESP), который является IP-протоколом 50. Для сравнения, «обычный» трафик TCP/IP передается с использованием IP-протокола 6 (TCP) и 17 (UDP). Целостность пакетов IPSec обеспечивается с помощью кода аутентификации сообщений на основе хэша (Hash-based Message Authentication Code — HMAC), который является тем же методом, который используется в OpenVPN.

Одним из основных недостатков IPSec является то, что многие производители оборудования внедрили собственные расширения в стандарт, что затрудняет (если не делает невозможным) подключение двух конечных точек IPSec от разных производителей.

Программное обеспечение IPSec включено практически во все операционные системы, а также в микропрограммы межсетевого экрана, маршрутизатора и коммутатора.

VPN на основе SSL

В настоящее время наиболее часто используемый VPN — это VPN на основе SSL, основанный на протоколе SSL/TLS. VPN на основе SSL часто называют VPN без клиентского доступа или VPN на основе Интернета, хотя есть некоторые поставщики, которые предоставляют отдельное клиентское программное обеспечение, например Cisco AnyConnect и Microsoft SSTP. Большинство VPN на основе SSL используют тот же сетевой протокол, который используется для безопасности веб-сайтов (HTTPS), тогда как OpenVPN использует собственный формат для шифрования и подписи трафика данных. Это основная причина почему OpenVPN указан как отдельная категория VPN.

Не существует четко определенного стандарта для VPN на основе SSL, но большинство используют протокол SSL/TLS для настройки и защиты соединения. В большинстве случаев соединение защищено с помощью сертификатов X.509 с одноразовым паролем или протоколами имени_пользователя/пароля для аутентификации соединения. VPN на основе SSL очень похожи на соединения, используемые для защиты веб-сайтов (HTTPS) и часто используется один и тот же протокол и канал (TCP и порт 443).

Несмотря на то, что VPN на основе SSL часто называют веб-интерфейсом или бесклиенским, существует довольно много производителей, которые используют плагин для браузера или элемент управления ActiveX для «улучшения» VPN-соединения. Это делает VPN несовместимым с неподдерживаемыми браузерами или операционными системами.

OpenVPN

OpenVPN часто называют VPN на основе SSL, так как он использует протокол SSL/TLS для защиты соединения. Однако OpenVPN также использует HMAC в сочетании с алгоритмом дайджеста (или хеширования) для обеспечения целостности доставляемых пакетов. Он может быть настроен на использование предустановленных ключей, а также сертификатов X.509. Эти функции обычно не предлагаются другими VPN на основе SSL.

Кроме того, OpenVPN использует виртуальный сетевой адаптер (устройство tun или tap) в качестве интерфейса между программным обеспечением OpenVPN пользовательского уровня и операционной системой. В общем, любая операционная система, поддерживающая устройство tun/tap, может запускать OpenVPN. В настоящее время это ОС на основе Linux, Free/Open/NetBSD, Solaris, AIX, Windows и Mac OS, а также устройства iOS/Android. Для всех этих платформ необходимо установить клиентское программное обеспечение, которое отличает OpenVPN от клиентских или веб-сетей VPN.

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

OpenVPN имеет понятие канала управления и канала данных, которые зашифрованы и защищены по-разному. Однако весь трафик проходит через одно соединение UDP или TCP. Канал управления зашифрован и защищен с использованием SSL/TLS, канал данных зашифрован с использованием специального протокола шифрования.

Протокол и порт по умолчанию для OpenVPN — это UDP и порт 1194. Прежде чем IANA предоставила OpenVPN официальное назначение порта, старые клиенты (2.0-beta16 и старше) по умолчанию использовали порт 5000.

Сравнение VPN

Каждая из различных технологий VPN имеет свои особенности, преимущества и недостатки. Несмотря на то, что эта книга посвящена OpenVPN, существуют случаи, когда, например, VPN на основе IPSec подходит больше, в зависимости от требований пользователей.

Преимущества и недостатки PPTP

Основным преимуществом VPN на основе PPTP является встроенность программного обеспечения VPN-клиента в большинство операционных систем. Кроме того, время запуска для настройки и инициализации PPTP VPN-соединения довольно мало.

Недостатками VPN на основе PPTP являются отсутствие безопасности и параметров конфигурации как на стороне клиента, так и на стороне сервера. Кроме того, расширение EAP-TLS, которое позволяет использовать сертификаты X.509, полностью поддерживается только в Microsoft Windows, хотя существует патч для пакета pppd с открытым исходным кодом для включения поддержки EAP-TLS. Пакет pppd входит почти в каждый дистрибутив Linux. Кроме того, если нужно использовать EAP-TLS, то простота настройки PPTP VPN значительно уменьшается. Это связано с тем, что EAP-TLS требует настройки инфраструктуры открытого ключа, как IPSec и OpenVPN.

Другим существенным недостатком PPTP является использование протокола GRE, который плохо интегрируется с устройствами NAT.

Преимущества и недостатки IPSec

Преимуществами протокола IPSec являются его высокая безопасность, хорошая поддержка от различных производителей и платформ, включая маршрутизаторы xDSL и Wi-Fi, а также возможность использовать детализированные политики безопасности для управления потоком трафика.

Недостатки IPSec заключаются в том, что его общеизвестно сложно настраивать и устранять неисправности, разные реализации IPSec от разных поставщиков оборудования плохо работают вместе, а IPSec плохо интегрируется с сетями с NAT. В частности, не рекомендуется, а иногда даже невозможно, запустить сервер IPSec, который находится в сети с NAT.

Преимущества и недостатки VPN на основе SSL

Преимущество VPN на основе SSL или веб-интерфейса заключается в том, что клиентское программное обеспечение не задействовано или почти не используется. Это делает установку и инициализацию на стороне клиента очень простой.

Недостаток веб-сети VPN заключается в том, что она часто не является полноценной VPN и обеспечивает доступ к одному серверу или набору серверов. Также сложнее обмениваться локальными данными с удаленными точками или сервером.

Преимущества и недостатки OpenVPN

Преимуществами OpenVPN являются простота развертывания, его конфигурируемость и возможность развертывания OpenVPN в сетях с ограниченным доступом, включая сети с поддержкой NAT. Кроме того, OpenVPN включает функции безопасности, которые столь же сильны, как и решения на основе IPSec, в том числе безопасность аппаратного токена и поддержка различных механизмов аутентификации пользователей.

Недостатками OpenVPN являются отсутствие масштабируемости и зависимость от установки клиентского программного обеспечения. Еще одним недостатком является отсутствие графического интерфейса для настройки и управления. В частности, драйвер интерфейса tap для Microsoft Windows часто вызывал проблемы развертывания при выпуске новой версии Windows.

История OpenVPN

OpenVPN был первоначально написан Джеймсом Йонаном с первоначальным выпуском, версией 0.90 в 2001 году под лицензией GPL. Первоначальный выпуск позволял пользователям создавать простые VPN типа «точка-точка» по UDP с использованием шифра Blowfish и, опционально, подписи HAAC SHA1. С версией 1.0, проверка подлинности на основе TLS и обмен ключами были добавлены вместе со страницей man.

Улучшения для OpenVPN 1.x включали улучшенную поддержку TLS, защиту от повторов и перенос на другие операционные системы. Некоторые порты были включены для OpenBSD, Mac OS и улучшены пакеты для RedHat. До версии 1.1.1 устройство tun должно было настраиваться вручную вне OpenVPN. В этом выпуске добавлена опция --ifconfig, которая автоматически настраивала устройство tun, значительно упрощая общую настройку.

Серия 1.x была относительно сырой по сравнению с текущей версией OpenVPN 2.3.8, как и следовало ожидать от нового проекта. Одним из основных препятствий была интеграция OpenSSL. Поскольку OpenSSL был известен своей плохой или полностью отсутствующей документацией, разработчик должен был перейти непосредственно к исходному коду, чтобы интегрировать проект с OpenVPN. Так же на ранних этапах требовались изменения лицензии, чтобы позволить более специфичному общедоступному лицензионному коду GNU связываться с библиотекой OpenSSL не-GPL. Эти проблемы были проработаны, и в журнале изменений на протяжении серии 1.x были добавлены новые функции.

Некоторые заметные обновления в серии 1.x включают в себя:

  • 2001.05.13 (0.90): это был первый выпуск
  • 2002.03.23 (1.0): позволил TLS-аутентификацию и обмен ключами
  • 2002.04.09 (1.1.0): появился порт OpenBSD и соединение OpenSSL
  • 2002.04.22 (1.1.1): появилась опция --ifconfig
  • 2002.05.22 (1.2.0): здесь появились файлы конфигурации (вместо просто параметров командной строки, поддержка pthread и порт Solaris)
  • 2002.07.10 (1.3.0): улучшена поддержка FreeBSD и улучшена регистрация
  • 2002.10.23 (1.3.2): начальная поддержка IPv6 и больше улучшений для FreeBSD
  • 2003.05.07 (1.4.0): включены функции MTU
  • 2003.07.24 (1.5-beta1): поддержка TCP
  • 2003.11.03 (1.5-beta13): в нем появилась поддержка параметров конфигурации --http-proxy, --redirect-gateway и --crl-verify
  • 2004.02.01 (1.6-beta5): прокси SOCKS5 и IPv6 на FreeBSD
  • 2004.05.09 (1.6.0): это финальная версия 1.x

OpenVPN 2.0 видел большие успехи от выпусков 1.x. В версии 2.0 были предприняты усилия для обеспечения многоклиентных экземпляров сервера, улучшенной работы с потоками и улучшенного tun/tap адаптера Windows. Разработка для 2.0 пересекалась с 1.x более года, с начальными тестовыми выпусками для 2.0, датируемыми ноябрем 2003 года и финальной версией 1.x не выходившей до 9 мая 2004 года. Пока она была окончательно выпущена, 2.0 увидела 29 тестовых выпусков, 20 бета-релизов и 21 релиз-кандидат за полтора года усилий (с ноября 2003 года по апрель 2005 года).

Некоторые ключевые особенности релиза 2.0 по сравнению с 1.6.0 следующие:

  • Позволяет серверу принимать соединения от нескольких клиентов
  • Включает опцию config на стороне сервера push для клиентов (--push/--pull)
  • Позволяет аутентификацию по имени_пользователя/паролю
  • Поддерживает chroot и понижение привилегий демона (--user/--group/--chroot)
  • Поддерживает сценарии подключения клиента
  • Имеет интерфейс управления
  • Появление Easy-RSA

Разработка с 2.0 до 2.0.9 в основном состояла из исправлений ошибок и исправлений для нескольких уязвимостей безопасности. Помимо некоторых случайных вкладов от сторонних разработчиков, OpenVPN был разработан Джеймсом до выпуска 2.1. 2.0.9 оставался неизменным официальным выпуском с октября 2006 года до версии 2.1.0 в декабре 2009 года.

OpenVPN 2.1 был первым крупным выпуском с заметным количеством кода, написанного кем-то кроме Джеймса Йонана. Алон Бар-Лев внес значительный вклад, начиная с 2.1-beta3 со многими исправлениями для поддержки криптографии и поправками. Рассматривая первый реальный выпуск сообщества, 2.1 увидел большую работу в базовом ядре кода, включая интерфейс управления и сетевую адресацию. Некоторые заметные примечания к выпуску включают следующее:

  • 2005.11.12 (2.1-beta7): файлы ca, cert, key и dh могут быть указаны в файле конфигурации.
  • 2006.01.03 (2.1-beta8): добавлена подсеть --topology.
  • 2006.02.16 (2.1-beta9): было разрешено совместное использование портов, чтобы OpenVPN и HTTPS могли совместно использовать порт.
  • 2008.09.10 (2.1_rc10): предупреждает если используется общая подсеть 192.168.0.0/24 или 192.168.1.0/24. --server-bridge был добавлен для поддержки DHCP-прокси.
  • 2010.08.09 (2.1.2): у него была система сборки Windows на основе Python с улучшенной обработкой AUTH_FAIL для интерфейса управления.
  • 2010.11.09 (2.1.4): это был последний выпуск серии 2.1.

В августе 2008 года официального релиза с 2.0.9 не было. Кроме того, было мало поддержки со стороны сообщества, кроме списка рассылки. Был интерес к созданию сообщества и Кризе Кинг и Эрик Крист подталкивали к созданию сообщества вокруг проекта. Изначально все усилия были направлены на поддержку пользователей.

Поскольку группа людей, поддерживающих OpenVPN, росла, это привлекало людей, которые могли писать хороший код. Был установлен контакт с OpenVPN Inc. с целью не только обеспечить более высокий уровень поддержки OpenVPN, но также создать и расширить программное обеспечение, которое написал Джеймс, но попытки сотрудничества были отвергнуты.

Начались переговоры по Internet Relay Chat (IRC), который является средством коммуникации, предпочитаемым многими разработчиками, для переноса проекта, чтобы можно было добиться прогресса. Разработка началась; некоторые участники управляли IRC и помогали в списках рассылки. Другие создали репозиторий, вики и веб-форум. Среднее использование было примерно 2 сообщения в день на форуме и около 8 пользователей в IRC.

В начале 2009 года OpenVPN Technologies наняли Самули Сеппанена чтобы помочь создать сообщество с открытым исходным кодом и взаимодействовать с ним. Самули способствовал установлению прочных отношений между корпорацией, энтузиастами и волонтерами. Было построено сильное сообщество вокруг проекта. Сегодня на форуме в среднем 16 сообщений в день (всего более 35 000 сообщений), а IRC колеблется от 150 до 250 пользователей в любой день.

OpenVPN 2.2 был первым выпуском после перехода к более ориентированной на сообщество модели разработки. После выяснения модели развития и направления, сообщество решило двигаться с проектом, и сразу же началась работа.

Первоначально для OpenVPN 2.2 Джеймс по-прежнему полностью контролировал то, что было объединено с основным исходным деревом, так как дерево все еще управлялось с использованием подверсий у OpenVPN Technologies. Позже дерево исходных текстов было перенесено в GIT, а роли поменялись местами, где изменения Джеймса были приняты и объединены в дерево проектов с открытым исходным кодом.

Заметные изменения в OpenVPN 2.2:

  • открытый текст аутентификации SOCKS
  • Улучшена поддержка платформы для подсети --topology
  • Режим tap для Solaris
  • Сборка Windows скомпилирована с включением ENABLE_PASSWORD_SAVE
  • Поддержка Windows IPv6 tun
  • Клиентские сертификаты могут быть опущены с поведением, аналогичным веб-браузеру (--client-cert-not-required)
  • Клиентские сертификаты теперь могут указывать отдельное имя пользователя вместо использования общего имени сертификата (--x509-username-field)
  • Была удалена поддержка для Windows 2000 и более ранних выпусков
  • 2011.04.26 была выпущена версия 2.2.0
  • 2011.07.06 версия 2.2.1 была выпущена с небольшими изменениями, в основном связанными со сборкой/установкой
  • 2011.12.22 версия 2.2.2 была выпущена с изменениями tap-драйвера Windows

OpenVPN 2.3 — начало серьезного поворота в структуре сборки OpenVPN. Вкратце, конечная цель — создать более расширяемый и удобный источник для плагинов. Поскольку сборка для мобильных платформ, таких как Android и iOS, уже требует переписывания с нуля, Джеймс и другие разработчики почистили старый код в пользу более компактных и нормализованных функций. Эти переписывания сделаны на C++, в отличие от используемого языка C.

Хотя они и перечислены в журнале изменений предыдущих версий, поддержка IPv6, как полезной нагрузки, так и транзита в OpenVPN, действительно не достигла зрелости до выпуска 2.3. Подавляющее большинство вкладов в поддержку IPv6 было результатом тяжелой работы Герт Деринг.

Еще одной важной особенностью выпуска 2.3 было добавление поддержки PolarSSL. PolarSSL — это альтернативная криптографическая библиотека для OpenSSL, и теперь OpenVPN может быть создан на основе любой библиотеки. Эта тема более подробно обсуждается далее в этой главе.

Список улучшений и дополнений для выпуска 2.3 огромен, но основные моменты заключаются в следующем (полный журнал изменений находится по адресу https://community.openvpn.net/openvpn/wiki/ChangesInOpenvpn23):

  • Кроссплатформенная поддержка IPv6 (транзит и полезная нагрузка)
  • API нового плагина
  • Поддержка создания PolarSSL и подготовка других потенциальных альтернатив
  • Теперь клиенты могут информировать сервер о поддержке LZO и сервер может автоматически отключить LZO для этого клиента
  • Обходной путь для локальных конфликтов маршрутизации (--client-nat)
  • Новый режим каталога --crl-verify, файлы с одинаковыми именами отключают сертификаты, как если бы они были отозваны
  • Поддержка сертификатами UTF-8 для полей сертификата
  • Разделение проекта по различным подпроектам:
    • Основной проект OpenVPN
    • tap-Windows
    • Easy-RSA
    • Система сборки OpenVPN
  • Завершение клиентских соединений из интерфейса управления

Версия 2.3.8 была самой последней версией на момент написания.

Пакеты OpenVPN

В Интернете доступно несколько пакетов OpenVPN:

  • Версия OpenVPN с открытым исходным кодом или версия сообщества
  • OpenVPN Access Server, коммерческое предложение с закрытым исходным кодом от OpenVPN Inc.
  • Версии OpenVPN для мобильных платформ Android и iOS (часть кода с закрыта по требованию Apple)

Версия с открытым исходным кодом (сообщество)

Версии OpenVPN с открытым исходным кодом становятся доступными после публикации каждого выпуска. Сообщество располагает ресурсами для создания бинарных пакетов для нескольких платформ, включая как 32-х, так и 64-разрядных клиентов Windows. Доступные в настоящее время варианты загрузки находятся по адресу http://openvpn.net/index.php/download/community-downloads.html.

Некоторые сопровождающие пакетов операционной системы отслеживают разработку и делают доступными выпуски моментальных снимков. FreeBSD, например, имеет порт security/openvpn-devel, который отслеживает еженедельные снимки тарболла из разработки OpenVPN. Если вы хотите запустить последнюю и самую передовую версию OpenVPN — сначала посмотрите на сопровождающего вашего пакета. В противном случае вы всегда можете собрать напрямую из исходников.

Версия OpenVPN от сообщества может выступать как в качестве VPN-сервера, так и в качестве VPN-клиента. Нет отдельной только клиентской версии.

Закрытые исходники (коммерческий) Access Server

OpenVPN Technologies Inc. предлагает коммерческую версию OpenVPN под названием Access Server. По сравнению с проектом с открытым исходным кодом, Access Server предлагает множество функций и вариантов развертывания, которые могут понравиться некоторым организациям. Access Server является платным продуктом, но на сайте доступна пробная версия с двумя лицензионными ключами.

Пакеты программ, виртуальные устройства и облачные сервисы все доступны от OpenVPN Technologies Inc. на https://openvpn.net/index.php/access-server/overview.html.

OpenVPN Access Server включает в себя собственный клиент OpenVPN — OpenVPN Connect для Windows и Mac OS. Это клиентское программное обеспечение обычно работает только с OpenVPN Access Server. Также можно использовать версию сообщества в качестве клиента для OpenVPN Access Server.

Мобильная платформа (смешанная) OpenVPN/OpenVPN Connect

Для мобильных устройств, таких как iPhone/iPad и Android, OpenVPN Technologies Inc. предоставляет специальный OpenVPN Connect Client. OpenVPN Technologies Inc. и Джеймс специально приложили немало усилий и юридически спорили с такими компаниями как Google и Apple, чтобы получить доступ к используемому VPN API на каждой платформе.

Из-за особенностей NDA Apple, в настоящее время исходные коды OpenVPN Connect недоступны и не могут быть открыты для общего доступа. Клиент iOS OpenVPN Connection можно загрузить из Apple App Store по адресу https://itunes.apple.com/us/app/openvpn-connect/id590379981?mt=8.

Есть Android-клиенты, написанные несколькими разработчиками, но официально поддерживается только версия OpenVPN for Android, написанная Арне Швабе, которую можно найти по адресу https://play.google.com/store/apps/details?id=de.blinkt.openvpn&hl=ru.

OpenVPN Connect, написанный OpenVPN Technologies Inc. также доступен. Вы можете загрузить клиент Android OpenVPN Connect по адресу https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ru.

Одним из серьезных преимуществ OpenVPN Connect является то, что он поддерживает/поддерживается как общедоступной версией OpenVPN, так и OpenVPN Access Server с закрытым исходным кодом. Если вам нужен доступ к обоим типам серверов — рекомендуется OpenVPN Connect.

Другие платформы

Некоторые производители оборудования пытаются интегрировать поддержку OpenVPN в свои устройства. Некоторые предлагают версии прошивки для VoIP-телефонов, которые включают более старую версию OpenVPN. Другие проекты микропрограмм, такие как DD-WRT для маршрутизаторов Linksys, а также проекты FreeNAS, pfSense и другие также интегрируют OpenVPN.

Внутренности OpenVPN

Конструкция OpenVPN не документирована, но большинство внутренних возможностей OpenVPN можно обнаружить взглянув на исходный код.

Драйвер tun/tap

Одним из основных составных блоков OpenVPN является драйвер tun/tap. Концепция драйвера tun/tap происходит из мира Unix/Linux, где он часто доступен как часть операционной системы. Это виртуальный сетевой адаптер, который обрабатывается операционной системой как двухточечный адаптер (в стиле tun) для трафика только по IP или как полноценный виртуальный адаптер Ethernet для всех типов трафика (в стиле tap). В основе этого адаптера находится приложение, такое как OpenVPN, для обработки входящего и исходящего трафика. Linux, Free/Open/NetBSD, Solaris и Mac OS включают в себя драйвер ядра tun, который может работать как в стиле tun, так и в стиле tap. Недавно аналогичный драйвер был добавлен в AIX — производную Unix от IBM.

Для Microsoft Windows Джеймс Йонан написал специальный драйвер NDIS, называемый адаптером TAP-WIN32. На данный момент доступны версии драйверов NDIS5 и NDIS6, поддерживающие Windows XP через Windows 8.1. Разработка этого адаптера теперь официально отделена от основной разработки OpenVPN, но OpenVPN по-прежнему сильно зависит от него.

Поток трафика из пользовательского приложения через OpenVPN изображен на предыдущей диаграмме. На схеме приложение отправляет трафик на адрес, доступный через туннель OpenVPN. Шаги следующие:

  1. Приложение передает пакет операционной системе.
  2. ОС решает, используя обычные правила маршрутизации, что пакет должен маршрутизироваться через VPN.
  3. Пакет затем пересылается на устройство ядра — tun.
  4. Устройство ядра tun пересылает пакет в процесс OpenVPN (в пользовательском пространстве).
  5. Процесс OpenVPN шифрует и подписывает пакет, фрагментирует его при необходимости, а затем снова передает его ядру, чтобы отправить на адрес удаленной конечной точки VPN.
  6. Ядро забирает зашифрованный пакет и перенаправляет его на удаленную конечную точку VPN, где происходит обратный процесс.

На этой диаграмме также видно, что производительность OpenVPN всегда будет ниже, чем у обычного сетевого подключения. Для большинства приложений потеря производительности минимальна и/или приемлема. Однако для скоростей, превышающих 1 Гбит/с, существует узкое место в производительности как с точки зрения пропускной способности, так и с точки зрения задержки.

Следует отметить, что производительность драйвера Windows намного ниже, чем производительность встроенных адаптеров tun/tap в других операционных системах. Это верно даже для самой последней реализации драйвера TAP-Win32 в NDIS6. Для одного клиента OpenVPN влияние довольно мало, но для крупномасштабного сервера OpenVPN, обслуживающего множество клиентов, легко может вызвать проблемы с производительностью. Это одна из основных причин того, почему сообщество разработчиков исходного кода обычно рекомендует использовать хост на основе Unix или Linux в качестве сервера OpenVPN.

Режимы UDP и TCP

OpenVPN в настоящее время поддерживает два способа обмена данными между конечными точками: использование пакетов UDP или TCP. UDP — это протокол без установления соединения или с потерями; если пакет отбрасывается при передаче, то сетевой стек не может прозрачно исправить это. TCP-пакеты — это протокол, ориентированный на соединение; пакеты отправляются и доставляются с использованием протокола квитирования, обеспечивая доставку каждого пакета на другую сторону.

Оба способа общения имеют свои преимущества и недостатки. На самом деле это зависит от типа трафика, который отправляется через VPN-туннель, для определения более подходящего режима связи. Использование приложения на основе TCP через VPN на основе TCP может привести к двойной потере производительности, особенно если основное сетевое соединение не работает. В этом случае повторная передача потерянных пакетов выполняется для пакетов, потерянных как внутри, так и вне туннеля, что приводит к удвоению нагрузки. Это хорошо объясняется в статье «Почему TCP через TCP — плохая идея» на http://sites.inka.de/~W1011/devel/tcp-tcp.html.

Однако аналогичным образом можно утверждать, что отправка UDP через UDP также не является хорошей идеей. Если приложение, использующее UDP для своего трафика, подвержено атакам удаления сообщений или переупорядочения пакетов, то основное зашифрованное TCP-соединение повысит безопасность таких приложений даже в большей степени, чем базовая VPN на основе UDP. Если большая часть трафика через VPN основана на UDP, то иногда лучше использовать TCP-соединение между конечными точками VPN.

При выборе между транспортным протоколом UDP или TCP общее практическое правило следующее: если UDP (режим udp) работает для вас, используйте его; если нет, то попробуйте TCP (режим tcp-server и режим tcp-client). Некоторые коммутаторы и маршрутизаторы неправильно перенаправляют трафик UDP, что может быть проблемой, особенно если к одному коммутатору или маршрутизатору подключено несколько клиентов OpenVPN. Точно так же на производительность OpenVPN через TCP может сильно повлиять выбор интернет-провайдеров (ISP): некоторые интернет-провайдеры используют нечетные размеры MTU или правила фрагментации пакетов, что приводит к крайне низкой производительности OpenVPN через TCP по сравнению с незашифрованным TCP-трафиком.

Протокол шифрования

Было сказано, что OpenVPN реализует TLS через UDP. Это более или менее верно, но то, как OpenVPN использует TLS, отличается от того, как его использует веб-браузер. Таким образом, когда OpenVPN запускается по протоколу TCP (использование порта 443 является распространенным методом для защиты межсетевых экранов), трафик можно отличить от обычного трафика TLS. Брандмауэр, использующий Deep Packet Inspection (DPI), может легко отфильтровать трафик OpenVPN.

Основное различие между OpenVPN-TLS и браузер-TLS заключается в способе подписи пакетов. OpenVPN предлагает функции для защиты от DoS-атак, подписывая пакеты канала управления с помощью специального статического ключа (--tls-auth ta.key 0|1). Пакеты канала данных, отправляемые через одно и то же соединение UDP или TCP, подписываются совершенно по-разному и очень легко отличаются от трафика HTTPS. На сайте OpenVPN (http://openvpn.net) показано, как зашифрованы пакеты для транспорта UDP, что показано ниже.

Тот же механизм используется для транспорта TCP (http://openvpn.net/index.php/open-source/documentation/security-overview.html).

Это также основная причина, по которой совместное использование портов, когда OpenVPN и защищенный веб-сервер используют один и тот же IP-адрес и номер порта, может работать.

Каналы управления и передачи данных

OpenVPN использует два виртуальных канала для связи между клиентом и сервером:

  • Канал управления TLS для обмена информацией о конфигурации и шифрованием между клиентом и сервером. Этот канал используется в основном при запуске VPN-подключения, а также для обмена новыми материалами ключей шифрования. Этот материал обновляется через определенный период (на основе параметров --reneg-sec, --reneg-bytes или --reneg-pkts).
  • Канал данных, по которому осуществляется обмен зашифрованной полезной нагрузкой.

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

Шифрование и аутентификация (подпись) для канала управления и канала данных определяются по-разному. Канал управления инициируется с использованием протокола в стиле TLS, аналогично тому, как инициируется безопасное подключение к веб-сайту. Во время инициализации канала управления шифрование и алгоритм хеширования согласовываются между клиентом и сервером.

Алгоритмы шифрования и аутентификации для канала данных не подлежат обсуждению, но они устанавливаются в файлах конфигурации клиента и сервера для OpenVPN. Текущими настройками по умолчанию являются Blowfish в качестве алгоритма шифрования и SHA1 в качестве алгоритма хеширования. Возможность согласования алгоритмов шифрования и хеширования для канала данных занимает важное место в списке пожеланий группы разработчиков, но требует значительных изменений в коде.

Алгоритмы шифрования и хеширования

OpenVPN поддерживает широкий спектр алгоритмов шифрования и хеширования. Они используются для шифрования полезной нагрузки, а функция HMAC использует алгоритм дайджеста или хеширования для аутентификации входящих пакетов. Поскольку OpenVPN использует канал управления и канал данных, существует два набора алгоритмов шифрования и хеширования, которые можно настроить.

Алгоритмы шифрования канала управления и хеширования обычно согласовываются при запуске. Список доступных комбинаций шифрования и хеширования можно отобразить с помощью следующей команды:

Доступные варианты шифрования TLS перечислены в порядке предпочтения:

TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384
TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384
TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA
TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA
TLS-DHE-DSS-WITH-AES-256-GCM-SHA384
TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
TLS-DHE-DSS-WITH-AES-256-CBC-SHA256
TLS-DHE-RSA-WITH-AES-256-CBC-SHA
TLS-DHE-DSS-WITH-AES-256-CBC-SHA
TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA
TLS-DHE-DSS-WITH-CAMELLIA-256-CBC-SHA
TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384
[…]

Этот вывод был получен на хосте CentOS 6 с использованием библиотеки OpenSSL 1.0.1e.

Доступные комбинации во многом зависят от конкретной версии используемой библиотеки SSL. Вы можете указать список tls-шифров в файле конфигурации OpenVPN способом, очень похожим на настройку модуля Apache mod_ssl:

tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSAWITH-AES-256-CBC-SHA384
:TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384

Перечислите все шифры в одну строку; предыдущий вывод был изменен для удобства чтения.

Для канала данных алгоритмы шифрования и хеширования управляются с помощью параметров --cipher и --auth. Если алгоритмы шифрования и аутентификации не указаны, то используются значения по умолчанию bf-cbc и sha1, соответственно.

Чтобы получить список доступных алгоритмов шифрования используйте следующую команду:

Следующие алгоритмы и режимы шифрования доступны для использования с OpenVPN. Каждый показанный здесь шифр может использоваться в качестве параметра опции --cipher. Размер ключа по умолчанию отображается независимо от того, может ли он быть изменен с помощью директивы --keysize. Рекомендуется использовать режим CBC. В режиме статического ключа допускается только режим CBC:

[…]
BF-CBC 128 bit default key (variable)
BF-CFB 128 bit default key (variable) (TLS client/server mode)
BF-OFB 128 bit default key (variable) (TLS client/server mode)
[…]
AES-128-CBC 128 bit default key (fixed)
AES-128-OFB 128 bit default key (fixed) (TLS client/server mode)
AES-128-CFB 128 bit default key (fixed) (TLS client/server mode)
AES-192-CBC 192 bit default key (fixed)
AES-192-OFB 192 bit default key (fixed) (TLS client/server mode)
AES-192-CFB 192 bit default key (fixed) (TLS client/server mode)
AES-256-CBC 256 bit default key (fixed)
AES-256-OFB 256 bit default key (fixed) (TLS client/server mode)
AES-256-CFB 256 bit default key (fixed) (TLS client/server mode)
[…]

В этом выводе показаны только наиболее часто используемые шифры. Список доступных шифров снова зависит от точной версии базовой библиотеки шифрования. Однако в большинстве случаев должны быть доступны шифры Blowfish (BF-*) и AES (AES-*).

Точно так же для алгоритмов аутентификации (HMAC-подписи) мы используем следующую команду, чтобы перечислить все доступные параметры:

Следующие дайджесты сообщений доступны для использования с OpenVPN. Дайджест сообщения используется вместе с функцией HMAC для аутентификации полученных пакетов. Вы можете указать дайджест сообщения в качестве параметра опции --auth:

[…]
SHA 160 bit digest size
SHA1 160 bit digest size
[…]
ecdsa-with-SHA1 160 bit digest size
[…]
SHA256 256 bit digest size
SHA384 384 bit digest size
SHA512 512 bit digest size
SHA224 224 bit digest size

В этом выводе показаны только наиболее часто используемые дайджесты или алгоритмы хеширования. Список доступных дайджестов зависит от точной версии базовой библиотеки шифрования. В большинстве случаев должны быть доступны алгоритмы хэширования семейства SHA-1 и SHA-2.

Начиная с OpenVPN 2.3, добавлена ​​поддержка новой библиотеки SSL. Библиотека PolarSSL (http://polarssl.org) может быть скомпилирована вместо библиотеки OpenSSL по умолчанию. Основная причина добавления второй библиотеки состояла в том, чтобы обеспечить независимость лежащих в основе библиотек шифрования и гарантировать, что никаких проблем с авторским правом не возникнет, поскольку лицензия на авторские права OpenSSL отличается от той, которую использует OpenVPN.

Резюме

В этой главе мы начали с объяснения что такое VPN. Затем обсудили некоторые примеры различных типов протоколов VPN, включая PPTP, IPSec и OpenVPN. После краткого обзора истории OpenVPN мы приступили к более глубокому погружению в методы, используемые в OpenVPN. Эти методы включают адаптер tun/tap и используемые алгоритмы шифрования и подписывания пакетов.

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

Понравилась статья? Поделить с друзьями:
  • Geberit renova compact инструкция по установке
  • Департамент строительства росгвардии руководство
  • Руководство пользователя по цифрам
  • Айфа ац 200мг инструкция по применению
  • Сироп корня солодки инструкция по применению взрослым при кашле взрослым