Привет, коллеги! Нашёл я тут старую, но годную статью про настройку OpenVPN с LDAP. Автор молодец, всё по делу если что автор оригинала от 2023 года это DMOSK. Но меня, как и многих, кто это внедряет, терзал один вопрос: «Как не дёргать админа каждый раз, когда новому сотруднику нужен доступ?»
Ручная генерация сертификатов и конфигов — это прошлый век. Я расковырял тему и нашёл решение, как завязать всё в единый конвейер:
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
На контроллере домена:
- Открываем
gpmc.msc(Group Policy Management) - Создаём новую политику, например «VPN AutoDeploy»
- Переходим в
Computer Configuration → Policies → Windows Settings → Scripts → Startup - Добавляем наш PowerShell-скрипт
- Привязываем политику к OU с нужными компьютерами
4. Управление доступом: группа AD как триггер
Создаём в AD группу VPN_Users. Добавляешь пользователя в группу — у него появляется VPN. Удаляешь — доступ блокируется.
5. Полная схема работы (от и до)
| Шаг | Действие | Автоматизация |
|---|---|---|
| 1 | HR заводит нового сотрудника в AD | Ручное добавление в AD |
| 2 | Пользователя добавляют в группу VPN_Users | Можно автоматизировать через скрипт приёма сотрудников |
| 3 | Скрипт на сервере OpenVPN генерирует сертификат и .ovpn файл | Cron / systemd timer каждые 15 минут |
| 4 | Конфиг становится доступен по ссылке http://vpn-portal.company.local/configs/user.ovpn | Nginx + авторизация через AD |
| 5 | GPO на компьютере пользователя устанавливает OpenVPN и скачивает конфиг | При каждой загрузке системы |
| 6 | Пользователь подключается к VPN своим AD-логином и паролем | OpenVPN запрашивает при подключении |
6. Полезные инструменты для ещё большей автоматизации
- Ansible — развернёт OpenVPN на сервере одной командой
- openvpn-monitor — веб-морда для просмотра активных подключений
- PowerShell Universal Dashboard — сделай свой портал, где пользователи сами скачивают конфиги
- Git + CI/CD — храни конфиги в Git и деплой через Webhook
Комментарии
Пока нет комментариев. Будьте первым!