OpenVPN-сервер на Keenetic

В ОС NDMS v2.10 был добавлен OpenVPN-клиент. А можно ли настроить OpenVPN-сервер?

Да, если установлен компонент с названием Клиент OpenVPN, интернет-центр Keenetic можно использовать как клиент и как сервер. Режим работы OpenVPN в основном определяется его файлом конфигурации. В режиме сервера на Keenetic понадобится дать лишь несколько дополнительных команд.

Рассмотрим пример.
openvpn.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
или
route 0.0.0.0 0.0.0.0 <-- если необходимо заворачивать в туннель весь трафик

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

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

1.4 Откройте сгенерированный файл static.key с общим секретным ключом в Блокноте (Notepad) Windows, скопируйте его содержимое в буфер обмена (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 и в меню Интернет на закладке PPPoE/VPN добавьте соединение. Убедитесь, что установлена галочка Включить. Выберите Тип (протокол) - OpenVPN и вставьте в окно Конфигурация OpenVPN содержимое файла конфигурации static-server.ovpn:

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



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

interface OpenVPN0 no ip global
interface OpenVPN0 security-level private

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

ip nat OpenVPN0

и сохраните настройки командой system configuration save

1.8 И наконец, необходимо открыть порт для соединения OpenVPN. По умолчанию используется UDP port 1194. Для этого в меню Безопасность на закладке Межсетевой экран, выберите Правила для интерфейса - Broadband connection (ISP) и нажмите Добавить.

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

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



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

ping 10.1.0.1
ping 10.1.0.2

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

ping 192.168.1.1
ping 192.168.2.1

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

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

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

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

 

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

init-config.bat

В результате мы получим файл vars.bat, который настраивает среду для генерирования ваших ключей и сертификатов.
Откройте этот файл в Блокноте (Notepad) 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

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

vars
build-ca

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

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

vars
build-dh

В результате в папке C:\Program Files\OpenVPN\easy-rsa\keys появится файл dh4096.pem

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

vars
build-key-server Keenetic-1

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

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

vars
build-key Keenetic-2

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

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

vars
build-key Keenetic-3

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

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

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

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

Для использования в конфигах OpenVPN-сервера и клиентов нам понадобятся следующие файлы:
ca.crt – сертификат удостоверяющего центра
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 этой инструкции.

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

mceclip17.png

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

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

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

Дополнительная информация. 

Документация по OpenVPN 2.4
https://ru.wikipedia.org/wiki/OpenVPN
https://ru.wikipedia.org/wiki/TUN/TAP


KB-5258

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

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

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

Комментарии

Комментариев: 6

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