VDI/OpenUDS
Введение
OpenUDS это много-платформенный брокер подключений для создания и управления виртуальными рабочими местами и приложениями. Основные компоненты решения VDI на базе OpenUDS:
- OpenUDS Server (openuds-server) - брокер подключений пользователей, а так же интерфейс администратора для настройки.
- SQL Server. Для работы django приложения, которым является openuds-server необходим SQL сервер, например mysql или mariadb. Может быть установлен на отдельном сервере.
- Платформа для запуска клиентских окружений и приложений. OpenUDS совместима со множеством систем виртуализации: PVE, OpenNebula, oVirt, OpenStack. Так же возможно использование с отдельным сервером без виртуализации (аналог терминального решения).
- OpenUDS Client (openuds-client) - клиентское приложения для подключения к брокеру соединений и дальнейшего получения доступа к виртуальному рабочему окружению
- OpenUDS Tunnel (openuds-tunnel) - решение для туннелирования обращений от клиента к виртуальному рабочему окружению. Предназначено для предоставления доступа из недоверенных сегментов сети, например из Интернет. Устанавливается на отдельный сервер.
- OpenUDS Actor (openuds-actor) - ПО для гостевых виртуальных машин, реализует связку виртуальной машины и брокера соединений.
Установка
Установка mysql/mariadb
# apt-get install mariadb # systemctl enable --now mariadb.service # mysql_secure_installation # mysql -u root
mysql> CREATE DATABASE dbuds CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'dbuds'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON dbuds.* TO 'dbuds'@'%';
mysql> FLUSH PRIVILEGES;
OpenUDS Server
Установка OpenUDS Server
# apt-get install openuds-server-nginx
Будут установлены:
- openuds-server — django приложение;
- gunicorn — сервер приложений. Обеспечивает запуск django как стандартного WSGI приложения;
- nginx — http-сервер, используется в качестве reverse-proxy для доступа к django приложению, запущенному с помощью gunicorn.
Настройка OpenUDS Server
- отредактировать /etc/openuds/settings.py, указав корректные данные для подключения к SQL серверу:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'isolation_level': 'read committed', }, 'NAME': 'dbuds', # Or path to database file if using sqlite3. 'USER': 'dbuds', # Not used with sqlite3. 'PASSWORD': 'password', # Not used with sqlite3. 'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '3306', # Set to empty string for default. Not used with sqlite3. } }
- "заполнить" базу данных первоначальными данными:
# su -s /bin/bash - openuds $ cd /usr/share/openuds $ python3 manage.py migrate
- запустить gunicorn:
# systemctl enable --now openuds-web.service
- запустить nginx:
# ln -s ../sites-available.d/openuds.conf /etc/nginx/sites-enabled.d/openuds.conf # systemctl enable --now nginx.service
- запустить менеджер задач OpenUDS
# systemctl enable --now openuds-taskmanager.service
- подключиться к серверу OpenUDS с помощью браузера http://<openuds_address>
Чтобы получить доступ к администрированию OpenUDS следует в меню пользователя выбрать пункт «Dashboard»:
Дополнительная информация о настройках django приложений:
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/ https://docs.djangoproject.com/en/2.2/ref/databases/
OpenUDS Tunneler
Установка OpenUDS Tunnel
Установка OpenUDS Tunnel должна выполняться на отдельной от OpenUDS Server системе.
# apt-get install openuds-tunnel
Будут установлены:
- openuds-tunnel — java приложение, основанное на проекте guacamole;
- guacamole-server
- tomcat
- libnss_uds
- pam_uds
Настройка OpenUDS Tunnel
- указать адрес OpenUDS сервера (брокера) в /etc/uds.conf и в /etc/pam.d/sshd_uds;
- запустить сервисы:
# systemctl enable --now sshd_uds guacd tomcat
Обновление
После обновления перезапустите компьютер, так как при обновлении не создаётся файл /run/openuds/socket.
Настройка
Подключение системы виртуализации
В разделе «Services» подключаем один из «Service providers»:
- PVE Platform Provider
- OpenNebula Platform Provider
- OpenStack Platform Provider
- oVirt/RHEV Platform Provider
- Static IP Machine Provider (отдельный сервер без виртуализации)
OpenNebula
Минимальные параметры для настройки «OpenNebula Platform Provider»: название, IP-адрес сервера OpenNebula (поле «Host»), порт подключения, имя пользователя (с правами администратора) и пароль. Используя кнопку «Тест», можно убедиться, что соединение установлено правильно.
После интеграции платформы OpenNebula в OpenUDS необходимо создать базовую службу типа «OpenNebula Live Images». Для этого дважды щелкните мышью по строке созданного поставщика услуг или в контекстном меню поставщика выберите «Detail»:
На вкладке «Services» нажмите «New»→«OpenNebula Live Images».
Заполните параметры конфигурации. Вкладка «Main»:
- «Name» — название службы;
- «Datastore» — хранилище.
Вкладка «Machine»:
- «Base Template» — шаблон ВМ, используемый системой OpenUDS для развертывания виртуальных рабочих столов (см. VDI/OpenUDS#Подготовка_шаблона_виртуальной_машины);
- «Machine Names» — базовое название для клонов с этой машины (например, Desk-kwork-);
- «Name Length» — количество цифр счетчика, прикрепленного к базовому имени рабочих столов (например, если Name Length = 3, названия сгенерированных рабочих столов будут: Desk-kwork-000, Desk-kwork-001 ... Desk-kwork-999).
PVE
Минимальные параметры для настройки «Proxmox Platform Provider»: название, IP-адрес/имя сервера или кластера (поле «Host»), порт подключения, имя пользователя с достаточными привилегиями в PVE (в формате пользователь@аутентификатор) и пароль.
Используя кнопку «test», можно убедиться, что соединение установлено правильно.
После интеграции платформы PVE в OpenUDS необходимо создать базовую службу типа «Proxmox Linked Clone». Для этого дважды щелкните мышью по строке созданного поставщика услуг или в контекстном меню поставщика выберите «Detail»:
На вкладке «Services» нажмите «New»→«Proxmox Linked Clone»:
Заполните параметры конфигурации. Вкладка «Main»:
- «Name» — название службы;
- «Pool» — пул, в котором будут находиться ВМ, созданные OpenUDS;
- «HA» — включать ли созданные ВМ в группу HA PVE.
Вкладка «Machine»:
- «Base Machine» — шаблон ВМ, используемый системой OpenUDS для развертывания виртуальных рабочих столов (см. VDI/OpenUDS#Подготовка_шаблона_виртуальной_машины);
- «Storage» — хранилище, где будут храниться сгенерированные виртуальные рабочие столы (поддерживаются хранилища, позволяющие создавать «Снимки»);
- «Machine Names» — базовое название для клонов с этой машины (например, Desk-SL-);
- «Name Length» — количество цифр счетчика, прикрепленного к базовому имени рабочих столов (например, если Name Length = 3, названия сгенерированных рабочих столов будут: Desk-SL-000, Desk-SL-001 ... Desk-SL-999).
После того, как среда OpenUDS будет настроена и будет создан первый «пул служб», в среде PVE можно будет наблюдать, как разворачиваются рабочие столы. Сначала будет создан шаблон («UDS-Publication-pool_name-publishing-number») — клон ВМ, выбранной при регистрации службы. После завершения процесса создания клона будут созданы рабочие столы («Machine_Name-Name_Length»):
Static IP Machine Provider (отдельный сервер без виртуализации)
OpenUDS позволяет создать подключение к отдельным устройствам (физическим или виртуальным). Доступ к отдельной машине осуществляется путем назначения IP-адресов пользователям.
Для регистрации поставщика данного типа следует в разделе Services» нажать кнопку «New» и выбрать пункт «Static IP Machine Provider»:
Для настройки «Static IP Machine Provider» достаточно задать название поставщика.
Для создания базовых услуг «Static IP Machine Provider» следует дважды щелкнуть мышью по строке созданного поставщика или в контекстном меню поставщика выбрать пункт «Detail»:
OpenUDS позволяет создавать два типа услуг поставщика «Static IP Machine Provider»:
- «Static Multiple IP» («Статический множественный IP-адрес»)
- Используется для подключения одного пользователя к одному компьютеру. Поддерживается неограниченное количество IP-адресов (можно включить в список все устройства, которые должны быть доступны удалённо). По умолчанию система будет предоставлять доступ к устройствам в порядке FIFO, т.е. первый пользователь получивший доступ к этому пулу, получает доступ к машине с первым IP-адресом из списка. Также можно настроить выборочное распределение, чтобы определённому пользователю назначался определенный компьютер (IP-адрес).
- «Static Single IP» («Статический одиночный IP-адрес»)
- Используется для подключения нескольких пользователей к одному компьютеру. При обращении каждого нового пользователя будет запускаться новый сеанс.
Для создания новой услуги «Static IP Machine Provider» на вкладке «Services» нажмите «New»→«Static Multiple IP» или «New»→«Static Single IP»:
Параметры конфигурации для услуги «Static Multiple IP»:
- Вкладка «Main»:
- «Name» — название службы;
- «List of servers» — один или несколько IP-адресов машин, к которой будет осуществляться доступ (машины должны быть включены и настроены см. VDI/OpenUDS#Подготовка_шаблона_виртуальной_машины).
- Вкладка «Advanced»:
- «Check port» — порт, по которому система может проверить, доступен ли компьютер. Если компьютер не доступен, система автоматически предоставит следующее устройство в списке. 0 — не проверять доступность компьютера;
- «Skip time» — период, в течении которого не будет проверяться доступность недоступной машины.
Просмотреть/изменить привязанные сеансы можно в разделе «Service Pools» (см. VDI/OpenUDS#Настройка_«Service_Pools») на вкладке «Assigned service»:
Параметры конфигурации для услуги «Static Single IP»:
- «Name» — название службы;
- «Machine IP» — IP-адресов машинs, к которой будет осуществляться доступ (машина должна быть включена и настроена см. VDI/OpenUDS#Подготовка_шаблона_виртуальной_машины).
Настройка аутентификации пользователей
В разделе «Autentificators» выбираем тип аутентификации пользователей. Можно выбрать как внешние источники (Active Directory, OpenLDAP и т. д.), так и внутренние (внутренняя база данных, IP-аутентификация):
- Internal Database
- Regex LDAP Authenticator
- IP Autentificator
Внутренняя база данных
При этом типе аутентификации данные пользователей и групп хранятся в базе данных, к которой подключен сервер OpenUDS.
Минимальные параметры конфигурации (вкладка «Main»): имя аутентификатора, приоритет и метка.
После того, как аутентификатор типа «Internal Database» создан, нужно будет зарегистрировать пользователей и группы пользователей. Для этого следует выбрать аутентификатор «Internal Database», во вкладке «Groups» создать группу пользователей, затем во вкладке «Users» создать пользователей.
Regex LDAP Authenticator
Этот аутентификатор позволяет пользователям и группам пользователей, принадлежащих практически любому аутентификатору на основе LDAP, получать доступ к виртуальным рабочим столам и приложениям.
FreeIPA
1. В разделе Authenticators нажмите кнопку New и выберите «Regex LDAP Authenticator».
2. Заполните поля первых трёх вкладок. Для этого вам нужно добавить пользователя в LDAP, имеющего права на чтение каталога и знать домен. В примере указан домен freeipa.test.
3. Помимо указания источника пользователей необходимо добавить существующую группу LDAP, в которую они входят. Дважды щёлкните на созданном соединении, перейдите на вкладку Groups, нажмите кнопку New и выберите пункт Group.
4. Заполните dn существующей группы (для FreeIPA по умолчанию это группа cn=ipausers,cn=groups,cn=accounts,dc=freeipa,dc=test и укажите разрешённые пулы.
Active Directory
Настройка аутентификации в Active Directory (например, на samba-dc) аналогична FreeIPA кроме следующих различий (на примере домена company.localnet):
1. Имя пользователя можно указать в виде имя@домен:
2. Различаются поля LDAP:
3. В качестве группы, например, может быть указана CN=Users,CN=Builtin,DC=company,DC=localnet.
IP-аутентификация
Этот тип аутентификации обеспечивает доступ клиентов к рабочим столам и виртуальным приложениям по их IP-адресу.
Минимальные параметры конфигурации (вкладка «Main»): имя аутентификатора, приоритет и метка.
После того, как аутентификатор типа «IP Autentificator» создан, следует создать группы пользователей. Группа может представлять собой диапазон IP-адресов (192.168.0.1-192.168.0.55), подсеть (192.168.0.0/24) или отдельные IP-адреса (192.168.0.33,192.168.0.50)
Настройка групп пользователей
На вкладке "Groups" необходимо создать группы пользователей с указанием какую базу пользователей использовать.
Настройка «OS Manager»
«OS Manager» запускает ранее настроенные службы.
«Linux OS Manager» используется для виртуальных рабочих столов на базе Linux. Он выполняет задачи переименования и управления сеансами виртуальных рабочих столов.
«Windows Basic OS Manager» используется для виртуальных рабочих столов на базе Windows, которые не являются частью домена AD.
Минимальные настройки для «Linux OS Manager» и «Windows Basic OS Manager»:
- «Name» — название;
- «Logout Action» — действие, которое OpenUDS будет выполнять на виртуальном рабочем столе при закрытии сеанса пользователя («Keep service assigned» = постоянная ВМ, при выходе пользователя, система не предпринимает никаких действий, при повторном входе пользователю будет назначен тот же рабочий стол. «Remove service» = непостоянная ВМ, при выходе пользователя из системы, система уничтожит рабочий стол. «Keep service assigned even on new publication» — сохранение назначенной службы даже при создании новой публикации «Service Pool»);
- «Max. Idle time» («Время простоя») — время (в секундах) простоя виртуального рабочего стола. По истечении этого времени OpenUDS Actor автоматически закроет сеанс. Отрицательные значения и значения менее 300 секунд отключают эту опцию.
Настройка «Transports»
Для подключения к виртуальным рабочим столам необходимо создать «Transports». Это приложения, которые будут выполняться на клиенте и будут отвечать за предоставление доступа к реализованной службе.
Можно создать один транспорт для различных «пулов» или установить по одному для каждого «пула».
При создании «Transports» необходимо выбрать его тип: «Direct» — используется, если пользователь имеет доступ к виртуальным рабочим столам из внутренней сети (например, LAN, VPN и т. д.); «Tunneled» — используется, если у пользователя нет прямого подключения к рабочему столу.
RDP (direct)
«RDP» позволяет пользователям получать доступ к виртуальным рабочим столам Windows/Linux. И на клиентах подключения, и на виртуальных рабочих столах должен быть установлен и включен протокол RDP (для виртуальных рабочих столов Linux необходимо использовать XRDP).
SPICE (direct)
«SPICE» позволяет пользователям получать доступ к виртуальным рабочим столам Windows/Linux. На клиентах подключения должен быть установлен клиент «SPICE» (Virt-Manager). Транспортный протокол «SPICE» может использоваться только с oVirt/RHEV и OpenNebula.
X2Go (direct)
«X2Go» позволяет пользователям получать доступ к виртуальным рабочим столам Linux. И на клиентах подключения (клиент), и на виртуальных рабочих столах (сервере) должен быть установлен и включен «X2Go».
Настройка «Service Pools»
После того, как был создан и настроен хотя бы один Service provider (с базой службы), аутентификатор (с пользователем и группой), «Manager OS» и «транспорт», нужно создать Service Pool для публикации виртуальных рабочих столов.
Вкладка «Main»:
- «Name» — название службы;
- «Base service» — служба, созданная ранее в «Поставщике услуг»;
- «OS Manager».
Вкладка «Display»:
- «Visible» — если этот параметр отключен, пул не будет отображаться у пользователей;
- «Associated Image» — Изображение, связанное с услугой. Изображение должно быть предварительно добавлено в репозиторий изображений (раздел «Tools»→«Gallery»);
- «Pool group» — позволяет группировать различные службы. Группа должна быть предварительно создана в разделе «Pools»→«Groups».
Вкладка «Availability»:
- «Initial available services» — минимальное количество виртуальных рабочих столов, созданных, настроенных и назначенных/доступных для службы;
- «Services to keep in cache» — количество доступных виртуальных рабочих мест. Они всегда будут настроены и готовы к назначению пользователю (они будут автоматически создаваться до тех пор, пока не будет достигнуто максимальное количество машин, указанное в поле «Maximum number of services to provide»);
- «Maximum number of services to provide» — максимальное количество виртуальных рабочих столов, созданных системой в «пуле служб» (рабочие столы, созданные в кэше L2, не учитываются).
Нажать кнопку «Save» и система начнет создавать виртуальные рабочие столы на основе настроенного кеша (вкладка «Availability»).
После создания пула, в настройках:
- на вкладке «Groups» назначить группы доступа (выбрать аутентификатор и группу, которая будет иметь доступ к этому пулу служб):
- на вкладке «Transports» выбрать способы подключения пользователей к рабочему столу:
Подготовка шаблона виртуальной машины
Требования к шаблону виртуальной машины:
- Установить openuds-actor:
# apt-get install openuds-actor
- Включить автозапуск сервиса udsactor.service:
# systemctl enable udsactor.service
- Зарегистрировать UDS Actor на сервере UDS:
- запустить UDS Actor из меню («Настройки»→«UDS Actor Configuration») или командой:
$ /usr/sbin/UDSActorConfig-pkexec
- Потребуется ввести пароль пользователя, входящего в группу wheel.
- на вкладке «UDS Server» необходимо указать имя или IP-адрес сервера UDS, имя и пароль пользователя, имеющего права администратора в среде UDS и нажать кнопку «Register with UDS» («Зарегистрироваться в UDS»).
- Установить и настроить один из вариантов удаленного доступа:
Подключение пользователя к виртуальному рабочему месту
На клиенте должен быть установлен пакет openuds-client:
# apt-get install openuds-client
Чтобы иметь возможность подключаться к виртуальному рабочему столу, должны быть установлены клиенты каждого используемого протокола удаленного доступа (xfreerdp, x2goclient).
Подключение к виртуальному рабочему месту:
- подключиться к серверу OpenUDS с помощью браузера http://<openuds_address>, выбрать средство проверки подлинности, если доступно несколько, ввести имя пользователя/пароль (их должен указать администратор);
- на панели управления будут отображены все ВМ (или шаблоны), к которым у пользователя есть доступ:
- при выборе ВМ, автоматически загрузится openuds-client, который запустит приложение для просмотра удаленного рабочего стола
После выбора пула, автоматически стартует OpenUDS Client, который обрабатывает URL, получает необходимые настройки протокола удаленного доступа для предоставленной (свободной) ВМ, формирует файл описания сессии и передает его приложению-клиенту удалённого доступа, которое и устанавливает соединение с указанной ВМ.
По завершении сеанса пользователь ВМ выходит из нее, что приводит к остановке OpenUDS Actor. Брокер openUDS считает, что ВМ стала недоступной и, если пул постоянный, то он запускает ВМ, а если пул временный, то происходит удаление файлов ВМ в хранилище и создается новая ВМ из мастер-образа.