Proxmox. Установка OpenVPN в LXC

2025-01-27 · 3 мин. для прочтения

Proxmox. Установка OpenVPN в LXC.

Содержание

1 Информация о дистрибутиве

2 Создание контейнера

  • Обновим список контейнеров:
    pveam update
    
  • Установим дистрибутив Turnkey-OpenVPN (см. Linux. Дистрибутив Turnkey):
    pveam available | grep openvpn
    pveam download local debian-12-turnkey-openvpn_18.1-1_amd64.tar.gz
    pveam list local
    
  • Создадим контейнер:
    pct create 123 local:vztmpl/debian-12-turnkey-openvpn_18.1-1_amd64.tar.gz --unprivileged 1 -features nesting=1 --net0 name=eth0,bridge=vmbr1,tag=5,firewall=1,ip=12.34.56.78/24,gw=12.34.56.254,type=veth --storage local-lvm --hostname=ovpn
    

3 Устройство /dev/net/tun

  • Поскольку мы использовали непривилегированный контейнер, необходимо прокинуть из контейнера на хост устройство /dev/net/tun.

  • В качестве альтернативы можно использовать привилегированный контейнер (но не надо).

  • Посмотрим конфигурацию контейнера:

    pct config 123
    
  • Отредактируем файл конфигурации:

    vi /etc/pve/lxc/123.conf
    
  • Добавьте следующие строки в конце.

    • Настроить политики безопасности:
      lxc.apparmor.profile: unconfined
      lxc.cgroup.devices.allow: a
      lxc.cap.drop:
      
    • Чтобы создать устройство:
      lxc.cgroup2.devices.allow: c 10:200 rwm
      lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
      
  • Чтобы непривилегированный контейнер мог получить доступ к /dev/net/tun, необходимо установить владельца:

    chown 100000:100000 /dev/net/tun
    
  • Проверьте, что разрешения устанавливаются правильно:

    ls -l /dev/net/tun
    

4 Запуск контейнера

  • Запустите контейнер:
    pct start 123
    
  • Подключитесь к контейнеру:
    pct enter 123
    
  • Чтобы сконфигурировать openvpn, надо подключиться к консоли через web-интерфейс.
  • Но грузится долго.
  • Вначале просто чёрный экран.
  • При конфигурировании можно пропустить конфигурацию для Turnkey Hub.
  • После установки можно дополнительно доконфигурить сервер.

5 Настройки

5.1 HMAC authentication

  • В утилите openvpn-addclient жёстко зашит алгоритм AES-256-GCM для HMAC authentication.
  • В конфигурации сервера данная настройка отсутствует.
  • Я добавил в файл /etc/openvpn/server.conf:
    # TLS Security
    cipher AES-256-GCM
    tls-version-min 1.2
    tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
    auth SHA512
    auth-nocache
    
  • Перестартуйте сервер:
    systemctl restart openvpn@server.service
    

5.2 Использование одного ключа несколькими клиентами

  • Удобно использовать один ключ на учебную группу.
  • Я добавил в файл /etc/openvpn/server.conf:
    # Enable multiple client to connect with same Certificate key
    duplicate-cn
    
  • Перестартуйте сервер:
    systemctl restart openvpn@server.service
    

5.3 Временная зона

  • Некоторые клиенты требуют, чтобы ключи создавались в той же временной зоне, что и на клиенте.
  • Можно изменить временную зону:
    dpkg-reconfigure tzdata
    

6 Конфигурирование OpenVPN клиента

6.1 Добавление конфигурации на сервере

  • Заходим на сервер по SSH.

  • Создаём пользователя VPN:

    openvpn-addclient client-name client-email
    
    • client-name : имя пользователя;
    • client-email : почта пользователя.
  • Профиль пользователя будет находиться в файле /etc/openvpn/easy-rsa/keys/client-name.ovpn.

  • Если не был сконфигурирован FQDN, а просто добавлен IP-адрес сервера, нужно будет изменить в первой строке конфигурации vpn.example.com на IP адрес сервера OpenVPN.

6.2 Загрузка конфигурации на клиента

  • Из консоли SSH выполняем команду:
    /var/www/openvpn/bin/addprofile client-name
    
  • С помощью этой команды создайтся ссылка на скачивание файла конфигурации и QR код, считав который с помощью камеры телефона мы автоматически скачиваем и импортируем профиль пользователя в мобильный клиент OpenVPN.
  • Чтобы попасть на URL автоконфигурации клиента, нужно к URL главной страницы добавить часть строки, начинающейся с /profiles/, например: https://IPадрес_сервера/profiles/c87019e41b4ae3dabf94ba86ee126bf35f0f9c01/.
  • Таким образом мы создаем страничку, откуда будет удобно скачать профиль самостоятельно или импортировать его в телефон с помощью QR кода.

6.3 Удаление профиля

  • Вручную запустить удаление истекших профилей:
    /etc/cron.hourly/openvpn-profiles-delexpired
    
  • Отменить сертификат клиента и удалить профиль клиента:
    openvpn-removeclient client-name
    
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.