Настройка взаимодействия между серверами 1С:Предприятие и СУБД, находящимися в разных локальных сетях (подсетях), — это классическая задача системного администрирования, которая таит в себе множество скрытых угроз и неочевидных технических нюансов. Очень часто при попытке подключить базу со второго сервера приложений напрямую к первому возникает ошибка соединения. Давайте подробно разберем, почему это происходит, как функционирует сетевой механизм платформы 1С, как защитить данные от необратимого повреждения и настроить стабильную работу системы по шагам.
Довольно часто администраторы сталкиваются с ситуацией: ping до удаленного сервера проходит без потерь, порты открыты, но при попытке добавить базу в консоли администрирования или в стартовом окне 1С система выдает ошибку связи. Чтобы понять причину, давайте проанализируем внутреннюю логику работы платформы 1С:Предприятие при клиент-серверном подключении:
1541) удаленного сервера по указанному нами IP-адресу.rmngr) принимает этот запрос, сверяет его со списком зарегистрированных информационных баз и выделяет под это подключение конкретный рабочий процесс rphost.rphost (например, Server-1C-Main).1560-1591, отправляя пакеты именно на имя Server-1C-Main. Если во второй сети это имя не сопоставлено с IP-адресом первого сервера через DNS, подключение немедленно обрывается с ошибкой вида server_addr=tcp://Server-1C-Main:1560....Таким образом, для успешного подключения критически важно обеспечить корректное разрешение имен (DNS-резолв) между изолированными сетями.
Для того чтобы сервер из второй сети мог без труда определять сетевые имена серверов из первой сети, мы должны настроить службу DNS или воспользоваться локальным файлом сопоставления. Если в вашей сети нет общего DNS-сервера, обслуживающего обе подсети, давайте воспользуемся ручным прописыванием имен в файле hosts.
Разберем по шагам, как это сделать на сервере под управлением Windows Server (на котором развернут Server 2):
C:\Windows\System32\drivers\etc\hosts (в выпадающем списке типов файлов выберите "Все файлы").Пример записи в файле hosts:
# Шаблон: [IP-адрес удаленного сервера] [Сетевое имя удаленного сервера]
192.168.100.50 Server-1C-Main
192.168.100.51 SQL-Server-DB
После сохранения изменений обязательно проверим работоспособность сопоставления. Запустим командную строку и выполним команду проверки связи не по IP-адресу, а именно по сетевому имени:
ping Server-1C-Main
Если сопоставление настроено верно, мы увидим успешный обмен пакетами с указанным IP-адресом.
Рассмотрим важнейший аспект архитектуры 1С, несоблюдение которого гарантированно приведет к полной или частичной потере ваших данных. Категорически запрещено регистрировать одну и ту же физическую базу данных СУБД (MS SQL или PostgreSQL) на двух независимых серверах приложений 1С!
Давайте подробно выясним, почему такое действие разрушительно для базы данных:
Config и DBSchema.Как правильно организовать работу: Физическая база данных должна управляться строго одним сервером приложений 1С. Если ваша цель — распределить нагрузку между Server 1 и Server 2, вам необходимо объединить их в единый Кластер 1С, в котором один рабочий сервер будет выполнять роль центрального (координирующего работу менеджеров блокировок и кэша), а второй будет подключен как дополнительный рабочий сервер.
Давайте проанализируем ситуацию, когда администраторы ради быстроты настройки "выставляют все порты сервера напрямую в интернет" без использования защищенных каналов. Это грубейшая и чрезвычайно опасная ошибка администрирования.
Публикация портов СУБД (1433 для MS SQL или 5432 для PostgreSQL) и портов службы 1С (1540-1541, 1560-1591) в открытый доступ делает вашу инфраструктуру легкой мишенью для автоматизированных ботнетов. Методом непрерывного подбора паролей (брутфорса) злоумышленники получают доступ к СУБД за считанные часы. Результат всегда плачевен: базы данных шифруются вирусами-вымогателями, а конфиденциальная информация крадется.
Для безопасного объединения серверов из разных сетей мы должны организовать защищенный зашифрованный канал связи — VPN-туннель. Рассмотрим наиболее эффективные технологии для этой задачи:
Только после объединения сетей в единый VPN-туннель мы можем безопасно обращаться к портам удаленного сервера так, будто он находится в нашей локальной сети.
Даже если мы успешно связали две подсети через VPN и прописали имена серверов, нас подстерегает главная проблема удаленной работы клиент-серверной архитектуры — сетевые задержки ( latency ).
Платформа 1С спроектирована так, что при выполнении даже простых операций (например, открытие формы списка или проведение документа) между клиентом, сервером приложений и СУБД совершаются тысячи мелких последовательных запросов (так называемые round-trips). В локальной сети, где ping составляет менее 1 мс, эти тысячи запросов выполняются мгновенно. Но если сервера разделены интернетом и задержка возрастает хотя бы до 20-50 мс, простая операция открытия формы, занимавшая секунду в офисе, будет выполняться минутами.
Если вы столкнулись с медленной работой системы из удаленной сети, давайте рассмотрим два профессиональных архитектурных альтернативных решения, которые полностью исключают эту проблему:
Этот способ идеально подходит, если пользователям со второго сервера (или удаленного филиала) необходимо полноценно работать с базой данных без потери производительности.
Рассмотрим логику этого решения:
https://mycompany.ru/mybase.При такой схеме весь тяжелый трафик между сервером приложений и базой SQL крутится внутри локальной сети Server 1 на сверхвысоких скоростях. По внешнему каналу передаются только оптимизированные XML/JSON пакеты с экранными формами. Для работы требуется открыть всего один порт — 443 (HTTPS), что гарантирует максимальную безопасность.
Если пользователям на Server 2 требуется запускать не только 1С, но и смежные программы, взаимодействующие с базой, мы можем развернуть терминальный сервер:
Давайте подведем итог всему вышесказанному. Чтобы успешно и безопасно настроить доступ к базе 1С из другой сети, придерживайтесь следующего четкого плана действий:
hosts на Server 2.1540, 1541, 1560-1591 внутри VPN с помощью утилиты telnet или командлетов PowerShell.