Настройка OpenVPN для разделения пользователей по подсетям: Подробное руководство

Представьте ситуацию: ваша компания расширяется, и появляется необходимость разделить доступ к корпоративным ресурсам между отделами. Например, бухгалтерия должна работать в одной подсети, а разработчики – в другой, без пересечений. 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-адресов офиса бухгалтерии.

    Дополнительные возможности

    Чтобы ещё сильнее изолировать группы, используйте:

    1. Разные протоколы: Для staff – UDP, для guests – TCP (меньше скорости, но стабильнее через прокси).
    2. Индивидуальные правила iptables: Например, запрет доступа к SSH-серверам для гостей.
    3. Two-Factor Authentication: Добавьте Google Authenticator для критически важных групп.

    Подводя итог: разделение OpenVPN на независимые экземпляры с уникальными CA даёт гибкость в управлении доступом. Главное – внимательно настраивать сертификаты и тестировать каждую подсеть отдельно. Если возникнут сложности, проверьте логи (journalctl -u openvpn@staff) = там часто содержится ключ к решению проблемы.

    Добавить комментарий

    Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

    Новое
    Интересное