Клиент и сервер OpenVPN

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

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

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

openvpn-comp.png

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

NOTE: Важно! В интернет-центре Keenetic используются строгие требования к конфигурации OpenVPN. Ниже перечислены основные требования:

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

Важно! Для моделей Keenetic с индексом KN-1110, 1210, 1310, 1410, 1510, 1610, 1710, 1810, 1910 число клиентских подключений ограничивается выделенным служебным размером раздела памяти объемом 24 Кбайта для хранения VPN-конфигураций. Особенно это актуально для OpenVPN-соединений, т.к. суммарный размер их конфигураций не должен превышать 24 Кбайта.
Для современных моделей Keenetic с индексом KN-xxxx увеличен размер хранилища, в которое помещаются в сжатом виде файл конфигурации startup-config и переменные окружения (в том числе ключи), и составляет от 260 Кбайт до 2 Мбайт (в зависимости от модели).

Рассмотрим пример подключения 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

NOTE: Важно! Начиная с версии KeeneticOS 3.4.1 сервер работает только при указании в "Подключаться через" - "Любое интернет-подключение".

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 10.1.0.2 255.255.255.255


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

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

 

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

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

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

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

4. В некоторых случаях в конфигурации OpenVPN необходимо указать логин и пароль для авторизации при подключении VPN-туннеля. Для этого в файле конфигурации нужно добавить специальную секцию auth-user-pass, указав значения логина и пароля. Например:

<auth-user-pass>
vpnclient     # логин
r3d23xs87     # пароль

</auth-user-pass>​

5. Пример создания ключей и сертификатов на Windows, для подключения к серверу OpenVPN, показан в инструкции "Конфигурация OpenVPN с использованием двусторонней TLS аутентификации".

TIP: Типовые ошибки и пути решения:

1. Ошибка в журнале Keenetic:

OpenVPN0 auth-user-pass without inline credentials data is not supported
OpenVPN0 Exiting due to fatal error

Это означает, что в файле конфигурации осталась строка для онлайн ввода логина/пароля, который не поддерживается в Keenetic. Удалите или закомментируйте все строки вида:

auth-user-pass

2. В журнале Keenetic сообщение об ошибке:

OpenVPN0 Unrecognized option or missing or extra parameter(s) in configuration: (line X): block-outside-dns (2.4.4)
OpenVPN0 Exiting due to fatal error

Подробную информацию об ошибке и её решение вы найдете в статье "Ошибка "Unrecognized option or missing or extra parameter(s) in configuration" при установке OpenVPN-подключения".

3. Ошибка при соединении с серверами PrivateTunnel

При попытке соединения выдается ошибка:

OpenVPN0 Unrecognized option or missing or extra parameter(s) in configuration: (line 3): client-ip (2.4.4)

Добавьте в файл конфигурации клиента OpenVPN строку:

ignore-unknown-option client-ip block-ipv6

4. При использовании опции askpass /storage/key.txt возникает ошибка:

Error: private key password verification failed

Это ограничение текущей реализации OpenVPN в Keenetic. Можно использовать только ключ без пароля или с фиксированным паролем: "password".

5. После обновления роутера до версии ПО KeeneticOS 3.9.1 может перестать устанавливаться VPN-туннель до сервера OpenVPN. В логе при этом можно увидеть следующие сообщения:

W [Dec 15 16:52:58] OpenVPN6: DEPRECATED OPTION: --cipher set to 'AES-128-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305). OpenVPN ignores --cipher for cipher negotiations.

Дело в устаревшем формате шифрования BF-CBC, который не поддерживается начиная с версии клиента OpenVPN 2.5.0 (в версии KeeneticOS 3.9 используется клиент OpenVPN 2.6.0). Подробная информация представлена по ссылке.

Цитата: "Из конфигурации по умолчанию убрана поддержка BF-CBC. В OpenVPN 2.5.0 по умолчанию теперь принимаются только шифры AES-256-GCM и AES-128-GCM. Изменить данное поведение можно при помощи опции data-ciphers, например, указав в настройках data-ciphers AES-256-GCM:AES-128-GCM:BF-CBC, а для поддержки очень старых узлов, не поддерживающих согласование шифров (режим "--cipher"), можно указать data-ciphers-fallback BF-CBC.
При обновлении до новой версии OpenVPN настройка "cipher BF-CBC" в старых файлах конфигурации будет преобразована в добавление BF-CBC к набору data-ciphers и включен режим data-ciphers-fallback."

Для успешной установки туннеля потребуется изменить директиву:
cipher AES-128-CBC на data-ciphers AES-128-CBC или data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305

Если не заработает, то тогда измените директиву:
cipher AES-128-CBC на data-ciphers-fallback AES-128-CBC

Для максимальной совместимости согласования шифров с удаленным сервером укажите директивы:
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
data-ciphers-fallback AES-128-CBC

или

data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
data-ciphers-fallback AES-256-CBC

Важно! Шифрование зависит от удаленного OpenVPN-сервера. Перед изменением директивы cipher смотрите лог подключения.

6. Если в логе зафиксирована следующая ошибка размера ключа:

[E] Dec 16 19:01:38 OpenVPN0: Unrecognized option or missing or extra parameter(s) in configuration: (line 22): keysize (2.6_git)
[E] Dec 16 19:01:38 OpenVPN0: Exiting due to fatal error
[E] Dec 16 19:01:38 ndm: Service: "OpenVPN0": unexpectedly stopped.

То в конфигурации туннеля необходимо убрать директиву опции размера ключа keysize 256, которая устарела для обновленного клиента OpenVPN 2.6.0, ​после проверьте подключение туннеля.
Подробную информацию по опции "keysize" вы найдете по ссылке.

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

 

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

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