Как это работает?
Адресация и безопасность
Поддержка wildcard-доменов
Установка хост-сервера
Привязка доменного имени
Настройка SSL-сертификата
Настройка хост-клиента на новый хост-сервер
Администрирование хост-сервера
Хост-сервер обеспечивает удаленный доступ к локальным серверам Пульт.Онлайн. По умолчанию, дистрибутивы серверов Пульт.Онлайн настроены на хост-сервер pult.host. Чтобы установить и настроить собственный хост-сервер, необходимо выполнить следующие действия:
Механизм удаленного доступа к локальным серверам состоит из двух компонентов:
Хост-сервер принимает запросы от пользовательских браузеров и перенаправляет их на подключенные хост-клиенты, которые, в свою очередь, отправляют их на свои SCADA-серверы. Ответ возвращается обратно по цепочке браузеру пользователя.
Хост-клиент - инициирует подключение к хост-серверу и к SCADA-серверу, регистрируется на хост-сервере и транслирует HTTP-запросы от хост-сервера к SCADA-серверу и обратно.
Другими словами, установленный в локальной сети сервер Пульт.Онлайн посредством сервиса hostclient подключается к хост-серверу и обрабатывает HTTP-запросы к хост-серверу, полученные через хост-клиент, как если бы они шли напрямую к локальному SCADA-серверу.
ПОЛЬЗОВАТЕЛЬ (браузер)
│
v
┌─────────────────┐
│ ХОСТ-СЕРВЕР │ <─── pult.host (доменное имя + SSL)
│ (в интернете) │
└─────────────────┘
^
│ <─── хост-клиент инициирует подключение к хост-серверу
│
┌─────────────────┐
│ ХОСТ-КЛИЕНТ │ <─── сервис hostclient (в комплекте с сервером Пульт.Онлайн)
│ (локально) │
└─────────────────┘
│
│ <─── хост-клиент инициирует подключение к локальному SCADA-серверу
v
┌─────────────────┐
│ SCADA-СЕРВЕР │ <─── локальный сервер Пульт.Онлайн
│ (локально) │
└─────────────────┘
Обмен данными (цепочка запроса и ответа):
Интернет | ЛВС
|
┌───────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐
| | --> | | --> | | --> | |
| Браузер | | Хост-сервер | | Хост-клиент | | SCADA-сервер |
| | <-- | | <-- | | <-- | |
└───────────┘ └───────────────┘ └───────────────┘ └─────────────────┘
|
|
Хост-сервер определяет, какому хост-клиенту пересылать запрос от браузера пользователя по первому компоненту доменного имени. Например, запросы на test.pult.host будут направлены хост-клиенту с параметром client_domain=test в его конфигурационном файле.
Чтобы хост-клиенты не могли захватить чужой "домен" (чужой client_domain), хост-сервер запоминает секретный ключ (client_secret), который хост-клиент отправляет ему вместе с client_domain при подключении. Если другой клиент попытается подключиться с чужим client_domain и предоставит неверный секретный ключ - такое подключение будет сброшено.
Вся коммуникация между браузером пользователя, хост-сервером и хост-клиентом выполняется по HTTPS (SSL-шифрование + сертификат хост-сервера).
Внутренняя коммуникация между хост-клиентом и SCADA-сервером может выполняться как с шифрованием, так и без шифрования, в зависимости от настройки SCADA-сервера (настройка хост-клиента должна соответствовать настройке SCADA-сервера, см. параметры server_ssl и server_checkcert).
Для работы механизма адресации вам потребуется Wildcard-домен (подстановочный домен) — это конфигурация DNS, позволяющая использовать символ звездочки (*) для автоматического направления всех незарегистрированных поддоменов (например, *.pult.host) на один IP-адрес. Также потребуется SSL-сертификат, обеспечивающий поддержку таких доменов, т.к. обычные сертификаты их не поддерживают. То есть, вам потребуется единый сертификат, который будет валидным для всех поддоменов вашего домена.
Для этих целей может быть использован бесплатный сертификат Lets Encrypt, но следует иметь ввиду, что его срок действия составляет три месяца, а автоматическое обновление практически не реализуемо, т.к. при каждом обновлении сертификата certbot будет требовать верификации вашего домена через создание уникальной TXT-записи в DNS - продлевать сертификат и обновлять запись придется вручную. Пример работы с certbot-ом для обновления сертификата - ниже.
Выполним установку хост-сервера на виртуальный выделенный сервер (VDS). Предполагается, что вы завели VDS у провайдера и имеете к нему доступ по SSH. В качестве ОС сервера рекомендуется Ubuntu Server или другие распространенные дистрибутивы Linux (Debian, CentOS, Fedora и т.п.)
Подключаемся по SSH к серверу
Выполняем команду установки:
wget -O - http://dl.pult.online/ru/hostserver_linux_x64 | bash -s /pult_hostserver
Данная команда установит хост-сервер в папку /pult_hostserver (ключ -s).
После установки хост-сервер автоматически пропишется в автозагрузку и запустится.
Выполним тестовый запрос к серверу:
https://<ip сервера>Зарегистрируйте доменное имя для вашего хост-сервера
В админке доменного регистратора, в настройках домена, укажите DNS-сервера провайдера вашего VDS:

В примере указаны DNS сервера провайдера Селектел: ns1.vscale.ru и ns2.vscale.ru
В админке провайдера VDS, в разделе управления доменами, заведите ваш домен и укажите A и NS записи для вашего домена, например:

Обратите внимание, вам обязательно требуется A-запись *.<ваш домен> - это позволит перенаправлять на ваш хост-сервер запросы к поддоменам на вашем домене и таким образом реализовать адресацию запросов к требуемым хост-клиентам.
Проверьте привязку домена к IP вашего сервера
Наберитесь терпения - для обновления DNS-записей может потребоваться несколько часов. После обновления DNS ваш хост-сервер должен открываться по доменному имени.
После успешной привязки домена необходимо настроить SSL-сертификат. По умолчанию, хост-сервер работает на самоподписном сертификате. Это обеспечивает шифрование трафика, но не защищает от его перехвата при атаках типа Man-in-the-Middle. Вторая проблема - браузер не доверяет самоподписным сертификатам и, как минимум, при первом подключении к серверу будет показывать предупреждение "Ваше соединение не является конфиденциальным".
Чтобы решить эти проблемы, необходимо подключить SSL-сертификат, выпущенный доверенным центром и поддерживающий wildcard-домены, например, бесплатный сертификат от Lets Encrypt.
Установите certbot от Lets Encrypt:
apt install certbot -y
Запросите выпуск сертификата для вашего домена:
certbot certonly --manual --agree-tos --email <email> --preferred-challenges=dns --server https://acme-v02.api.letsencrypt.org/directory -d *.<domain>
Где
<email> - ваш емайл, на который будут приходить уведомления о необходимости продления сертификата<domain> - доменное имя хост-сервера (обратите внимание, что перед доменным именем необходимо указать звездочку (*), чтобы сертификат распространялся именно на клиентские поддомены, например так: *.myhostserver.ru).Обратите внимание: запрошенный таким образом (со звездочкой) сертификат будет действителен только для поддоменов на вашем домене. Это нормально, т.к. доступ к хост-серверу по доменному имени не требуется - вся работа с хост-сервером будет идти именно через клиентские поддомены.
В ответ на запрос Please deploy a DNS TXT record under the name перейдите в админку VDS-провайдера и создайте TXT-запись для вашего домена с указанными certbot-ом именем (без точки на конце) и значением. Например, для запроса
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.myhostserver.ru.
with the following value:
UjeA8MDhpHdhyVG5T0VDA6bo9nhG8H8KhiPjxH15vz8
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Создайте TXT-запись с именем _acme-challenge.myhostserver.ru и значением UjeA8MDhpHdhyVG5T0VDA6bo9nhG8H8KhiPjxH15vz8:

После успешной генерации сертификата скопируйте путь к файлам fullchain.pem и privkey.pem. Путь будет содержать имя вашего домена и выглядеть примерно так: /etc/letsencrypt/live/myhostserver.ru
Перейдите в папку установки хост-сервера
cd /pult_hostserver
Откройте конфигурационный файл сервиса hostserver:
nano services/hostserver/config.cfg
Пропишите путь к файлам сертификатов:
ssl_key_file=/etc/letsencrypt/live/myhostserver.ru/privkey.pem ssl_cert_file=/etc/letsencrypt/live/myhostserver.ru/fullchain.pem ssl_chain_file=/etc/letsencrypt/live/myhostserver.ru/fullchain.pem
Сохраните изменения и выйдите из редактора командами Ctrl+O и Ctrl+X. Хост-сервер автоматически применит новый конфиг, принудительно перезапускать сервис hostserver не требуется.
Проверьте в браузере работу хост-сервера, запросив произвольный поддомен на вашем домене. Например: https://promzona.myhostserver.ru/. Если сертификат успешно применился, браузер без предупреждений о небезопасности откроет страницу клиентского интерфейса или выдаст сообщение Хост не подключен для отсутствующего клиента.
На момент написания этого руководства срок действия сертификата составлял 3 месяца. Не дожидайтесь истечения срока, обновляйте сертификат заранее! Для обновления сертификата выполняйте шаги 2 и 3 данного параграфа.
В интерфейсе сервера Пульт.Онлайн в разделе Система/Настройки выберите сервис hostclient
Измените параметр server_host, указав в нем доменное имя вашего хост-сервера (например, myhostserver.ru, без https://)
Также вы можете изменить параметр client_domain, указав там желаемое имя поддомена, которое хост-сервер будет ассоциировать с вашим клиентом. Так, например, указав client_domain=promzona ваш SCADA-сервер будет доступен на хост-сервере по адресу promzona.myhostserver.ru
Хост-сервер не требует администрирования, за исключением случаев, когда хост-клиент "потерял" секретный ключ и не может подключиться к хост-серверу на свое старое доменное имя. Такая ситуация может возникнуть при полной переустановке сервера Пульт.Онлайн, например, при сбросе устройства, на котором был установлен сервер, на заводские настройки.
В этом случае потребуется удалить с хост-сервера информацию о старом секретном ключе клиента, чтобы при новой попытке подключения хост-сервер принял новый ключ.
Удаление секретного ключа:
Подключитесь к хост-серверу по SSH
Перейдите в папку с секретными ключами в папке установки хост-сервера
cd /pult_hostserver/services/hostserver/secrets
Выведите список клиентских доменов:
ls -l
Удалите старый домен, например:
rm promzona
Перезапустите хост-клиент на сервере Пульт.Онлайн