Сервер OpenVPN

OpenVPN — один из самых популярных протоколов для организации VPN-соединения. С его помощью можно создать виртуальную частную сеть или объединять локальные сети. OpenVPN имеет открытый исходный код и бесплатно распространяется под лицензией GNU GPL. Он обеспечивают более высокую скорость соединения по сравнению с другими протоколами VPN. Кроме этого, OpenVPN можно назвать одним из самых безопасных протоколов. Все передаваемые данные надежно защищены при помощи библиотеки шифрования OpenSSL и протоколов SSLv3/TLSv1, что обеспечивает высокую безопасность и анонимность.

NOTE: Важно! Интернет-центр Keenetic, на котором будет работать сервер OpenVPN, должен быть подключен к Интернету с белым IP-адресом, а при использовании доменного имени KeenDNS, оно должно быть настроено в режиме "Прямой доступ". При несоблюдении любого из этих условий подключение к такому серверу из Интернета будет невозможно.

Для настройки подключения OpenVPN обязательно нужно установить компонент системы "Клиент OpenVPN". С этим компонентом интернет-центр Keenetic можно использовать как клиент и как сервер OpenVPN. Подробное описание режима клиента вы найдете в статье "Клиент OpenVPN". Установить компонент системы можно на странице "Общие настройки" в разделе "Обновления и компоненты", нажав "Изменить набор компонентов".

 openvpn-c-01.png

Режим работы OpenVPN (клиент или сервер) в основном определяется его файлом конфигурации.

NOTE: Важно! Требования к конфигурации OpenVPN для использования в Keenetic:

  • Конфигурация должна быть выполнена в виде одного файла.
  • Сертификаты, ключи и т.п. должны быть включены в этот файл.
  • В конфигурации необходимо использовать только опции, перечисленные в документе: https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
  • Некоторые опции, из описанных по ссылке выше, могут не поддерживаться. Например, в нашей реализации OpenVPN не поддерживаются опции, относящиеся к IPv6.
  • Порядок следования опций и включенных сертификатов и ключей не имеет значения.
  • Файл конфигурации OpenVPN не сохраняется в резервной копии конфигурации устройства startup-config. Для получения резервной копии настроек интерфейса клиента OpenVPN его нужно сохранить отдельно.

Рассмотрим пример подключения OpenVPN типа "точка-точка" (site-to-site).

openvpn-site-to-site.png

Будем подключать к серверу на Keenetic#1 (Home-сегмент 192.168.1.0/24, адрес конца туннеля: 10.1.0.1) клиент Keenetic#2 (Home-сегмент 192.168.2.0/24, адрес конца туннеля: 10.1.0.2).

1. Сначала рассмотрим самую простую конфигурацию с использованием общего секретного ключа (secret key).

1.1. Минимальная конфигурация OpenVPN-сервера для Keenetic#1:

dev tun
ifconfig 10.1.0.1 10.1.0.2
cipher AES-128-CBC
<secret>
  <--Сюда вставим общий секретный ключ
</secret>
verb 3
route 192.168.2.0 255.255.255.0


1.2. Минимальная конфигурация OpenVPN-клиента для Keenetic#2:

dev tun
remote KEENETIC-1.mykeenetic.ru <-- доменное имя или IP-адрес сервера
ifconfig 10.1.0.2 10.1.0.1
cipher AES-128-CBC
<secret>
  <--Сюда вставим общий секретный ключ
</secret>
verb 3
route 192.168.1.0 255.255.255.0
или 
redirect-gateway def1 
или 
route 0.0.0.0 0.0.0.0 <-- если необходимо заворачивать в туннель весь трафик


1.3. Сгенерируйте общий секретный ключ. Для чего скачайте и установите OpenVPN отсюда: https://openvpn.net/index.php/download/community-downloads.html 
В нашем примере будем использовать версию 2.4.6-I602 для Windows.
После установки ПО выполните перезагрузку компьютера.
По умолчанию программа установится в папку C:\Program Files\OpenVPN.
Запустите командную строку Windows от имени администратора. Зайдите в папку C:\Program Files\OpenVPN\bin и выполните команду:

openvpn.exe --genkey --secret static.key


openvpn01.png

1.4. Откройте сгенерированный файл static.key с общим секретным ключом в любом текстовом редакторе (например, в  Блокноте), скопируйте его содержимое в буфер обмена (Crl-A, Ctr-C) и вставьте (Ctr-V) в соответствующие места файлов конфигурации клиента и сервера.

Примеры файлов конфигурации static-server.ovpn для Keenetic#1 и static-client.ovpn для Keenetic#2 с общим секретным ключом приложены в конце этой статьи. В этих файлах есть и другие закомментированные (начинаются с символа ";") настройки OpenVPN, которые вы можете задействовать при необходимости позже. Можете использовать эти файлы конфигурации для проверки, заменив в static-client.ovpn доменное имя KEENETIC-1.mykeenetic.ru на доменное имя вашего Keenetic#1 или на его публичный белый IP-адрес, а наш общий секретный ключ на сгенерированный вами в обеих файлах.

1.5. Зайдите в веб-интерфейс 1-го Keenetic на страницу "Другие подключения" и в разделе "VPN-подключения" нажмите "Добавить подключение". В окне "Параметры VPN-подключения" в поле "Тип (протокол)" выберите значение "OpenVPN".
Затем в поле "Имя подключения" впишите имя соединения и в поле "Конфигурация OpenVPN" вставьте содержимое файла конфигурации static-server.ovpn. Сохраните настройки.

openvpn02.png

1.6. По аналогии добавьте OpenVPN-соединение в веб-интерфейсе второго Keenetic, но с конфигурацией static-client.ovpn:

openvpn03.png

1.7. Дополнительно, на стороне Keenetic#1 (сервера), через интерфейс командной строки (CLI) интернет-центра необходимо будет выполнить следующие команды:

interface OpenVPN0 no ip global
interface OpenVPN0 security-level private


Чтобы разрешить трафик между интерфейсами Home и OpenVPN0, которые имеют уровень безопасности private, выполните команду:

no isolate-private


Если планируете использовать этот сервер в том числе для выхода в Интернет клиента, то еще выполните команду:

ip nat OpenVPN0


и сохраните настройки командой:

system configuration save


openvpn-cli.png

1.8. И наконец, необходимо открыть порт для соединения OpenVPN. По умолчанию используется порт UDP/1194. Для этого на странице "Межсетевой экран" создайте правило для интерфейса "Провайдер" или для того интерфейса, который используется для доступа в Интернет (помимо "Провайдер", им могут быть интерфейсы PPPoE, L2TP или PPTP).

openvpn04.png

В правиле фильтрации выберите в поле "Действие" значение "Разрешить", в  поле "Протокол" значение "UDP" и в поле "Номер порта назначения" значение "Равен 1194".

openvpn05.png

На этом настройка туннеля OpenVPN завершена. Об успешной установке туннеля можно судить по сообщениям в системном журнале (на странице "Диагностика"):

openvpn-log.png

Для проверки попробуйте выполнить пинг обоих концов туннеля:

ping 10.1.0.1
ping 10.1.0.2


а затем удаленные подсети:

ping 192.168.1.1
ping 192.168.2.1


Пример пинга из локальной сети OpenVPN-клиента:

openvpn-ping.png

2. Конфигурация с использованием двусторонней TLS аутентификации.

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

Рассмотрим пример создания ключей и сертификатов на Windows для подключения к серверу Keenetic-1 двух клиентов Keenetic-2 и Keenetic-3.

Для создания всех необходимых ключей и сертификатов нам понадобится набор скриптов EasyRSA, из состава уже используемого нами пакета OpenVPN версии 2.4.6-I602 для Windows, который использует также входящую в его состав утилиту openssl. 
Для установки EasyRSA пометьте компонент "EasyRSA 2 Certificate Management Scripts" при установке OpenVPN:

openvpn07.png

2.1. Откройте командную строку Windows от имени администратора. 
Зайдите в папку C:\Program Files\OpenVPN\easy-rsa и запустите:

init-config.bat


openvpn08.png

В результате мы получим файл vars.bat, который настраивает среду для генерирования ваших ключей и сертификатов. 
Откройте этот файл в Блокноте Windows и задайте папку для их хранения, по умолчанию keys:

set KEY_DIR=keys


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

set KEY_COUNTRY=RU
set KEY_PROVINCE=YourProvince <--ваша область/район
set KEY_CITY=YourCity <--ваш город
set KEY_ORG=YourOrganisation <--ваша организация
set KEY_EMAIL=mail@example.ru <--ваш e-mail
set KEY_CN=CommonName <--имя хоста
set KEY_NAME=KeyName <--имя ключа
set KEY_OU=OrganisationUnit <--ваше подразделение в организации


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

2.2. Создайте новые вспомогательные файлы index.txt и serial, выполнив (выполняется однократно) в командной строке Windows:

vars
clean-all


openvpn09.png 

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

vars
build-ca


openvpn10.png

В папке C:\Program Files\OpenVPN\easy-rsa\keys появятся сгенерированные файлы ключа ca.key и сертификата ca.cert вашего удостоверяющего центра.

2.4. Создайте файл Диффи-Хелмана для защиты трафика от расшифровки. Он понадобится для использования сервером TLS. В некоторых случаях процедура может занять значительное время (например, при размере ключа 4096 бит занимает десятки минут), но делается однократно:

vars
build-dh


openvpn11.png

В папке C:\Program Files\OpenVPN\easy-rsa\keys появится файл dh2048.pem (или dh4096.pem при использовании размера ключа 4096 бит).

2.5. Создайте закрытый ключ и сертификат для OpenVPN TLS-сервера (Keenetic-1), выполнив:

vars
build-key-server Keenetic-1


При этом, когда скрипт запросит Common Name (CN), введите имя сервера, в нашем примере – Keenetic-1. А в конце дважды подтвердите (y), что подписываете сертификат.

openvpn12.png

2.5. Создайте закрытый ключ, запрос PEM и сертификат для первого OpenVPN TLS-клиента (Keenetic-2), выполнив:

vars
build-key Keenetic-2


Когда скрипт запросит Common Name (CN), введите имя первого клиента – Keenetic-2. Дважды подтвердите (y), что подписываете сертификат.

openvpn13.png

2.6. Повторите предыдущий пункт для второго клиента (Keenetic-3):

vars
build-key Keenetic-3


Когда скрипт запросит Common Name (CN), введите имя второго клиента – Keenetic-3. Дважды подтвердите (y), что подписываете сертификат.
Аналогичным образом можно создать ключи, запросы и сертификаты для произвольного числа клиентов.

2.7. Создайте ключ HMAC для дополнительной защиты от DoS-атак и флуда, выполнив:

vars
openvpn.exe --genkey --secret keys\ta.key


openvpn14.png

На этом все необходимые файлы созданы:

openvpn15.png

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

ca.crt – сертификат удостоверяющего центра
dh2048.pem (или dh4096.pem) – файл Диффи-Хелмана
Keenetic-1.crt – сертификат сервера OpenVPN (Keenetic-1)
Keenetic-1.key – закрытый ключ сервера OpenVPN (Keenetic-1)
Keenetic-2.crt - сертификат 1-го клиента OpenVPN (Keenetic-2)
Keenetic-2.key – закрытый ключ 1-го клиента OpenVPN (Keenetic-2)
Keenetic-3.crt - сертификат 2-го клиента OpenVPN (Keenetic-3)
Keenetic-3.key – закрытый ключ 2-го клиента OpenVPN (Keenetic-3)
ta.key - ключ HMAC для дополнительной защиты от DoS-атак и флуда

Осталось только добавить их содержимое в текстовые файлы конфигурации сервера и клиентов.

2.8. Для создания файла конфигурации сервера OpenVPN возьмите за основу пример server.ovpn, расположенный в папке C:\Program Files\OpenVPN\sample-config\ в тело которого потребуется вставить полученные нами ключи и сертификаты следующим образом:

2.8.1. Замените строку:

ca ca.crt


на секцию:

<ca>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата удостоверяющего центра из файла ca.crt
-----END CERTIFICATE-----
</ca>


2.8.2. Замените:

cert server.crt


на секцию:

<cert>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата сервера OpenVPN из файла Keenetic-1.crt
-----END CERTIFICATE-----
</cert>


2.8.3. Замените строку: 

key server.key


на секцию:

<key>
-----BEGIN PRIVATE KEY-----
  <--Сюда вставьте тело закрытого ключа сервера OpenVPN из файла Keenetic-1.key
-----END PRIVATE KEY-----
</key>


2.8.4. Замените строку: 

dh dh2048.pem


на секцию:

<dh>
-----BEGIN DH PARAMETERS-----
  <--Сюда вставьте содержимое файла Диффи-Хелмана dh4096.pem 
-----END DH PARAMETERS-----
</dh>


2.8.5. Раскомментируйте строку: 

topology subnet


2.8.6. Закомментируйте строку:

;ifconfig-pool-persist ipp.txt


2.8.7. Замените строку:

tls-auth ta.key 0


на секцию

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
  <--Сюда вставьте содержимое файла ta.key
-----END OpenVPN Static key V1-----
</tls-auth>


и добавьте строку:

key-direction 0


2.8.8. Закомментируйте строку:

;status openvpn-status.log


2.9. Для создания файла конфигурации первого клиента OpenVPN возьмите за основу пример client.ovpn, расположенный в папке C:\Progran Files\OpenVPN\sample-config\ в тело которого потребуется вставить полученные нами ключи и сертификаты следующим образом:

2.9.1. В строке: 

remote my-server-1 1194


замените my-server-1 на доменное имя или публичный IP-адрес вашего OpenVPN-сервера (Keenetic-1).

2.9.2. Замените строку: 

ca ca.crt


на секцию:

<ca>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата удостоверяющего центра из файла ca.crt
-----END CERTIFICATE-----
</ca>


2.9.3. Замените строку:

cert client.crt


на секцию:

<cert>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата первого клиента OpenVPN из файла Keenetic-2.crt
-----END CERTIFICATE-----
</cert>


2.9.4. Замените строку: 

key client.key


на секцию:

<key>
-----BEGIN PRIVATE KEY-----
  <--Сюда вставьте тело закрытого ключа первого клиента OpenVPN из файла Keenetic-2.key
-----END PRIVATE KEY-----
</key>


2.9.5. Замените строку 

tls-auth ta.key 1


на секцию

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
  <--Сюда вставьте содержимое файла ta.key
-----END OpenVPN Static key V1-----
</tls-auth>


и добавьте строку:

key-direction 1


2.9.6. Добавьте строку с маршрутом в локальную сеть сервера:

route 192.168.1.0 255.255.255.0


или

route 0.0.0.0 0.0.0.0 


если необходимо весь трафик направлять в туннель.

2.10. Повторите аналогичные действия для второго клиента, взяв данные из файлов Keenetic-3.crt и Keenetic-3.key соответственно.

Примеры полученных таким образом файлов конфигураций для трех Keenetic приложены в конце статьи: 
tls-server-keenetic-1.ovpn
tls-client-keenetic-2.ovpn
tls-client-keenetic-3.ovpn
Можете использовать их, заменив в клиентских имя KEENETIC-1.mykeenetic.ru на доменное имя или публичный ip-адрес вашего сервера Keenetic-1, а сертификаты и ключи на сгенерированный вами во всех файлах.

Теперь осталось лишь загрузить их на роутеры Keenetic по аналогии с пунктами 1.5, 1.6 и выполнить действия, описанные в пунктах 1.7, 1.8 этой инструкции.

На этом настройка закончена. Проверьте, что туннели установились.

Для этого со стороны клиентов запустите ping на адрес туннеля сервера:

ping 10.8.0.1


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

ping 192.168.1.1

 

TIP: Совет: В приведенном во второй части примере, для простоты мы производили все операции в одной папке, хотя для безопасности рекомендуется размещать удостоверяющий центр на отдельном компьютере, изолированном от Интернет, и хранить секретный ключ только на нем, а сертификат переносить на съемном носителе. Аналогично закрытые ключи сервера и клиентов OpenVPN должны размещаться только на соответствующих сторонах, связываемых туннелем. Обмениваться можно только сертификатами.

TIP: Примечание

1. Подключенные к серверу клиенты OpenVPN будут отображаться на странице "Список устройств" в списке "Незарегистрированные устройства". Если у вас на странице "Домашняя сеть" в разделе "Профиль доступа для незарегистрированных устройств" выбран профиль "Без доступа в Интернет", то не забудьте зарегистрировать также и OpenVPN-клиентов, если необходимо предоставить им доступ Интернет.

2. Конфигурация интерфейса OpenVPN не записывается в файл резервной копии настроек startup-config.txt. Для резервного копирования, рекомендуем сохранить настройки интерфейса OpenVPN в отдельном файле.

TIP: Совет: Рекомендуем ознакомиться со следующей информацией:

 

Была ли эта статья полезной?

Пользователи, считающие этот материал полезным: 0 из 0

Еще есть вопросы? Отправить запрос

Комментарии

0 комментариев

Войдите в службу, чтобы оставить комментарий.