Skip to main content

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

OpenVPN с использованием двусторонней TLS аутентификации

Минус метода аутентификации, при помощи общего секретного ключа в OpenVPN, состоит в том, что хищение его с одного из участвующих в сети VPN-хостов, влечет за собой необходимость смены этого ключа у всех участников. При этом встает вопрос, как безопасно передать новый ключ через небезопасный интернет-канал. Поэтому, при необходимости подключить к серверу нескольких клиентов, выбирают аутентификацию TLS.

В этом случае каждая сторона имеет свой собственный закрытый ключ, который никуда не передается. Передается только сертификат открытого ключа клиента, подписанный удостоверяющим центром CA. Такие сертификаты выдаются специализированными организациями на определенный срок за деньги. Но для организации VPN внутри своей компании, если не предъявляются специальные требования к безопасности, можно использовать свой собственный удостоверяющий центр.

Рассмотрим пример создания ключей и сертификатов на Windows для подключения к серверу Keenetic-1 двух клиентов Keenetic-2 и Keenetic-3.

Для создания всех необходимых ключей и сертификатов нам понадобится набор скриптов EasyRSA, из состава уже используемого нами пакета OpenVPN версии 2.4.6-I602 для Windows, который использует также входящую в его состав утилиту openssl.

Для установки EasyRSA пометьте компонент "EasyRSA 2 Certificate Management Scripts" при установке OpenVPN:

openvpn-server10-en.png

В версиях OpenVPN 2.5.x чтобы установить скрипты EasyRSA, нужно на первом экране установщика нажать кнопку "Customize" и прокрутить список компонентов в самый низ.

openvpn-server11-en.png
openvpn-server12-en.png

Откройте командную строку Windows от имени администратора.

  1. Зайдите в папку C:\Program Files\OpenVPN\easy-rsa и запустите:

    init-config.bat
    openvpn-server13-en.png

    В результате мы получим файл vars.bat, который настраивает среду для генерирования ваших ключей и сертификатов.

    Откройте этот файл в Блокноте Windows и задайте папку для их хранения, по умолчанию keys:

    set KEY_DIR=keys

    а также значения полей владельца ваших сертификатов по умолчанию, например так:

    set KEY_COUNTRY=GB
    set KEY_PROVINCE=YourProvince
    set KEY_CITY=YourCity
    set KEY_ORG=YourOrganisation
    set KEY_EMAIL=mail@example.com
    set KEY_CN=CommonName
    set KEY_NAME=KeyName
    set KEY_OU=OrganisationUnit

    Сохраните измененный файл.

  2. Создайте новые вспомогательные файлы index.txt и serial, выполнив (выполняется однократно) в командной строке Windows:

    vars
    clean-all
    openvpn-server14-en.png
  3. Создайте закрытый ключ и сертификат вашего удостоверяющего центра, выполнив:

    vars
    build-ca
    openvpn-server15-en.png

    В папке C:\Program Files\OpenVPN\easy-rsa\keys появятся сгенерированные файлы ключа ca.key и сертификата ca.cert вашего удостоверяющего центра.

  4. Создайте файл Диффи-Хелмана для защиты трафика от расшифровки. Он понадобится для использования сервером TLS. В некоторых случаях процедура может занять значительное время (например, при размере ключа 4096 бит занимает десятки минут), но делается однократно:

    vars
    build-dh
    openvpn-server16-en.png

    В папке C:\Program Files\OpenVPN\easy-rsa\keys появится файл dh2048.pem (или dh4096.pem при использовании размера ключа 4096 бит).

  5. Создайте закрытый ключ и сертификат для OpenVPN TLS-сервера (Keenetic-1), выполнив:

    vars
    build-key-server Keenetic-1

    При этом, когда скрипт запросит Common Name (CN), введите имя сервера, в нашем примере – Keenetic-1. А в конце дважды подтвердите (y), что подписываете сертификат.

    openvpn-server17-en.png
  6. Создайте закрытый ключзапрос PEM и сертификат для первого OpenVPN TLS-клиента (Keenetic-2), выполнив:

    vars
    build-key Keenetic-2

    Когда скрипт запросит Common Name (CN), введите имя первого клиента – Keenetic-2. Дважды подтвердите (y), что подписываете сертификат.

    openvpn-server18-en.png
  7. Повторите предыдущий пункт для второго клиента (Keenetic-3):

    vars
    build-key Keenetic-3

    Когда скрипт запросит Common Name (CN), введите имя второго клиента – Keenetic-3. Дважды подтвердите (y), что подписываете сертификат.

    Аналогичным образом можно создать ключизапросы и сертификаты для произвольного числа клиентов.

  8. Создайте ключ HMAC для дополнительной защиты от DoS-атак и флуда, выполнив:

    vars
    openvpn.exe --genkey --secret keys\ta.key
    openvpn-server19-en.png

    На этом все необходимые файлы созданы:

    openvpn-server20-en.png

    Для использования в конфигах OpenVPN-сервера и клиентов понадобятся следующие файлы:

    • ca.crt – сертификат удостоверяющего центра

    • dh2048.pem (или dh4096.pem) – файл Диффи-Хелмана

    • Keenetic-1.crt – сертификат сервера OpenVPN (Keenetic-1)

    • Keenetic-1.key – закрытый ключ сервера OpenVPN (Keenetic-1)

    • Keenetic-2.crt - сертификат 1-го клиента OpenVPN (Keenetic-2)

    • Keenetic-2.key – закрытый ключ 1-го клиента OpenVPN (Keenetic-2)

    • Keenetic-3.crt – сертификат 2-го клиента OpenVPN (Keenetic-3)

    • Keenetic-3.key – закрытый ключ 2-го клиента OpenVPN (Keenetic-3)

    • ta.key – ключ HMAC для дополнительной защиты от DoS-атак и флуда

    Осталось только добавить их содержимое в текстовые файлы конфигурации сервера и клиентов.

  9. Для создания файла конфигурации сервера OpenVPN возьмите за основу пример server.ovpn, расположенный в папке C:\Program Files\OpenVPN\sample-config\ в тело которого потребуется вставить полученные нами ключи и сертификаты следующим образом:

    1. Замените строку:

      ca ca.crt

      на секцию:

      <ca>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the certificate of the certification centre from the file ca.crt here
      -----END CERTIFICATE-----
      </ca>
    2. Замените:

      cert server.crt

      на секцию:

      <cert>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the OpenVPN server certificate from the Keenetic-1.crt file here
      -----END CERTIFICATE-----
      </cert>
    3. Замените строку:

      key server.key

      на секцию:

      <key>
      -----BEGIN PRIVATE KEY-----
        <--Insert the body of the OpenVPN server private key from the Keenetic-1.key file here
      -----END PRIVATE KEY-----
      </key>
    4. Замените строку:

      dh dh2048.pem

      на секцию:

      <dh>
      -----BEGIN DH PARAMETERS-----
        <--Insert the contents of the file Diffie-Helman dh4096.pem here 
      -----END DH PARAMETERS-----
      </dh>
    5. Раскомментируйте строку:

      topology subnet
    6. Замените строку:

      server 10.8.0.0 255.255.255.0

      на строку:

      server 10.1.0.0 255.255.255.0
    7. Закомментируйте строку:

      ;ifconfig-pool-persist ipp.txt
    8. Замените строку:

      tls-auth ta.key 0

      на секцию

      <tls-auth>
      -----BEGIN OpenVPN Static key V1-----
         <--Сюда вставьте содержимое файла ta.key
      -----END OpenVPN Static key V1-----
      </tls-auth>

      и добавьте строку:

      key-direction 0
    9. Закомментируйте строку:

      ;status openvpn-status.log
  10. Для создания файла конфигурации первого клиента OpenVPN возьмите за основу пример client.ovpn, расположенный в папке C:\Progran Files\OpenVPN\sample-config\ в тело которого потребуется вставить полученные нами ключи и сертификаты следующим образом:

    1. В строке:

      remote my-server-1 1194

      замените my-server-1 на доменное имя или публичный IP-адрес вашего OpenVPN-сервера (Keenetic-1).

    2. Замените строку:

      ca ca.crt

      на секцию:

      <ca>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the certificate of the certification authority from the file ca.crt here
      -----END CERTIFICATE-----
      </ca>
    3. Замените строку:

      cert client.crt

      на секцию:

      <cert>
      -----BEGIN CERTIFICATE-----
        <--Insert the body of the certificate of the first OpenVPN client from the file Keenetic-2.crt
      -----END CERTIFICATE-----
      </cert>
    4. Замените строку:

      key client.key

      на секцию:

      <key>
      -----BEGIN PRIVATE KEY-----
        <--Insert the body of the private key of the first OpenVPN client from the Keenetic-2.key file here
      -----END PRIVATE KEY-----
      </key>
    5. Замените строку:

      tls-auth ta.key 1

      на секцию:

      <tls-auth>
      -----BEGIN OpenVPN Static key V1-----
        <--Insert the contents of the ta.key file here
      -----END OpenVPN Static key V1-----
      </tls-auth>

      и добавьте строку:

      key-direction 1
    6. Добавьте строку с маршрутом в локальную сеть сервера:

      route 192.168.1.0 255.255.255.0

      или

      route 0.0.0.0 0.0.0.0

      если необходимо весь трафик направлять в туннель.

  11. Повторите аналогичные действия для второго клиента, взяв данные из файлов Keenetic-3.crt и Keenetic-3.key соответственно.

    Вот примеры полученных таким образом файлов конфигураций для трех Keenetic:

    Можете использовать их, заменив в клиентских имя KEENETIC-1.mykeenetic.ru на доменное имя или публичный ip-адрес вашего сервера Keenetic-1, а сертификаты и ключи на сгенерированный вами во всех файлах.

    Теперь осталось лишь загрузить их на роутеры Keenetic по аналогии с пунктами 1.5, 1.6 и выполнить действия, описанные в пунктах 1.7, 1.8 этой инструкции.

    На этом настройка закончена. Проверьте, что туннели установились.

    Для этого со стороны клиентов запустите ping на адрес туннеля сервера:

    ping 10.1.0.1

    и на адрес сервера в его домашней сети:

    ping 192.168.1.1

Подсказка

В приведенном во второй части примере, для простоты мы производили все операции в одной папке, хотя для безопасности рекомендуется размещать удостоверяющий центр на отдельном компьютере, изолированном от Интернет, и хранить секретный ключ только на нем, а сертификат переносить на съемном носителе. Аналогично закрытые ключи сервера и клиентов OpenVPN должны размещаться только на соответствующих сторонах, связываемых туннелем. Обмениваться можно только сертификатами.

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