OpenVPN — один из самых популярных протоколов для организации VPN-соединения. С его помощью можно создать виртуальную частную сеть или объединять локальные сети. OpenVPN имеет открытый исходный код и бесплатно распространяется под лицензией GNU GPL. OpenVPN можно назвать одним из самых безопасных протоколов. Все передаваемые данные надежно защищены при помощи библиотеки шифрования OpenSSL и протоколов SSLv3/TLSv1, что обеспечивает высокую безопасность и анонимность.
В интернет-центре Keenetic для подключения OpenVPN реализованы такие возможности как режим TCP и UDP, аутентификация TLS, использование сертификатов и ключей шифрования для повышения уровня безопасности VPN-подключения.
NOTE: Важно! Интернет-центр Keenetic, на котором будет работать сервер OpenVPN, должен быть подключен к Интернету с белым IP-адресом, а при использовании доменного имени KeenDNS, оно должно быть настроено в режиме "Прямой доступ", для которого также требуется публичный IP-адрес. При несоблюдении любого из этих условий подключение к такому серверу из Интернета будет невозможно.
Для настройки подключения OpenVPN обязательно нужно установить компонент системы "Клиент и сервер OpenVPN". Установить компонент системы можно на странице "Общие настройки" в разделе "Обновления и компоненты", нажав "Изменить набор компонентов".
Режим работы 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).
Будем подключать к серверу на 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
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. Сохраните настройки.
NOTE: Важно! Начиная с версии KeeneticOS 3.4.1 сервер работает только при указании в "Подключаться через" - "Любое интернет-подключение".
1.6. По аналогии добавьте OpenVPN-соединение в веб-интерфейсе второго Keenetic, но с конфигурацией static-client.ovpn:
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
1.8. И наконец, необходимо открыть порт для соединения 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-клиента:
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" вы найдете по ссылке.
Рекомендуем ознакомиться со следующей информацией:
- Документация по OpenVPN 2.4
- https://ru.wikipedia.org/wiki/OpenVPN
- https://ru.wikipedia.org/wiki/TUN/TAP
- Возможно ли создание OpenVPN-сервера типа TAP?
- Объединение локальных сетей через OpenVPN