↩️ Назад

Категории

OpenVPN + AD: Полная автоматизация выдачи доступа сотрудникам

07.04.2026 | Статья из категории: AD

OpenVPN + Active Directory: Полная автоматизация выдачи доступа

Привет, коллеги! Нашёл я тут старую, но годную статью про настройку OpenVPN с LDAP. Автор молодец, всё по делу если что автор оригинала от 2023 года это DMOSK. Но меня, как и многих, кто это внедряет, терзал один вопрос: «Как не дёргать админа каждый раз, когда новому сотруднику нужен доступ?»

Ручная генерация сертификатов и конфигов — это прошлый век. Я расковырял тему и нашёл решение, как завязать всё в единый конвейер:

✅ Конечная цель: Ты добавляешь пользователя в группу AD → У него магическим образом появляется VPN, клиент и настройки.

1. Основа: базовая настройка OpenVPN + LDAP

Сначала убедимся, что сервер уже умеет проверять пароли через AD. Вот рабочий конфиг /etc/openvpn/auth/ldap.conf:

<LDAP>
  URL             ldap://dc1.company.local
  BindDN          CN=openvpn,CN=Users,DC=company,DC=local
  Password        your_secure_password
  Timeout         15
  TLSEnable       no
</LDAP>

<Authorization>
  BaseDN          "DC=company,DC=local"
  SearchFilter    "(&(sAMAccountName=%u)(memberOf=CN=VPN_Users,CN=Users,DC=company,DC=local))"
</Authorization>

Важно: Параметр memberOf в фильтре означает, что доступ получат только те, кто состоит в группе VPN_Users. Всё управление доступом теперь — через AD.

2. Автоматизация: скрипт для массовой выдачи конфигов

Забудь про ручной ./build-key. Вот готовый Bash-скрипт, который генерирует конфиг для пользователя и отправляет его по почте или кладёт на веб-сервер.

#!/bin/bash
# generate_vpn_config.sh - скрипт для автоматической выдачи VPN

EASYRSA_PATH="/etc/openvpn/easy-rsa"
OUTPUT_DIR="/var/www/vpn-configs"
TEMPLATE="/etc/openvpn/client-template.ovpn"

generate_config() {
    local USERNAME=$1
    
    # Генерация сертификата и ключа для пользователя
    cd $EASYRSA_PATH
    ./easyrsa build-client-full "$USERNAME" nopass
    
    # Сборка итогового .ovpn файла с вшитыми сертификатами
    cat $TEMPLATE > "$OUTPUT_DIR/$USERNAME.ovpn"
    echo "<ca>" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    cat /etc/openvpn/keys/ca.crt >> "$OUTPUT_DIR/$USERNAME.ovpn"
    echo "</ca>" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    echo "<cert>" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    cat "/etc/openvpn/easy-rsa/pki/issued/$USERNAME.crt" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    echo "</cert>" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    echo "<key>" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    cat "/etc/openvpn/easy-rsa/pki/private/$USERNAME.key" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    echo "</key>" >> "$OUTPUT_DIR/$USERNAME.ovpn"
    
    echo "✅ Конфиг создан: $OUTPUT_DIR/$USERNAME.ovpn"
}

# Пример вызова
# generate_config "ivan.ivanov"
💡 Лайфхак: Положи готовые конфиги на внутренний веб-сервер (например, http://vpn-portal.company.local/configs/) с авторизацией через AD. Пользователь сам заходит и скачивает свой файл.

3. Автоматическая установка OpenVPN на компьютеры пользователей

Ты не хочешь ходить по офису с флешкой? Используем Group Policy (GPO) в Windows.

Шаг 1: Создаём PowerShell-скрипт для GPO

# Deploy-VPN.ps1 - выполняется при входе пользователя в систему

$configUrl = "http://vpn-portal.company.local/configs/$env:USERNAME.ovpn"
$installerUrl = "https://swupdate.openvpn.org/community/releases/OpenVPN-2.6.10-I001-amd64.msi"
$configPath = "$env:ProgramFiles\OpenVPN\config\client.ovpn"
$logFile = "C:\Logs\vpn_deploy.log"

function Write-Log { param($msg) Add-Content $logFile "$(Get-Date): $msg" }

# Проверяем, установлен ли OpenVPN
if (!(Test-Path "$env:ProgramFiles\OpenVPN\bin\openvpn.exe")) {
    Write-Log "Установка OpenVPN..."
    $msiPath = "$env:TEMP\openvpn.msi"
    Invoke-WebRequest -Uri $installerUrl -OutFile $msiPath
    Start-Process msiexec.exe -Wait -ArgumentList "/i `"$msiPath`" /quiet /norestart"
    Remove-Item $msiPath
}

# Скачиваем конфиг, если он существует
try {
    Invoke-WebRequest -Uri $configUrl -OutFile $configPath -ErrorAction Stop
    Write-Log "Конфиг успешно загружен для $env:USERNAME"
} catch {
    Write-Log "Конфиг не найден: пользователь не в группе VPN_Users"
}

Шаг 2: Привязываем скрипт к GPO

На контроллере домена:

  1. Открываем gpmc.msc (Group Policy Management)
  2. Создаём новую политику, например «VPN AutoDeploy»
  3. Переходим в Computer Configuration → Policies → Windows Settings → Scripts → Startup
  4. Добавляем наш PowerShell-скрипт
  5. Привязываем политику к OU с нужными компьютерами

4. Управление доступом: группа AD как триггер

Создаём в AD группу VPN_Users. Добавляешь пользователя в группу — у него появляется VPN. Удаляешь — доступ блокируется.

⚠️ Важный нюанс: Сертификаты, которые мы сгенерировали, не отзываются автоматически. Чтобы отрезать пользователя мгновенно, используй механизм CRL (Certificate Revocation List). Обновляй CRL раз в сутки по крону и раздавай клиентам через GPO или веб-сервер.

5. Полная схема работы (от и до)

ШагДействиеАвтоматизация
1HR заводит нового сотрудника в ADРучное добавление в AD
2Пользователя добавляют в группу VPN_UsersМожно автоматизировать через скрипт приёма сотрудников
3Скрипт на сервере OpenVPN генерирует сертификат и .ovpn файлCron / systemd timer каждые 15 минут
4Конфиг становится доступен по ссылке http://vpn-portal.company.local/configs/user.ovpnNginx + авторизация через AD
5GPO на компьютере пользователя устанавливает OpenVPN и скачивает конфигПри каждой загрузке системы
6Пользователь подключается к VPN своим AD-логином и паролемOpenVPN запрашивает при подключении

6. Полезные инструменты для ещё большей автоматизации

  • Ansible — развернёт OpenVPN на сервере одной командой
  • openvpn-monitor — веб-морда для просмотра активных подключений
  • PowerShell Universal Dashboard — сделай свой портал, где пользователи сами скачивают конфиги
  • Git + CI/CD — храни конфиги в Git и деплой через Webhook
🏆 Итог: Внедрив эту схему, ты перестанешь быть «мальчиком на побегушках» для выдачи VPN. Нанял сотрудника → добавил в группу → он работает. Уволил → убрал из группы → доступ пропал. Всё просто и элегантно.




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA