Skip to main content

Руководство пользователя

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

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

В интернет-центре Keenetic для подключения OpenVPN реализованы такие возможности как режим TCP и UDP, аутентификация TLS, использование сертификатов и ключей шифрования для повышения уровня безопасности VPN-подключения.

Важно

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

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

openvpn-server1-en.png

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

Важно

Требования к конфигурации OpenVPN для использования в Keenetic:

  • Конфигурация должна быть выполнена в виде одного файла.

  • Сертификаты, ключи и т.п. должны быть включены в этот файл.

  • В конфигурации необходимо использовать только опции, перечисленные в документе: OpenVPN 2.4 ManPage

  • Некоторые опции, из описанных по ссылке выше, могут не поддерживаться. Например, в нашей реализации OpenVPN не поддерживаются опции, относящиеся к IPv6.

  • Порядок следования опций и включенных сертификатов и ключей не имеет значения.

  • Ключи OpenSSL нужно задавать без пароля, т.к. в интерфейсе Keenetic'а нет опции для его ввода.

  • Файл конфигурации OpenVPN не сохраняется в резервной копии конфигурации устройства startup-config. Для получения резервной копии настроек интерфейса клиента OpenVPN его нужно сохранить отдельно.

Число клиентских подключений ограничивается выделенным служебным размером раздела памяти объемом 24 Кбайта для хранения VPN-конфигураций. Особенно это актуально для OpenVPN-соединений, т.к. суммарный размер их конфигураций не должен превышать 24 Кбайта.

Рассмотрим пример подключения OpenVPN типа "точка-точка" (site-to-site).

openvpn-server2-en.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).

  • Сначала рассмотрим самую простую конфигурацию с использованием общего секретного ключа (secret key).

    1. Минимальная конфигурация 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
    2. Минимальная конфигурация 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
    3. Сгенерируйте общий секретный ключ. Для чего скачайте и установите 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
      openvpn-server3-en.png
    4. Откройте сгенерированный файл static.key с общим секретным ключом в любом текстовом редакторе (например, в  Блокноте), скопируйте его содержимое в буфер обмена (Ctrl-ACtrl-C) и вставьте (Ctrl-V) в соответствующие места файлов конфигурации клиента и сервера.

      Посмотрите примеры файлов конфигурации static-server.ovpn для Keenetic#1 и static-client.ovpn для Keenetic#2 с общим секретным ключом. В этих файлах есть и другие закомментированные (начинаются с символа ";") настройки OpenVPN, которые вы можете задействовать при необходимости позже. Можете использовать эти файлы конфигурации для проверки, заменив в static-client.ovpn доменное имя KEENETIC-1.mykeenetic.ru на доменное имя вашего Keenetic#1 или на его публичный белый IP-адрес, а наш общий секретный ключ на сгенерированный вами в обеих файлах.

    5. Зайдите в веб-интерфейс 1-го Keenetic на страницу "Другие подключения" и в разделе "VPN-подключения" нажмите "Добавить подключение". В окне "Параметры VPN-подключения" в поле "Тип (протокол)" выберите значение "OpenVPN".

      Затем в поле "Имя подключения" впишите имя соединения и в поле "Конфигурация OpenVPN" вставьте содержимое файла конфигурации static-server.ovpn. Сохраните настройки.

      openvpn-server4-en.png

      Важно

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

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

      openvpn-server5-en.png
    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-server6-en.png
    8. И наконец, необходимо открыть порт для соединения OpenVPN. По умолчанию используется порт UDP/1194. Для этого на странице "Межсетевой экран" создайте правило для интерфейса "Провайдер" или для того интерфейса, который используется для доступа в Интернет (помимо "Провайдер", им могут быть интерфейсы PPPoE, L2TP или PPTP).

      openvpn-server7-en.png

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

      openvpn-server8-en.png

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

      openvpn-server9-en.png

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

      ping 10.1.0.1
      ping 10.1.0.2

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

      ping 192.168.1.1
      ping 192.168.2.1

Примечание

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

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

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

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

  1. 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

  2. Ошибка опции 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"

  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.
    Error: private key password verification failed

    Дело в устаревшем формате шифрования 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.Error: private key password verification failed

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

    Подробную информацию по опции "keysize" вы найдете по ссылке.

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