Proxmox. Установка OpenVPN в LXC
Proxmox. Установка OpenVPN в LXC.
Содержание
1 Информация о дистрибутиве
- Linux. Дистрибутив Turnkey
- Репозиторий: https://github.com/turnkeylinux-apps/openvpn
- Сайт: https://www.turnkeylinux.org/openvpn
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