VDI/OpenUDS: различия между версиями

Материал из ALT Linux Wiki
< VDI
(Отдельный сервер без виртуализации)
Строка 364: Строка 364:
#* ???
#* ???


== Подключение пользователя к виртуальному рабочему месту==
== Подключение пользователя к виртуальному рабочему месту ==


На клиенте должен быть установлен пакет {{pkg|openuds-client}}:
На клиенте должен быть установлен пакет {{pkg|openuds-client}}:
  # apt-get install openuds-client
  # apt-get install openuds-client


* подключиться к серверу OpenUDS с помощью браузера http://<openuds_address>, имя/пароль должен указать администратор;
Чтобы иметь возможность подключаться к виртуальному рабочему столу, должны быть установлены клиенты каждого используемого протокола удаленного доступа (xfreerdp, x2goclient).
* в веб-интерфейсе будут отображены все ВМ (или шаблоны), к которым у пользователя есть доступ:
 
Подключение к виртуальному рабочему месту:
* подключиться к серверу OpenUDS с помощью браузера http://<openuds_address>, выбрать средство проверки подлинности, если доступно несколько, ввести имя пользователя/пароль (их должен указать администратор);
* на панели управления будут отображены будут отображены все ВМ (или шаблоны), к которым у пользователя есть доступ:
*:[[Файл:Openuds_client.png|OpenUDS. Подключение пользователя к виртуальному рабочему месту]]
*:[[Файл:Openuds_client.png|OpenUDS. Подключение пользователя к виртуальному рабочему месту]]
* при выборе ВМ, автоматически загрузится openuds-client, который запустит приложение для просмотра удаленного рабочего стола
* при выборе ВМ, автоматически загрузится openuds-client, который запустит приложение для просмотра удаленного рабочего стола
После выбора пула, автоматически стартует OpenUDS Client, который обрабатывает URL, получает необходимые настройки протокола удаленного доступа для предоставленной (свободной) ВМ, формирует файл описания сессии и передает его приложению-клиенту удалённого доступа, которое и устанавливает соединение с указанной ВМ.


{{Note|Если для подключения к службе настроено более одного типа транспорта, то в правом верхнем углу службы будет отображена кнопка. Если выбрать непосредственно ВМ, будет вызван транспорт по умолчанию (транспорт с меньшим значением в поле приоритет). Для того чтобы использовать другой транспорт, нужно выбрать его в раскрывающемся списке. }}
{{Note|Если для подключения к службе настроено более одного типа транспорта, то в правом верхнем углу службы будет отображена кнопка. Если выбрать непосредственно ВМ, будет вызван транспорт по умолчанию (транспорт с меньшим значением в поле приоритет). Для того чтобы использовать другой транспорт, нужно выбрать его в раскрывающемся списке. }}
По завершении сеанса пользователь ВМ выходит из нее, что приводит к остановке OpenUDS Actor. Брокер openUDS считает, что ВМ стала недоступной и, если пул постоянный, то он запускает ВМ, а если пул временный, то происходит удаление файлов ВМ в хранилище и создается новая ВМ из мастер-образа.


{{Note|При подключении пользователя к виртуальному рабочему месту OpenUDS фиксирует доступ и отображает информацию о привязанном сервисе на вкладке «Assigned services» соответствующего «Service Pools»:
{{Note|При подключении пользователя к виртуальному рабочему месту OpenUDS фиксирует доступ и отображает информацию о привязанном сервисе на вкладке «Assigned services» соответствующего «Service Pools»:

Версия от 14:44, 6 июля 2021

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


Введение

OpenUDS это много-платформенный брокер подключений для создания и управления виртуальными рабочими местами и приложениями. Основные компоненты решения VDI на базе OpenUDS:

  1. OpenUDS Server (openuds-server) - брокер подключений пользователей, а так же интерфейс администратора для настройки.
  2. SQL Server. Для работы django приложения, которым является openuds-server необходим SQL сервер, например mysql или mariadb. Может быть установлен на отдельном сервере.
  3. Платформа для запуска клиентских окружений и приложений. OpenUDS совместима со множеством систем виртуализации: PVE, OpenNebula, oVirt, OpenStack. Так же возможно использование с отдельным сервером без виртуализации (аналог терминального решения).
  4. OpenUDS Client (openuds-client) - клиентское приложения для подключения к брокеру соединений и дальнейшего получения доступа к виртуальному рабочему окружению
  5. OpenUDS Tunnel (openuds-tunnel) - решение для туннелирования обращений от клиента к виртуальному рабочему окружению. Предназначено для предоставления доступа из недоверенных сегментов сети, например из Интернет. Устанавливается на отдельный сервер.
  6. 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>
Примечание: Имя/пароль по умолчанию: root/udsmam0

Чтобы получить доступ к администрированию OpenUDS следует в меню пользователя выбрать пункт «Dashboard»:

OpenUDS. Меню пользователя


Дополнительная информация о настройках 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

Обновление

При обновлении для применения новой конфигурации необходимо скопировать новый файл конфигурации пакета:

/bin/cp -f /etc/openuds/settings.py{.rpmnew,}

Поправьте пароль к базе данных в поле 'PASSWORD'.

Перезапустите компьютер, так как при обновлении не создаётся файл /run/openuds/socket.

Настройка

Подключение системы виртуализации

В разделе «Services» подключаем один из «Service providers»:

  • PVE Platform Provider
  • OpenNebula Platform Provider
  • OpenStack Platform Provider
  • oVirt/RHEV Platform Provider
  • Static IP Machine Provider (отдельный сервер без виртуализации)

OpenUDS. Подключение системы виртуализации

OpenNebula

Минимальные параметры для настройки «OpenNebula Platform Provider»: название, IP-адрес сервера OpenNebula (поле «Host»), порт подключения, имя пользователя (с правами администратора) и пароль. Используя кнопку «Тест», можно убедиться, что соединение установлено правильно.

OpenUDS. Подключение системы виртуализации OpenNebula

После интеграции платформы OpenNebula в OpenUDS необходимо создать базовую службу типа «OpenNebula Live Images». Для этого дважды щелкните мышью по строке созданного поставщика услуг или в контекстном меню поставщика выберите «Detail»:

OpenUDS. Контекстное меню Service providers

На вкладке «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).

OpenUDS. Создание службы типа «OpenNebula Live Images». Вкладка «Main» OpenUDS. Создание службы типа «OpenNebula Live Images». Вкладка «Machine»

PVE

Минимальные параметры для настройки «Proxmox Platform Provider»: название, IP-адрес/имя сервера или кластера (поле «Host»), порт подключения, имя пользователя с достаточными привилегиями в PVE (в формате пользователь@аутентификатор) и пароль.

OpenUDS. Подключение системы виртуализации PVE

Используя кнопку «test», можно убедиться, что соединение установлено правильно.

После интеграции платформы PVE в OpenUDS необходимо создать базовую службу типа «Proxmox Linked Clone». Для этого дважды щелкните мышью по строке созданного поставщика услуг или в контекстном меню поставщика выберите «Detail»:

OpenUDS. Контекстное меню Service providers

Примечание: Выбрав пункт «Maintenance», можно приостановить все операции, выполняемые сервером OpenUDS для данного поставщика услуг. Поставщик услуг рекомендуется переводить в режим обслуживания в случаях, когда связь с этим поставщиком была потеряна или запланирован перерыв в обслуживании.


На вкладке «Services» нажмите «New»→«Proxmox Linked Clone»:

OpenUDS. Создание новой услуги

Заполните параметры конфигурации. Вкладка «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. Создание службы типа «Proxmox Linked Clone». Вкладка «Main» OpenUDS. Создание службы типа «Proxmox Linked Clone». Вкладка «Machine»

После того, как среда OpenUDS будет настроена и будет создан первый «пул служб», в среде PVE можно будет наблюдать, как разворачиваются рабочие столы. Сначала будет создан шаблон («UDS-Publication-pool_name-publishing-number») — клон ВМ, выбранной при регистрации службы. После завершения процесса создания клона будут созданы рабочие столы («Machine_Name-Name_Length»):

PVE. Созданные шаблоны и рабочие столы

Static IP Machine Provider (отдельный сервер без виртуализации)

OpenUDS позволяет создать подключение к отдельному серверу без виртуализации. Доступ к отдельному серверу осуществляется путем назначения IP-адресов пользователям.

Для настройки «Static IP Machine Provider» достаточно задать название поставщика.

OpenUDS. Подключение к серверу без виртуализации

Для создания базовых сервисов «Static IP Machine Provider» следует дважды щелкнуть мышью по строке созданного поставщика услуг или в контекстном меню поставщика выбрать «Detail»:

OpenUDS. Контекстное меню Service providers

На вкладке «Services» нажмите «New»→«Static Multiple IP» или «New»→«Static Single IP»:

OpenUDS. Создание новой услуги Static IP

Параметры конфигурации для услуги «Static Multiple IP»:

OpenUDS. Создание службы типа «Static Multiple IP»

Для услуги «Static Multiple IP» устройству должно быть назначено столько IP-адресов, сколько у нас есть пользователей.

Назначение IP-адресов будет осуществляться в порядке доступа, то есть первому пользователю, который обращается к службе, будет назначен первый IP-адрес в списке, второму второй и т.д. Например:

OpenUDS. Подключение к «Static Multiple IP»

Параметры конфигурации для услуги «Static Single IP»:

OpenUDS. Создание службы типа «Static Single IP»

Настройка аутентификации пользователей

В разделе «Autentificators» выбираем тип аутентификации пользователей. Можно выбрать как внешние источники (Active Directory, OpenLDAP и т. д.), так и внутренние (внутренняя база данных, IP-аутентификация):

  • Internal Database
  • Regex LDAP Authenticator
  • IP Autentificator

OpenUDS. Выбор типа аутентификации пользователей

Внутренняя база данных

При этом типе аутентификации данные пользователей и групп хранятся в базе данных, к которой подключен сервер OpenUDS.

Минимальные параметры конфигурации (вкладка «Main»): имя аутентификатора, приоритет и метка.

После того, как аутентификатор типа «Internal Database» создан, нужно будет зарегистрировать пользователей и группы пользователей. Для этого следует выбрать аутентификатор «Internal Database», во вкладке «Groups» создать группу пользователей, затем во вкладке «Users» создать пользователей.

OpenUDS. «Internal Database» - пользователи

Regex LDAP Authenticator

Этот аутентификатор позволяет пользователям и группам пользователей, принадлежащих практически любому аутентификатору на основе LDAP, получать доступ к виртуальным рабочим столам и приложениям.

Внимание! Для получения доступа к LDAP заведите в домене отдельного служебного пользователя с правами чтения LDAP.


FreeIPA

1. В разделе Authenticators нажмите кнопку New и выберите «Regex LDAP Authenticator».

Openuds-ldap-create.png

2. Заполните поля первых трёх вкладок. Для этого вам нужно добавить пользователя в LDAP, имеющего права на чтение каталога и знать домен. В примере указан домен freeipa.test.

Openuds-ldap-tab1.png

Openuds-ldap-tab2.png

Openuds-ldap-tab3.png

3. Помимо указания источника пользователей необходимо добавить существующую группу LDAP, в которую они входят. Дважды щёлкните на созданном соединении, перейдите на вкладку Groups, нажмите кнопку New и выберите пункт Group.

Openuds-ldap-group-add.png

4. Заполните dn существующей группы (для FreeIPA по умолчанию это группа cn=ipausers,cn=groups,cn=accounts,dc=freeipa,dc=test и укажите разрешённые пулы.

Openuds-ldap-new-group-edit.png

Active Directory
Примечание: Для Active Directory у коммерческой версии OpenUDS есть отдельный коннектор.


Настройка аутентификации в Active Directory (например, на samba-dc) аналогична FreeIPA кроме следующих различий (на примере домена company.localnet):

1. Имя пользователя можно указать в виде имя@домен:

Openuds-ldap-ad-auth.png

2. Различаются поля LDAP:

Openuds-ldap-ad-settings.png

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)

OpenUDS. IP Autentificator - создание группы пользователей

Настройка групп пользователей

На вкладке "Groups" необходимо создать группы пользователей с указанием какую базу пользователей использовать.

Настройка «OS Manager»

OpenUDS. Настройка «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 секунд отключают эту опцию.

OpenUDS. Настройка «OS Manager»

Настройка «Transports»

Для подключения к виртуальным рабочим столам необходимо создать «Transports». Это приложения, которые будут выполняться на клиенте и будут отвечать за предоставление доступа к реализованной службе.

OpenUDS. Настройка «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 для публикации виртуальных рабочих столов.

OpenUDS. Новый 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» назначить группы доступа (выбрать аутентификатор и группу, которая будет иметь доступ к этому пулу служб):
    OpenUDS. Назначение группы пулу служб
  • на вкладке «Transports» выбрать способы подключения пользователей к рабочему столу:
    OpenUDS. «Service Pools» - выбор способов подключения

Подготовка шаблона виртуальной машины

Требования к шаблону виртуальной машины:

  1. Установить openuds-actor:
    # apt-get install openuds-actor
    
  2. Включить автозапуск сервиса udsactor.service:
    # systemctl enable udsactor.service
    
  3. Зарегистрировать UDS Actor на сервере UDS:
    • запустить UDS Actor из меню («Настройки»→«UDS Actor Configuration») или командой:
    $ /usr/sbin/UDSActorConfig-pkexec
    
    Потребуется ввести пароль пользователя, входящего в группу wheel.
    • на вкладке «UDS Server» необходимо указать имя или IP-адрес сервера UDS, имя и пароль пользователя, имеющего права администратора в среде UDS и нажать кнопку «Register with UDS» («Зарегистрироваться в UDS»).
      UDS Actor Configuration
      На вкладке «Advanced» можно указать дополнительные параметры, в том числе уровень журналирования. Для применения настроек указанных на этой вкладке необходимо выполнить перерегистрацию UDS Actor.
  4. Установить и настроить один из вариантов удаленного доступа:

Подключение пользователя к виртуальному рабочему месту

На клиенте должен быть установлен пакет openuds-client:

# apt-get install openuds-client

Чтобы иметь возможность подключаться к виртуальному рабочему столу, должны быть установлены клиенты каждого используемого протокола удаленного доступа (xfreerdp, x2goclient).

Подключение к виртуальному рабочему месту:

  • подключиться к серверу OpenUDS с помощью браузера http://<openuds_address>, выбрать средство проверки подлинности, если доступно несколько, ввести имя пользователя/пароль (их должен указать администратор);
  • на панели управления будут отображены будут отображены все ВМ (или шаблоны), к которым у пользователя есть доступ:
    OpenUDS. Подключение пользователя к виртуальному рабочему месту
  • при выборе ВМ, автоматически загрузится openuds-client, который запустит приложение для просмотра удаленного рабочего стола

После выбора пула, автоматически стартует OpenUDS Client, который обрабатывает URL, получает необходимые настройки протокола удаленного доступа для предоставленной (свободной) ВМ, формирует файл описания сессии и передает его приложению-клиенту удалённого доступа, которое и устанавливает соединение с указанной ВМ.

Примечание: Если для подключения к службе настроено более одного типа транспорта, то в правом верхнем углу службы будет отображена кнопка. Если выбрать непосредственно ВМ, будет вызван транспорт по умолчанию (транспорт с меньшим значением в поле приоритет). Для того чтобы использовать другой транспорт, нужно выбрать его в раскрывающемся списке.


По завершении сеанса пользователь ВМ выходит из нее, что приводит к остановке OpenUDS Actor. Брокер openUDS считает, что ВМ стала недоступной и, если пул постоянный, то он запускает ВМ, а если пул временный, то происходит удаление файлов ВМ в хранилище и создается новая ВМ из мастер-образа.

Примечание: При подключении пользователя к виртуальному рабочему месту OpenUDS фиксирует доступ и отображает информацию о привязанном сервисе на вкладке «Assigned services» соответствующего «Service Pools»:

OpenUDS. Assigned services


TODO:
Отказоустойчивое решение