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

Режим работы OpenVPN (клиент или сервер) в основном определяется его файлом конфигурации.
Важно
Требования к конфигурации OpenVPN для использования в Keenetic:
Конфигурация должна быть выполнена в виде одного файла.
Сертификаты, ключи и т.п. должны быть включены в этот файл.
В конфигурации необходимо использовать только опции, перечисленные в документе: OpenVPN 2.4 ManPage
Некоторые опции, из описанных по ссылке выше, могут не поддерживаться. Например, в нашей реализации 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).

Будем подключать к серверу на Keenetic#1 (Home-сегмент 192.168.1.0/24, адрес конца туннеля: 10.1.0.1) клиент Keenetic#2 (Home-сегмент 192.168.2.0/24, адрес конца туннеля: 10.1.0.2).
Сначала рассмотрим самую простую конфигурацию с использованием общего секретного ключа (secret key).
Минимальная конфигурация OpenVPN-сервера для Keenetic#1:
dev tun ifconfig 10.1.0.1 10.1.0.2 cipher AES-128-CBC <secret> <--insert the secret key here </secret> verb 3 route 192.168.2.0 255.255.255.0
Минимальная конфигурация OpenVPN-клиента для Keenetic#2:
dev tun remote KEENETIC-1.mykeenetic.net <-- server's domain name or IP address ifconfig 10.1.0.2 10.1.0.1 cipher AES-128-CBC <secret> <--insert the secret key here </secret> verb 3 route 192.168.1.0 255.255.255.0 or redirect-gateway def1 or route 0.0.0.0 0.0.0.0 <-- if it's neccessary to route all the traffic in the tunnel
Сгенерируйте общий секретный ключ. Для чего скачайте и установите OpenVPN отсюда: openvpn.net/downloads.html
В нашем примере будем использовать версию 2.4.6-I602 для Windows.
После установки ПО выполните перезагрузку компьютера.
По умолчанию программа установится в папку
C:\Program Files\OpenVPN.Запустите командную строку Windows от имени администратора. Зайдите в папку
C:\Program Files\OpenVPN\binи выполните команду:openvpn.exe --genkey --secret static.key

Откройте сгенерированный файл
static.keyс общим секретным ключом в любом текстовом редакторе (например, в Блокноте), скопируйте его содержимое в буфер обмена (Ctrl-A,Ctrl-C) и вставьте (Ctrl-V) в соответствующие места файлов конфигурации клиента и сервера.Посмотрите примеры файлов конфигурации static-server.ovpn для Keenetic#1 и static-client.ovpn для Keenetic#2 с общим секретным ключом. В этих файлах есть и другие закомментированные (начинаются с символа "
;") настройки OpenVPN, которые вы можете задействовать при необходимости позже. Можете использовать эти файлы конфигурации для проверки, заменив вstatic-client.ovpnдоменное имяKEENETIC-1.mykeenetic.ruна доменное имя вашего Keenetic#1 или на его публичный белый IP-адрес, а наш общий секретный ключ на сгенерированный вами в обеих файлах.Зайдите в веб-интерфейс Keenetic#1 на страницу "Другие подключения" и в разделе "VPN-подключения" нажмите "Добавить подключение". В окне "Параметры VPN-подключения" в поле "Тип (протокол)" выберите значение "OpenVPN".
Затем в поле "Имя подключения" впишите имя соединения и в поле "Конфигурация OpenVPN" вставьте содержимое файла конфигурации
static-server.ovpn. Сохраните настройки.
Важно
Начиная с версии ОС
3.4.1сервер работает только при указании в поле "Подключаться через" значения "Любое интернет-подключение".По аналогии добавьте OpenVPN-соединение в веб-интерфейсе Keenetic#2, но с конфигурацией
static-client.ovpn:
Дополнительно, на стороне 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. По умолчанию используется порт
UDP/1194. Для этого на странице "Межсетевой экран" создайте правило для интерфейса "Провайдер" или для того интерфейса, который используется для доступа в Интернет (помимо "Провайдер", им могут быть интерфейсы PPPoE, L2TP или PPTP).
В правиле межсетевого экрана выберите в поле "Действие" значение "Разрешить", в поле "Протокол" значение "UDP" и в поле "Номер порта назначения" значение "Равен
1194".После создания подключения переведите переключатель в состояние Включено.

На этом настройка туннеля OpenVPN завершена. На странице "Другие подключения" будет отображаться статус и статистика подключения.
Для проверки попробуйте выполнить пинг обоих концов туннеля:
ping 10.1.0.1 ping 10.1.0.2
а затем удаленные подсети:
ping 192.168.1.1 ping 192.168.2.1
Примечание
Подключенные к серверу клиенты OpenVPN будут отображаться на странице "Список клиентов" в списке "Незарегистрированные клиенты". Если у вас на странице "Мои сети и Wi-Fi" в разделе "Правила использования интернет-трафика" выбран профиль "Без доступа в интернет", то не забудьте зарегистрировать также и OpenVPN-клиентов, если необходимо предоставить им доступ Интернет.
Конфигурация интерфейса OpenVPN не записывается в файл резервной копии настроек startup-config.txt. Для резервного копирования, рекомендуем сохранить настройки интерфейса OpenVPN в отдельном файле.
Если подключение клиента OpenVPN нужно использовать для выхода в Интернет, назначьте этому соединению самый высокий приоритет. Информацию о приоритетах вы найдете в статье "Приоритеты подключений".
В некоторых случаях в конфигурации OpenVPN необходимо указать логин и пароль для авторизации при подключении VPN-туннеля. Для этого в файле конфигурации нужно добавить специальную секцию
auth-user-pass, указав значения логина и пароля. Например:<auth-user-pass> vpnclient # login r3d23xs87 # password </auth-user-pass>
Пример создания ключей и сертификатов на Windows, для подключения к серверу OpenVPN, показан в инструкции "Конфигурация OpenVPN с использованием двусторонней TLS аутентификации".
Типовые ошибки и пути решения:
auth-user-pass without inline credentials data is not supportedЭто означает, что в файле конфигурации осталась строка для онлайн ввода логина/пароля, который не поддерживается Keenetic. Ошибка в журнале Keenetic:
OpenVPN0 auth-user-pass without inline credentials data is not supported OpenVPN0 Exiting due to fatal error
Удалите или закомментируйте все строки вида:
auth-user-passОшибка опции
block-outside-dnsblock-outside-dnsопция настраивается для OpenVPN-сервера, которая правильно обрабатывается только в Windows. В журнале 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
Добавьте следующую строку в конфигурации OpenVPN-клиента:
pull-filter ignore "block-outside-dns"Ошибка при соединении с серверами 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При использовании опции askpass
/storage/key.txtвозникает ошибка:Error: private key password verification failed
Это ограничение текущей реализации OpenVPN в Keenetic. Можно использовать только ключ без пароля или с фиксированным паролем: "
password".После обновления роутера до версии ПО 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. Error: private key password verification failed
Дело в устаревшем формате шифрования BF-CBC, который не поддерживается начиная с версии клиента OpenVPN
2.5.0(в версии KeeneticOS3.9используется клиент OpenVPN2.6.0).Примечание
Из конфигурации по умолчанию убрана поддержка
BF-CBC. В OpenVPN2.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-POLY1305data-ciphers-fallback AES-128-CBCили
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305data-ciphers-fallback AES-256-CBCВажно
Шифрование зависит от удаленного OpenVPN-сервера. Перед изменением директивы
cipherсмотрите лог подключения.Если в логе зафиксирована следующая ошибка размера ключа:
[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.Error: private key password verification failed
То в конфигурации туннеля необходимо убрать директиву опции размера ключа
keysize 256, которая устарела для обновленного клиента OpenVPN2.6.0, после проверьте подключение туннеля.Подробную информацию по опции "
keysize" вы найдете по ссылке.
Рекомендуем ознакомиться со следующей информацией: