Пульт.Онлайн /

Установка собственного хост-сервера

Как это работает?
Адресация и безопасность
Поддержка wildcard-доменов
Установка хост-сервера
Привязка доменного имени
Настройка SSL-сертификата
Настройка хост-клиента на новый хост-сервер
Администрирование хост-сервера


Хост-сервер обеспечивает удаленный доступ к локальным серверам Пульт.Онлайн. По умолчанию, дистрибутивы серверов Пульт.Онлайн настроены на хост-сервер pult.host. Чтобы установить и настроить собственный хост-сервер, необходимо выполнить следующие действия:

  1. Установить дистрибутив Хост-сервер Пульт.Онлайн на выбранный сервер
  2. Подключить доменное имя
  3. Настроить SSL-сертификат

Как это работает?

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

  1. Хост-сервер (устанавливается в интернете)
  2. Хост-клиент (устанавливается вместе с сервером Пульт.Онлайн)

Хост-сервер принимает запросы от пользовательских браузеров и перенаправляет их на подключенные хост-клиенты, которые, в свою очередь, отправляют их на свои 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-доменов

Для работы механизма адресации вам потребуется Wildcard-домен (подстановочный домен) — это конфигурация DNS, позволяющая использовать символ звездочки (*) для автоматического направления всех незарегистрированных поддоменов (например, *.pult.host) на один IP-адрес. Также потребуется SSL-сертификат, обеспечивающий поддержку таких доменов, т.к. обычные сертификаты их не поддерживают. То есть, вам потребуется единый сертификат, который будет валидным для всех поддоменов вашего домена.

Для этих целей может быть использован бесплатный сертификат Lets Encrypt, но следует иметь ввиду, что его срок действия составляет три месяца, а автоматическое обновление практически не реализуемо, т.к. при каждом обновлении сертификата certbot будет требовать верификации вашего домена через создание уникальной TXT-записи в DNS - продлевать сертификат и обновлять запись придется вручную. Пример работы с certbot-ом для обновления сертификата - ниже.

Установка хост-сервера

Выполним установку хост-сервера на виртуальный выделенный сервер (VDS). Предполагается, что вы завели VDS у провайдера и имеете к нему доступ по SSH. В качестве ОС сервера рекомендуется Ubuntu Server или другие распространенные дистрибутивы Linux (Debian, CentOS, Fedora и т.п.)

  1. Подключаемся по SSH к серверу

  2. Выполняем команду установки:

     wget -O - http://dl.pult.online/ru/hostserver_linux_x64 | bash -s /pult_hostserver
    

    Данная команда установит хост-сервер в папку /pult_hostserver (ключ -s).
    После установки хост-сервер автоматически пропишется в автозагрузку и запустится.

  3. Выполним тестовый запрос к серверу:

    • в браузере откройте url https://<ip сервера>
    • проигнорируйте предупреждение браузера о небезопасном соединении
    • сервер должен отобразить страницу с надписью "Хост не подключен"

Привязка доменного имени

  1. Зарегистрируйте доменное имя для вашего хост-сервера

  2. В админке доменного регистратора, в настройках домена, укажите DNS-сервера провайдера вашего VDS:

    В примере указаны DNS сервера провайдера Селектел: ns1.vscale.ru и ns2.vscale.ru

  3. В админке провайдера VDS, в разделе управления доменами, заведите ваш домен и укажите A и NS записи для вашего домена, например:

    Обратите внимание, вам обязательно требуется A-запись *.<ваш домен> - это позволит перенаправлять на ваш хост-сервер запросы к поддоменам на вашем домене и таким образом реализовать адресацию запросов к требуемым хост-клиентам.

  4. Проверьте привязку домена к IP вашего сервера

    Наберитесь терпения - для обновления DNS-записей может потребоваться несколько часов. После обновления DNS ваш хост-сервер должен открываться по доменному имени.

Настройка SSL-сертификата

После успешной привязки домена необходимо настроить SSL-сертификат. По умолчанию, хост-сервер работает на самоподписном сертификате. Это обеспечивает шифрование трафика, но не защищает от его перехвата при атаках типа Man-in-the-Middle. Вторая проблема - браузер не доверяет самоподписным сертификатам и, как минимум, при первом подключении к серверу будет показывать предупреждение "Ваше соединение не является конфиденциальным".

Чтобы решить эти проблемы, необходимо подключить SSL-сертификат, выпущенный доверенным центром и поддерживающий wildcard-домены, например, бесплатный сертификат от Lets Encrypt.

Подключение сертификата Lets Encrypt

  1. Установите certbot от Lets Encrypt:

     apt install certbot -y
    
  2. Запросите выпуск сертификата для вашего домена:

     certbot certonly --manual  --agree-tos --email <email>  --preferred-challenges=dns  --server https://acme-v02.api.letsencrypt.org/directory  -d *.<domain>
    

    Где

    • <email> - ваш емайл, на который будут приходить уведомления о необходимости продления сертификата
    • <domain> - доменное имя хост-сервера (обратите внимание, что перед доменным именем необходимо указать звездочку (*), чтобы сертификат распространялся именно на клиентские поддомены, например так: *.myhostserver.ru).

    Обратите внимание: запрошенный таким образом (со звездочкой) сертификат будет действителен только для поддоменов на вашем домене. Это нормально, т.к. доступ к хост-серверу по доменному имени не требуется - вся работа с хост-сервером будет идти именно через клиентские поддомены.

  3. В ответ на запрос 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:

  4. После успешной генерации сертификата скопируйте путь к файлам fullchain.pem и privkey.pem. Путь будет содержать имя вашего домена и выглядеть примерно так: /etc/letsencrypt/live/myhostserver.ru

  5. Перейдите в папку установки хост-сервера

    cd /pult_hostserver

  6. Откройте конфигурационный файл сервиса hostserver:

    nano services/hostserver/config.cfg

  7. Пропишите путь к файлам сертификатов:

    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

  8. Сохраните изменения и выйдите из редактора командами Ctrl+O и Ctrl+X. Хост-сервер автоматически применит новый конфиг, принудительно перезапускать сервис hostserver не требуется.

  9. Проверьте в браузере работу хост-сервера, запросив произвольный поддомен на вашем домене. Например: https://promzona.myhostserver.ru/. Если сертификат успешно применился, браузер без предупреждений о небезопасности откроет страницу клиентского интерфейса или выдаст сообщение Хост не подключен для отсутствующего клиента.

Срок действия сертификата Lets Encrypt

На момент написания этого руководства срок действия сертификата составлял 3 месяца. Не дожидайтесь истечения срока, обновляйте сертификат заранее! Для обновления сертификата выполняйте шаги 2 и 3 данного параграфа.

Настройка хост-клиента на новый хост-сервер

  1. В интерфейсе сервера Пульт.Онлайн в разделе Система/Настройки выберите сервис hostclient

  2. Измените параметр server_host, указав в нем доменное имя вашего хост-сервера (например, myhostserver.ru, без https://)

  3. Также вы можете изменить параметр client_domain, указав там желаемое имя поддомена, которое хост-сервер будет ассоциировать с вашим клиентом. Так, например, указав client_domain=promzona ваш SCADA-сервер будет доступен на хост-сервере по адресу promzona.myhostserver.ru

Администрирование хост-сервера

Хост-сервер не требует администрирования, за исключением случаев, когда хост-клиент "потерял" секретный ключ и не может подключиться к хост-серверу на свое старое доменное имя. Такая ситуация может возникнуть при полной переустановке сервера Пульт.Онлайн, например, при сбросе устройства, на котором был установлен сервер, на заводские настройки.

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

Удаление секретного ключа:

  1. Подключитесь к хост-серверу по SSH

  2. Перейдите в папку с секретными ключами в папке установки хост-сервера

     cd /pult_hostserver/services/hostserver/secrets
    
  3. Выведите список клиентских доменов:

     ls -l
    
  4. Удалите старый домен, например:

     rm promzona
    
  5. Перезапустите хост-клиент на сервере Пульт.Онлайн

  Email
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   user_list
   user_save
   var_get
   var_list
   var_set