Конфигурационные файлы Шлюза

Конфигурационный файл gateway.yaml

Начиная с Termidesk VDI версии 6.1 компонент «Шлюз» (пакет termidesk-gateway) не входит в основную поставку. Для замены «Шлюза» следует использовать программу для электронной вычислительной машины «Балансировщик нагрузки Термидеск Коннект» (Termidesk Connect) с лицензией Termidesk Connect Basic.

При обновлении компонента «Универсальный диспетчер» нужно обновить значение для параметра urlCheckToken.

Параметры конфигурирования Шлюза задаются в конфигурационном файле /etc/termidesk/gateway.yaml. Реализована обратная совместимость с прошлым файлом конфигурации: файл /etc/termidesk/gateway.yaml реализует подстановку значений параметров из переменных окружения, которые были заданы в /etc/termidesk/termidesk-gateway.conf.

Задание параметров может производиться и переменными окружения в формате: $site или ${ENV:DEFAULT}, где DEFAULT - значение для подстановки, если указанная переменная окружения не найдена. Если переменная окружения существует с пустым значением, то пустое значение будет подставлено в /etc/termidesk/gateway.yaml вместо переменной, а не значение по умолчанию.

Например, если нужно задать через переменные окружения адрес IP_ADDR и порт прослушивания службы PORT, то в конфигурационном файле /etc/termidesk/gateway.yaml можно изменить значение следующим образом:

listen: ${IP_ADDR}:${PORT:8000}

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

listen: "127.0.0.1:8181"

Для задания параметров конфигурирования Шлюза из файла нужно отредактировать файл /etc/termidesk/gateway.yaml, указав необходимые значения для параметров (см. таблицу Доступные параметры Шлюза). Пример файла /etc/termidesk/gateway.yaml:

В примере файла значения параметров user и pass преобразованы c помощью утилиты gwpasswd, которая входит в состав компонента.
_val0: &sslprof0
  key: ${sslKey:/etc/termidesk/ssl-cert-snakeoil.key}
  cert: ${sslCert:/etc/termidesk/ssl-cert-snakeoil.pem}
  ca: $\{sslca}
  passphrase: $\{sslpassphrase}
  dhparams: $\{ssldhparams}
  ciphers: $\{sslciphers}

gwservers:
- listen: ${wsServerIP:0.0.0.0}:${wsServerPort:5099}
  websocket:
    pingtimeout: ${wsIdleTimeout:30}
  checktoken:
    url: ${urlCheckToken:https://disp.termidesk.local/api/wsproxy/v6.1/verify}
  tcp_downstream:
    reconnect: ${gwTCPReconnect:0}

- listen: ${wssServerIP:0.0.0.0}:${wssServerPort:10000}
  websocket:
    pingtimeout: ${wsIdleTimeout:30}
  checktoken:
    url: ${urlCheckToken:https://disp.termidesk.local/api/wsproxy/v6.1/verify}
  tcp_downstream:
    reconnect: ${gwTCPReconnect:0}
  ssl: *sslprof0

mgtserver:
  listen: ${mgtServerIP:0.0.0.0}:${mgtServerPort:8102}
  path: ${healthCheckURL:/api/health}
  token: $\{healthcheckaccesskey}
  ssl: *sslprof0
  metrics:
    path: ${metricsCheckURL:/api/health/metrics}
    token: $\{metricsaccesskey}

rabbitmq:
  url: ${coordinatorUrl:amqp://USER:PASS@disp.termidesk.local:5672/termidesk}
  user: ${coordinatorUser:AES256:F406D42BBA34B79A02AF73FFD1713A82}
  pass: ${coordinatorPass:AES256:9E0A2FBFE5B03E31C8BC717C437D82E8}
  timeout: $\{coordinatortimeout}
  refreshtime: ${coordinatorRefreshTime:60}
  single: ${coordinatorSingle:true}
  exchange: $\{coordinatorexchange}
  routingkey: $\{coordinatorroutingkey}

loglevel:
  info: ${logInfo:true}
  debug: ${logDebug:false}

Чтобы получить преобразованное значение параметра с помощью утилиты gwpasswd, нужно:

  • выполнить команду:

sudo gwpasswd -e <значение>

где:

-e - ключ для запуска преобразования переданной строки;

<значение> - строка, значение которой будет преобразовано;

Существует также второй способ передачи строки на вход утилите gpasswd:

echo <значение> | gwpasswd -e -
  • преобразованное значение будет отображено в интерфейсе командной строки. Полученное значение необходимо внести в соответствующий параметр конфигурационного файла с приставкой AES256:. Значение допускается вносить как в ранее существующий файл /etc/termidesk/termidesk-gateway.conf, так и в /etc/termidesk/gateway.yaml. В приведенном выше примере значение было подставлено в параметр ${coordinatoruser}:

rabbitmq:
  url: ${coordinatorUrl:amqp://USER:PASS@disp.termidesk.local:5672/termidesk}
  user: ${coordinatorUser:AES256:F406D42BBA34B79A02AF73FFD1713A82}
  • выполнить перезагрузку службы:

sudo systemctl restart termidesk-gateway.service
Таблица 1. Доступные параметры Шлюза
Параметр Описание

Секция val0: &sslprof0

_val0: &sslprof0

Параметр &sslprof0 преобразует значения параметров защищенного подключения в шаблон, который затем может быть использован в других частях файла gateway.yaml.

Для использования шаблона в соответствующей секции файла следует создать параметр ssl:*sslprof0.

Значение *sslprof0 является ссылкой на шаблон и подставляет в соответствующей секции параметры защищенного подключения, заданные в шаблоне параметра &sslprof0.

Пример:

_val0: &sslprof0
  key: ${sslKey:/etc/termidesk/ssl-cert-snakeoil.key}
  cert: ${sslCert:/etc/termidesk/ssl-cert-snakeoil.pem}

mgtserver:
  ssl: *sslprof0
  listen: ${mgtServerIP:0.0.0.0}:${mgtServerPort:8102}
  path: ${healthCheckURL:/api/health}
  token: $\{healthcheckaccesskey}

key: ${sslKey:/etc/termidesk/ssl-cert-snakeoil.key}

Путь к файлу ключа для соединения SSL. Параметр не имеет значения по умолчанию.

При использовании сертификатов и ключей на файлы .key и .pem необходимо:

  • назначить права по использованию ключа и сертификата пользователю termidesk-gateway:

sudo chown termidesk-gateway:termidesk-gateway /etc/termidesk/ssl-cert-snakeoil.*
  • предоставить права на чтение ключа и сертификата:

sudo chmod 640 /etc/termidesk/ssl-cert-snakeoil.key
sudo chmod 644 /etc/termidesk/ssl-cert-snakeoil.pem

cert: ${sslCert:/etc/termidesk/ssl-cert-snakeoil.pem}

Путь к файлу сертификата для соединения SSL. Параметр не имеет значения по умолчанию

ca: ${sslca}

Путь к корневому сертификату, на котором выпущен сертификат, указанный в параметре cert. Параметр не имеет значения по умолчанию.

Используется для проверки подлинности указанного в параметре cert сертификата

passphrase: ${sslpassphrase}

Пароль для пары «сертификат + ключ». Параметр не имеет значения по умолчанию

dhparams: ${ssldhparams}

Путь к файлу с ключами Диффи-Хеллмана для соединения SSL. Параметр не имеет значения по умолчанию

ciphers: ${sslciphers}

Используемый алгоритм преобразований для соединения SSL. Параметр не имеет значения по умолчанию.

Список поддерживаемых алгоритмов определяется SSL-библиотекой, установленной в ОС

Секция gwservers:

listen: ${wsServerIP:0.0.0.0}:${wsServerPort:5099}

Назначение параметров узла Шлюза:

  • wsServerIP - адрес прослушивания входящих подключений;

  • wsServerPort - порт прослушивания службы для входящих подключений.

Значения по умолчанию:

  • wsServerIP:0.0.0.0;

  • wsServerPort:5099.

Для протокола SSL нужно использовать параметры wssServerIP и wssServerPort и значение 10000 для номера порта:

listen:${wssServerIP:0.0.0.0}:${wssServerPort:10000}

При использовании протокола SSL обязательно должна быть настроена секция _val0: &sslprof0.

Порт прослушивания службы может быть назначен любой, здесь приведены стандартные значения. Однако в случае, если нужно назначить порт из диапазона общеизвестных TCP-портов 1 - 1023, следует установить исполняемому файлу /usr/bin/termidesk-gateway разрешение на их использование:

sudo setcap 'cap_net_bind_service=+ep' /usr/bin/termidesk-gateway

websocket:

pingtimeout: ${wsIdleTimeout:30}

Таймаут соединения (в секундах) к компоненту «Клиент» Termidesk VDI.

Может принимать значения в интервале с 8 до 960, а также 0 (отключен).

Значение по умолчанию: «30»

checktoken:

url: ${urlCheckToken:https://disp.termidesk.local/api/wsproxy/v6.1/verify}

Назначение IP-адреса или FQDN узла компонента «Универсальный диспетчер» с ролью «Портал пользователя» для обслуживания API-запросов по валидации подключений, запрашиваемых «Универсальным диспетчером» через Шлюз. При указании FQDN стоит учитывать, что ОС должна иметь возможность разрешить его в IP-адрес.

Следует использовать значения версий API для соответствующей версии компонента «Универсальный диспетчер»:

  • v5.1. Значение добавлено в Termidesk VDI версии 5.1;

  • v6.0. Значение добавлено в Termidesk VDI версии 6.0;

  • v6.1. Значение добавлено в Termidesk VDI версии 6.1.

Пример:

${urlCheckToken:https://disp.termidesk.local/api/wsproxy/v5.1/verify},

где:

disp.termidesk.local - FQDN узла компонента «Универсальный диспетчер» с ролью «Портал пользователя».

При комплексной установке Termidesk VDI значение disp.termidesk.local может быть заменено на 127.0.0.1.

Если программный комплекс Termidesk VDI установлен в распределенном варианте, следует изменить значение disp.termidesk.local на внешний IP-адрес или FQDN узла балансировщика нагрузки

tcp_downstream:

reconnect: ${gwTCPReconnect:0}

Количество переподключений Шлюза к ВМ.

Может принимать значения в интервале с 0 до 10.

Разные протоколы удаленного доступа могут требовать разных значений параметра:

  • для RDP нужно использовать ненулевое значение, поскольку некоторые функции (например, перенаправление USB в гостевую ОС ВМ по протоколу RDP) могут требовать переподключения;

  • для TERA и SPICE нужно использовать значение по умолчанию («0»).

Значение по умолчанию: «0»

Секция mgtserver:

listen: ${mgtServerIP:0.0.0.0}:${mgtServerPort:8102}

Задание параметров для подключения к API Шлюза:

  • mgtServerIP - IP-адрес или FQDN доступа к API Шлюза. Код 200 в ответе на API-запрос свидетельствует о работоспособности Шлюза. При распределенной установке следует указать значение 0.0.0.0 или явно задать IP-адрес, настроенный на одном из сетевых интерфейсов, для активации приема запросов с внешних систем;

  • mgtServerPort - порт доступа к API Шлюза.

Значения по умолчанию:

  • mgtServerIP:127.0.0.1;

  • mgtServerPort:8102

path: ${healthCheckURL:/api/health}

Адрес для запросов проверки состояния Шлюза.

Значение по умолчанию: ${healthCheckURL:/api/health}

token: ${healthcheckaccesskey}

Параметр для доступа к API Шлюза. Параметр не имеет значения по умолчанию.

Значение может быть получено из параметра HEALTH_CHECK_ACCESS_KEY, определенного в конфигурационном файле /etc/opt/termidesk-vdi/termidesk.conf узла «Универсального диспетчера».

Пример:

${healthCheckAccessKey:270c1e6a4cd013a3824982458a26ec4dcac17f60f80a74098a62994f775351e2},

где:

270c1e6a4cd013a3824982458a26ec4dcac17f60f80a74098a62994f775351e2 - значение, указанное в параметре HEALTH_CHECK_ACCESS_KEY конфигурационного файла «Универсального диспетчера»

ssl: *sslprof0

Настройка SSL

metrics:

path: ${metricsCheckURL:/api/health/metrics}

Адрес API для запроса метрик узла Шлюза.

Значение по умолчанию: ${metricsCheckURL:/api/health/metrics}

token: ${metricsaccesskey}

Ключ для доступа к API-запроса метрик узла Шлюза. Параметр не имеет значения по умолчанию.

Значение может быть получено из параметра METRICS_ACCESS_KEY, определенного в конфигурационном файле /etc/opt/termidesk-vdi/termidesk.conf узла «Универсального диспетчера».

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

  • размер ключа должен составлять от 0 до 64 символа;

  • должны использоваться символы в шестнадцатеричной системе (0-9, a-f).

Пример: ${metricsAccessKey:270c1e6a4cd013a382498}

Секция rabbitmq:

url: ${coordinatorUrl:amqp://USER:PASS@disp.termidesk.local:5672/termidesk}

URL, содержащий IP-адрес (или FQDN) и порт (по умолчанию 5672) для подключения к серверу RabbitMQ, а также очередь - termidesk. Параметр не имеет значения по умолчанию.

Используемый формат: amqp(s)://USER:PASS@<IP-адрес>:<порт>/termidesk.

USER и PASS необязательные параметры, они могут быть заданы в параметрах ${coordinatoruser} и ${coordinatorpass}.

Пример: ${coordinatorUrl:amqp://USER:PASS@disp.termidesk.local:5672/termidesk}.

На данный момент поддерживается задание только одного URL для подключения к серверу RabbitMQ.

Подключение может использоваться как незащищенное (в этом случае указывается amqp), так и защищенное (amqps).

В случае, если RabbitMQ установлен на том же узле (локально), нужно указать:

${coordinatorUrl: amqp://127.0.0.1:5672/termidesk}

user: ${coordinatoruser}

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

Если параметр задан, то он меняет значение USER в параметре ${coordinatorurl}.

При стандартной установке компонента «Универсальный диспетчер» строго по документации в части настроек файла /etc/rabbitmq/definitions.json используется ${coordinatorUser:termidesk}

pass: ${coordinatorpass}

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

Если параметр задан, то он меняет значение PASS в параметре ${coordinatorurl}.

При стандартной установке компонента «Универсальный диспетчер» строго по документации в части настроек файла /etc/rabbitmq/definitions.json используется ${coordinatorPass:ksedimret}

timeout: ${coordinatortimeout}

Интервал (в секундах) ожидания ответа от сервера RabbitMQ. Параметр не имеет значения по умолчанию

Пример: ${coordinatorTimeout:10}

refreshtime: ${coordinatorRefreshTime:60}

Интервал (в секундах) обновления (переопубликации) регистрационной информации (URL и другие данные) Шлюза.

Значение «0» отключает автоматическую отправку состояния Шлюза на сервер RabbitMQ.

Значение по умолчанию: «60»

single: ${coordinatorSingle:true}

Способ передачи данных.

Параметр принимает значения:

  • true - данные передаются до первого подтверждения;

  • false - данные передаются по циклу (бесконечно).

Значение по умолчанию: true

exchange: ${coordinatorexchange}

Координатор маршрутизации сообщений, определенный в RabbitMQ. Отвечает за маршрутизацию сообщений в разные очереди. Параметр не имеет значения по умолчанию

routingkey: ${coordinatorroutingkey}

Ключ маршрутизации RabbitMQ, используется для маршрутизации задачи в очереди. Параметр не имеет значения по умолчанию

Секция loglevel:

info: ${logInfo:true}

Активация режима журналирования уровня «INFO»

debug: ${logDebug:false}

Активация подробного режима журналирования уровня «DEBUG»