При попытке опубликовать сервер 1С:Предприятия в глобальной сети через обычный маршрутизатор с трансляцией сетевых адресов (NAT) администраторы часто сталкиваются с ситуацией, когда локально база открывается штатно, а удаленный клиент при попытке подключения по внешнему IP-адресу выдает ошибку вида: Не найдено ни одного сервера с размещенным сервисом serviceName=ClusterConfigService. Разберем по шагам архитектуру сетевого взаимодействия кластера 1С, выясним причину такого поведения и определим, как правильно организовать удаленный доступ.
Выясним причину появления ошибки конфигурации сервиса. Архитектура 1С:Предприятия разделяет сетевые роли между несколькими службами, каждая из которых ожидает подключения на строго определенном порту:
ClusterConfigService на нем не размещается.ClusterConfigService.Если для удаленного доступа пробросить на роутере только порт 1540, клиент не сможет инициализировать подключение к базе данных. Чтобы соединение состоялось, на маршрутизаторе необходимо открыть и пробросить весь спектр портов: 1540, 1541 и диапазон 1560–1591.
Проанализируем частую попытку администраторов обезопасить подключение путем трансляции нестандартных внешних портов на внутренние (например, направить внешний 4541 на внутренний 1541). В случае с кластером 1С такая схема работать не будет.
Внутренний протокол 1С передает номера портов в теле служебных пакетов данных. Когда тонкий или толстый клиент связывается с менеджером кластера, менеджер возвращает клиенту список выделенных рабочих процессов rphost и конкретные номера портов, на которых они работают внутри локальной сети (например, 1561 или 1562). Клиентское приложение принимает эти данные и пытается открыть второе соединение строго по тем портам, которые ему сообщил сервер. Если на внешнем интерфейсе роутера открыт диапазон 4560–4591, а сервер передал стандартные 1560–1591, соединение будет немедленно разорвано. Проброс сетевых портов должен выполняться исключительно один к одному (внешний 1541 транслируется во внутренний 1541, а внешний диапазон 1560–1591 — во внутренний 1560–1591).
Вторая ключевая проблема при прямом доступе через NAT — механизм маршрутизации сессий. Клиент обращается к серверу по IP-адресу, но менеджер кластера возвращает клиенту имя хоста (компьютера), зарегистрированного в свойствах рабочего сервера кластера (например, srv-1c). Удаленный клиент из интернета не имеет доступа к внутренней WINS/DNS-службе предприятия и не знает, какому IP-адресу соответствует полученное сетевое имя.
Рассмотрим способы решения этой проблемы:
hosts на удаленной машине добавляется запись вида: [ВНЕШНИЙ_БЕЛЫЙ_IP] srv-1c. В этом случае удаленный клиент успешно преобразует полученное от кластера имя хоста в публичный адрес вашего шлюза.1c.company.local. Внутри локальной сети офисный DNS-сервер разрешает это доменное имя в локальный адрес (например, 192.168.1.100), а публичный DNS-провайдер в интернете связывает то же имя с внешним статическим IP-адресом роутера.Если мы решаем оставить прямое подключение через интернет без туннелирования, важно учитывать эксплуатационные ограничения собственного протокола кластера:
KeepAliveTime на уровне операционной системы.ragent, rmngr и rphost не содержат встроенных механизмов защиты от распределенных атак отказа в обслуживании (DDoS) и перебора портов. При прямом выводе портов в сеть рекомендуется настроить в кластере обязательное шифрование трафика (TLS) с выпуском сертификатов.Рассмотрим, какие технологии предпочтительнее использовать вместо прямого проброса диапазона портов 1540–1591: