Клиент и сервер 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. Установить компонент системы можно на странице "Общие настройки" в разделе "Обновления и компоненты", нажав "Изменить набор компонентов".
Режим работы OpenVPN (клиент или сервер) в основном определяется его файлом конфигурации.
Важно
Требования к конфигурации OpenVPN для использования в Keenetic:
Конфигурация должна быть выполнена в виде одного файла.
Сертификаты, ключи и т.п. должны быть включены в этот файл.
В конфигурации необходимо использовать только опции, перечисленные в документе: OpenVPN 2.4 ManPage
Некоторые опции, из описанных по ссылке выше, могут не поддерживаться. Например, в нашей реализации OpenVPN не поддерживаются опции, относящиеся к IPv6.
Порядок следования опций и включенных сертификатов и ключей не имеет значения.
Ключи OpenSSL нужно задавать без пароля, т.к. в интерфейсе Keenetic'а нет опции для его ввода.
Файл конфигурации OpenVPN не сохраняется в резервной копии конфигурации устройства
startup-config
. Для получения резервной копии настроек интерфейса клиента OpenVPN его нужно сохранить отдельно.
Число клиентских подключений ограничивается выделенным служебным размером раздела памяти объемом 24 Кбайта
для хранения VPN-конфигураций. Особенно это актуально для OpenVPN-соединений, т.к. суммарный размер их конфигураций не должен превышать 24 Кбайта
.
Рассмотрим пример подключения 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-адрес, а наш общий секретный ключ на сгенерированный вами в обеих файлах.Зайдите в веб-интерфейс 1-го Keenetic на страницу "Другие подключения" и в разделе "VPN-подключения" нажмите "Добавить подключение". В окне "Параметры VPN-подключения" в поле "Тип (протокол)" выберите значение "OpenVPN".
Затем в поле "Имя подключения" впишите имя соединения и в поле "Конфигурация OpenVPN" вставьте содержимое файла конфигурации
static-server.ovpn
. Сохраните настройки.Важно
Начиная с версии KeeneticOS
3.4.1
сервер работает только при указании в "Подключаться через" — "Любое интернет-подключение".По аналогии добавьте OpenVPN-соединение в веб-интерфейсе второго Keenetic, но с конфигурацией
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 будут отображаться на странице "Список устройств" в списке "Незарегистрированные устройства". Если у вас на странице "Домашняя сеть" в разделе "Профиль доступа для незарегистрированных устройств" выбран профиль "Без доступа в Интернет", то не забудьте зарегистрировать также и OpenVPN-клиентов, если необходимо предоставить им доступ Интернет.
Конфигурация интерфейса OpenVPN не записывается в файл резервной копии настроек startup-config.txt. Для резервного копирования, рекомендуем сохранить настройки интерфейса OpenVPN в отдельном файле.
Если подключение клиента OpenVPN нужно использовать для выхода в Интернет, назначьте этому соединению самый высокий приоритет. Информацию о приоритетах вы найдете в статье "Приоритеты подключений".
Типовые ошибки и пути решения:
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-dns
block-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-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
смотрите лог подключения.Если в логе зафиксирована следующая ошибка размера ключа:
[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
" вы найдете по ссылке.
Рекомендуем ознакомиться со следующей информацией: