База знаний
OpenVPN CE + FRA
Автор Andrey Prokopenko, Last modified by Andrey Prokopenko на 19 января 2026 02:35 PM

В статье рассмотрено создание VPN-подключения на ОС Windows 10, с помощью 2FA аутентификации Windows Password + Indeed Key (Push). Проверка Windows Password будет осуществляться через LDAP без использования сертификатов по порту 389.

Предварительные требования

Со стороны Indeed Cloud:

  • Установленный и настроенный LSA для синхронизации пользователей

    1. Настройка FRA

    1.1 Добавьте клиента в clients.conf указав ip адрес и секрет OpenVPN CE сервера
    sudo nano config.ini

    client openvpn {
    ipaddr = <IP/DNS адрес OpenVPN CE>
    secret = <Сложный секрет для Radius>
    }

    1.2 Внесите настройки в конфигурационный файл config.ini FRA
    sudo nano config.ini

    В блоке [connection] укажите адрес облака в параметре sas_address_1, включите strip_netbios_prefix и strip_realm_from_upn, чтобы при входе можно было указывать логин в разных форматах (логин пользователя, UPN и Netbios)

    Включите использование блока [preauth] изменив параметр enable и укажите правило для входа по доменному паролю и push-уведомлению в приложении Indeed Key.
    rule[] = ;;;p;2 

    Включите проверку доменного пароля по LDAP изменив параметр ldap_enable, укажите данные для работы LDAP
    ldap_server_1-2 = <DNS/IP домена>
    ldap_ssl = no
    ldap_port = 389
    search_base = <Каталог AD для поиска пользователей>
    login = <Сервисная УЗ в формате distinguishedName>
    password = <Пароль от сервисной УЗ>

    1.3 Запуск контейнера FRA
    Если контейнер еще не был запущен, то выполните следующие команды:
    docker load -i fra-<версия образа>.tar.gz


    docker run -d --network host --name fra --restart always \
    -e TZ=Europe/Moscow \
    -v <путь до контейнера FRA>/fra/config.ini:/etc/fra/config.ini \
    -v <путь до контейнера FRA>/fra/clients.conf:/etc/freeradius/3.0/clients.conf \
    -v <путь до контейнера FRA>/fra/logs/radius.log:/var/log/freeradius/radius.log \
    -t fra:1.13.110725

    Если контейнер уже был запущен, то перезапустите его следующей командой для применения обновленной конфигурации:
    docker restart fra

    Установка и настройка OpenVPN CE (Community Edition)

    В рамках данной инструкции, установка и настройка OpenVPN CE была осуществлена на системе Ubuntu 22.04.02-live-server.

    !!!Настройка имеет рекомендательный характер. Основополагающей целью является настройка для корректной работы 2fa, но не для полноценной работы OpenVPN CE в продуктовой системе.!!!

    Установка OpenVPN CE и первоначальная настройка

    1. Обновите пакеты системы:
      sudo apt update -y
    2. Установите OpenVPN CE:
      sudo apt install -y openvpn
    3. Скопируйте шаблон конфигурационного файла в директорию “/etc/openvpn”:
      sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn
    4. Измените конфигурационный файл OpenVPN сервера:
      sudo nano /etc/openvpn/server.conf
      В файле:
      local 192.168.168.179
      port 1194
      proto udp
      dev tun
      ca /etc/openvpn/server/ca.crt
      cert /etc/openvpn/server/server.crt
      key /etc/openvpn/server/server.key
      dh /etc/openvpn/server/dh2048.pem
      server 10.44.44.0 255.255.255.0
      ifconfig-pool-persist ipp.txt
      push "route 192.168.4.0 255.255.255.0"
      push "dhcp-option DNS 192.168.4.2"
      script-security 2
      keepalive 10 120
      tls-auth "/etc/openvpn/server/ta.key" 0
      auth sha512
      tls-server
      tls-version-min 1.2
      tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
      cipher AES-256-CBC
      data-ciphers-fallback 'AES-256-CBC'
      user openvpn
      group openvpn
      persist-key
      persist-tun
      log /etc/openvpn/openvpn.log
      verb 6
      explicit-exit-notify 1
      reneg-sec 0
      mode server


      Где,
      192.168.188.179 -  внешний IP-адрес сетевого интерфейса
      192.168.4.0 - внутренний адрес сети, куда настраивается доступ
      192.168.4.2 - DNS сервер внутренней сети
      10.44.44.0 - виртуальная внутренняя сеть, в которой будут выдаваться IP-адреса OpenVPN клиентам 

    Установка и настройка местного центра сертификации

    Для полноценной работы OpenVPN CE сервера понадобятся сертификаты и ключи, которые создаются в центре сертификации. Для примера, настроим локальный openssl CA для их получения.

    1. Установите easy-rsa для развёртывания CA и выпуска сертификатов:
      sudo apt install openvpn easy-rsa -y
    2. Создайте директорию для ключей:
      sudo mkdir -p /etc/openvpn/easy-rsa/keys
    3. В директорию “/etc/openvpn/easy-rsa/” скопируйте скрипты:
      cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa
    4. Перейдите в директорию “/etc/openvpn/easy-rsa/”:
      cd /etc/openvpn/easy-rsa/
    5. Cоздайте скрипт vars:
      nano vars
      (При необходимости измените значения на свои)
      В файле:
      set_var EASYRSA "$PWD"
      set_var EASYRSA_PKI "$EASYRSA/pki"

      set_var EASYRSA_DN "cn_only"
      set_var EASYRSA_REQ_COUNTRY "RU"
      set_var EASYRSA_REQ_PROVINCE "Moscow"
      set_var EASYRSA_REQ_CITY "Moscow"
      set_var EASYRSA_REQ_ORG "MyOrg"
      set_var EASYRSA_REQ_EMAIL "openvpn@mydomain.net"
      set_var EASYRSA_REQ_OU "CA"
      set_var EASYRSA_KEY_SIZE 2048
      set_var EASYRSA_ALGO rsa
      set_var EASYRSA_CA_EXPIRE 500
      set_var EASYRSA_CERT_EXPIRE 365
      set_var EASYRSA_NS_SUPPORT "no"
      set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
      set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
      set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"
      set_var EASYRSA_DIGEST "sha256"
    6. Разрешите исполнение файла:
      chmod +x vars
    7. Инициализируйте PKI директорию:
      ./easyrsa init-pki
    8. Создайте центр сертификации:
      (На этапе "Enter New CA Key Passphrase" задайте пароль)
      (На этапе ввода CN укажите - “server” или любое необходимое Вам значение)
      ./easyrsa build-ca
    9. Создайте запрос сертификата и ключ сервера:
      (На этапе ввода CN можно пропустить и нажать “Enter”)
      (На этапе подтверждения введите “yes”)
      ./easyrsa gen-req server nopass
    10. Подпишите сертификат:
      ./easyrsa sign-req server server
    11. Проверьте, подписался ли сертификат:
      openssl verify -CAfile pki/ca.crt pki/issued/server.crt

      Вывод при успешной проверке:
      pki/issued/server.crt: OK
    12. Сгенерируйте дополнительный ключ сервера ta.key:
      openvpn --genkey secret /etc/openvpn/easy-rsa/keys/ta.key
    13. Создайте файл Диффи-Хеллмана. Данный файл нужен для обеспечения защиты трафика (трафик, который был записан и сохранен еще до похищения ключей) от расшифровки, если ключи были похищены:
      ./easyrsa gen-dh
    14. Выпустите пользовательский клиентский сертификат, по аналогии с сертификатом сервера.
      ./easyrsa gen-req client01 nopass

      ./easyrsa sign-req client client01
      openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
    15. Перенесите файлы ключей сервера в директорию “/etc/openvpn/server”:
      cp pki/ca.crt /etc/openvpn/server

      cp pki/issued/server.crt /etc/openvpn/server
      cp pki/private/server.key /etc/openvpn/server
      cp /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/server
    16. Перенесите файлы ключей клиента в директорию “/etc/openvpn/client”:
      cp pki/ca.crt /etc/openvpn/client/

      cp pki/issued/client01.crt /etc/openvpn/client/
      cp pki/private/client01.key /etc/openvpn/client/
    17. Перенесите файл Диффи-Хеллмана в директорию “/etc/openvpn/“:
      cp pki/dh.pem /etc/openvpn/dh2048.pem

      Настройка правил обмена пакетов через “firewalld”

      1. Разрешите форвардинг пакетов между сетевыми интерфейсами:
        sudo nano /etc/sysctl.conf:
        В файле:
        net.ipv4.ip_forward = 1

        net.ipv4.ip_nonlocal_bind = 1
      2. Выполните команду по загрузке параметров, которые были указаны в файле выше:
        sudo sysctl -p
      3. Установите firewalld (firewalld-2.0.0-2.el7):
        sudo apt install firewalld
      4. Активируйте сервис “firewalld.service”:
        sudo systemctl start firewalld.service
      5. Убедитесь, что сервис запущен (Вывод: running):
        firewall-cmd --state
      6. Настройте маршрутизацию:
        ###Конфигурируем firewall
        sudo firewall-cmd --get-active-zones

        sudo firewall-cmd --zone=trusted --add-interface=tun0
        sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0
        sudo firewall-cmd --permanent --add-service openvpn
        sudo firewall-cmd --permanent --zone=trusted --add-service openvpn
        sudo firewall-cmd --reload
        sudo firewall-cmd --list-services --zone=trusted
        ###Конфигурируем masquerade
        sudo firewall-cmd --add-masquerade

        sudo firewall-cmd --add-masquerade --permanent
        sudo firewall-cmd --query-masquerade
        DEVICE=$(ip route | awk '/^default via/ {print $5}')
        sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE
        sudo firewall-cmd --reload
        sudo systemctl edit --full --force openvpn-server@server.service
        В файле:
        ###Закомментируйте строку
        ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log...

        ###Добавьте строку:
        ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server.conf
      7. Перезагрузите процесс systemd:
        sudo systemctl daemon-reload
      8. Запустите OpenVPN CE сервер и поставьте в автозагрузку
        sudo systemctl -f enable openvpn-server@server.service

        sudo systemctl start openvpn-server@server.service

      Настройка клиента OpenVPN и проверка подключения

      В рамках данной инструкции, проверка подключения будет осуществлена на машине с Windows 10.

      1. Настройте клиентский конфигурационный файл:
        nano /etc/openvpn/client/client.ovpn

        В файле:
        client
        dev tun
        proto udp
        remote 192.168.168.179 1194
        nobind
        resolv-retry infinite
        persist-key
        persist-tun
        auth sha512
        auth-nocache
        ca ca.crt
        cert client01.crt
        key client01.key
        tls-auth ta.key 1
        cipher AES-256-GCM
        tls-client
        tls-version-min 1.2
        tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
        verb 4
      2. Скачайте клиент OpenVPN и установите его на машине.
      3. На клиентскую машину по пути "C:\Program Files\OpenVPN\config" перенесите следующие файлы с сервера OpenVPN CE:
        1) "/etc/openvpn/client/client.ovpn"
        2) "/etc/openvpn/client/ca.crt"

        3) "/etc/openvpn/client/client01.crt"
        4) "/etc/openvpn/client/client01.key"
        5) "/etc/openvpn/ta.key"

        Примечание: все переносимые сертификаты можно также указать в .ovpn файле и использовать для конфигурации клиента только его.
      4. Запустите установленный клиент OpenVPN.
      5. Откройте трей Windows, нажмите правой кнопкой мыши по значку OpenVPN, после чего выберите опцию “Подключиться”:
      6. Проверьте успешность подключения в открывшемся окне:

        Настройка аутентификации в OpenVPN CE через Indeed Cloud FRA

        Настройка будет осуществляться через плагин. Они будут отсылать радиус запросы на FRA-сервер.

        Установка и настройка RADIUS плагинов для OpenVPN CE

        Плагин (rakasatria -radiusplugin)

        1. Установите необходимые компоненты:
          apt install golang git freeradius-utils sqlite
        2. Создайте локальный репозиторий плагина:
          git clone https://github.com/rakasatria/ovpn-radius
        3. Соберите проект:
          cd ovpn-radius/src
          go mod tidy #если необходимо
          go build
        4. Создайте директорию для плагина и переместите в неё конфигурационные файлы:
          mkdir -p /etc/openvpn/plugin
          cp config.json /etc/openvpn/plugin
          cp ovpn-radius /etc/openvpn/plugin
          chmod 755 /etc/openvpn/plugin/ovpn-radius
        5. Создайте директорию и файл для базы данных sqlite
          mkdir -p /etc/openvpn/plugin/db
          touch /etc/openvpn/plugin/db/ovpn-radius.db
          chmod -R 777 /etc/openvpn/plugin/db
        6. Создайте лог файл:
          mkdir /var/log/openvpn
          touch /var/log/openvpn/radius-plugin.log
          chown openvpn:openvpn /var/log/openvpn/radius-plugin.log

          Где,
          openvpn:openvpn - сервисный пользователь:группа, указанные в конфигурационном файле OpenVPN сервера “/etc/openvpn/server.conf”
        7. В конфигурационном файле плагина “/etc/openvpn/plugin/config.json” измените значения параметров "LogFile", “IpAddress”, “Server” и “Secret”:
          nano /etc/openvpn/plugin/config.json
          В файле:
          "LogFile": "/var/log/openvpn/radius-plugin.log"
          "IpAddress": "192.168.4.17"
          "Server": "192.168.7.2:1812"
          "Secret": "Qwer1234!"

          Где,
          "LogFile": "/var/log/openvpn/radius-plugin.log" - Путь к файлу для записи логов плагина
          "IpAddress": "192.168.4.3" - IP адрес OpenVPN сервера
          "Server": "192.168.4.3:1812" - IP адрес NPS сервера
          "Secret": "Qwer1234!" - Общий секрет с NPS сервером
        8. Добавьте в конфигурационный файл OpenVPN CE сервера строки, которые необходимы для включения работы плагина в процессе аутентификации:
          nano /etc/openvpn/server.conf
          В файле добавить строки:
          auth-user-pass-verify "/etc/openvpn/plugin/ovpn-radius auth " via-file
          script-security 2

        9. На клиентской машине в файле "C:\Program Files\OpenVPN\config\client.ovpn" добавьте строку auth-user-pass.

        (0 голос(а))
        Эта статья полезна
        Эта статья бесполезна

        Комментарии (0)
        Добавить новый комментарий
         
         
        Полное имя:
        Email:
        Комментарии:
        Портал технической поддержки компании Индид