Представьте ситуацию: ваша компания расширяется, и появляется необходимость разделить доступ к корпоративным ресурсам между отделами. Например, бухгалтерия должна работать в одной подсети, а разработчики – в другой, без пересечений. OpenVPN позволяет реализовать это, но стандартных инструкций для таких сценариев часто недостаточно. Давайте разберёмся, как создать изолированные VPN-подсети с индивидуальными настройками безопасности.
Ключевая идея здесь – использование независимых экземпляров OpenVPN, а не просто смена портов. Каждый экземпляр будет обслуживать свою группу пользователей, иметь уникальные сертификаты и настройки маршрутизации. Это исключает возможность переключения между подсетями даже при смене порта – клиент без соответствующего сертификата просто не пройдёт аутентификацию.
Настройка OpenVPN
Шаг 1: Подготовка инфраструктуры
Для начала установите OpenVPN и Easy-RSA на сервер. Если используете Ubuntu/Debian:
sudo apt update
sudo apt install openvpn easy-rsa
Создайте отдельные папки для каждого экземпляра VPN. Например:
/etc/openvpn/staff
– для сотрудников/etc/openvpn/guests
– для гостевого доступа
Шаг 2: Генерация сертификатов для каждой группы
Для каждой группы создайте отдельный центр сертификации (CA). Это критически важно: если все пользователи будут подписаны одним CA, система не сможет различить их принадлежность к подсети.
Пример для группы «staff»:
1. Скопируйте easy-rsa в папку экземпляра:
cp -r /usr/share/easy-rsa /etc/openvpn/staff/easy-rsa
2. Инициализируйте CA:
cd /etc/openvpn/staff/easy-rsa
./easyrsa init-pki
./easyrsa build-ca
(при запросе имени укажите, например, «StaffVPN-CA»)
3. Сгенерируйте сертификат сервера:
./easyrsa gen-req server nopass
./easyrsa sign-req server server
4. Создайте клиентский сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Повторите эти шаги для других групп, используя разные имена CA (например, «GuestsVPN-CA»). Обратите внимание: сертификаты из папки «staff» **не должны** использоваться в экземпляре «guests», и наоборот.
Шаг 3: Настройка конфигурационных файлов
Для каждого экземпляра создайте отдельный файл server.conf
. Пример для «staff»:
port 1194 # Можно изменить для других групп (например, 1195)
proto udp
dev tun
ca /etc/openvpn/staff/easy-rsa/pki/ca.crt
cert /etc/openvpn/staff/easy-rsa/pki/issued/server.crt
key /etc/openvpn/staff/easy-rsa/pki/private/server.key
dh none
topology subnet
server 10.8.0.0 255.255.255.0 # Подсеть для staff
push "route 192.168.1.0 255.255.255.0" # Маршрут к внутренней сети
keepalive 10 120
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/staff-status.log
log-append /var/log/openvpn/staff.log
verb 3
Для группы «guests» измените:
- Порт (например,
port 1195
) - Подсеть (
server 10.8.1.0 255.255.255.0
) - Пути к сертификатам (направьте на папку «guests»)
Шаг 4: Запуск и управление экземплярами
Используйте systemd для одновременной работы нескольких экземпляров. Создайте файл службы /etc/systemd/system/openvpn@.service
:
[Unit]
Description=OpenVPN instance %i
After=network.target
[Service]
Type=notify
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/%i --config server.conf
WorkingDirectory=/etc/openvpn/%i
Restart=on-failure
[Install]
WantedBy=multi-user.target
Запустите экземпляры:
sudo systemctl start openvpn@staff
sudo systemctl start openvpn@guests
Тонкости и частые ошибки
Проблема: Клиенты подключаются, но не видят ресурсы в подсети.
Решение:
- Проверьте маршруты (
push "route ..."
) в server.conf. - Убедитесь, что на внутреннем фаерволле разрешён трафик из VPN-подсети.
Проблема: Ошибка «TLS Error: TLS key negotiation failed».
Причина: Несовпадение сертификатов клиента и сервера. Убедитесь, что:
- Сертификат клиента подписан CA экземпляра, к которому он подключается.
- В client.ovpn указаны правильные
ca
,cert
иkey
.
Совет: Для дополнительной безопасности ограничьте доступ к портам VPN через фаерволл. Например, разрешите подключение к порту 1194 только с IP-адресов офиса бухгалтерии.
Дополнительные возможности
Чтобы ещё сильнее изолировать группы, используйте:
- Разные протоколы: Для staff – UDP, для guests – TCP (меньше скорости, но стабильнее через прокси).
- Индивидуальные правила iptables: Например, запрет доступа к SSH-серверам для гостей.
- Two-Factor Authentication: Добавьте Google Authenticator для критически важных групп.
Подводя итог: разделение OpenVPN на независимые экземпляры с уникальными CA даёт гибкость в управлении доступом. Главное – внимательно настраивать сертификаты и тестировать каждую подсеть отдельно. Если возникнут сложности, проверьте логи (journalctl -u openvpn@staff
) = там часто содержится ключ к решению проблемы.