При организации взаимодействия между базами данных 1С, находящимися в разных офисах или подсетях, системные администраторы и разработчики часто сталкиваются со специфической проблемой. VPN-туннель успешно поднят, серверы прекрасно «пингуют» друг друга по IP-адресу, но при попытке программного подключения (например, через COM-соединение или при запуске тонкого/толстого клиента) возникает ошибка соединения. Стандартная строка подключения, отлично работавшая внутри одной локальной сети, в условиях распределенной сети отказывается функционировать.
В этой статье мы подробно разберем, почему так происходит, изучим внутреннюю архитектуру взаимодействия платформы «1С:Предприятие» с сетью, пошагово настроим корректное разрешение имен и разберемся с правилами брандмауэра для беспрепятственной работы системы.
Рассмотрим стандартную ситуацию. У нас есть строка подключения, в которой мы напрямую указываем IP-адрес сервера 1С в удаленной подсети:
Параметры = "Srvr=""192.168.10.3"";Ref=""UPP"";Usr=""Администратор"";Pwd=""СложныйПароль"";";
Казалось бы, если IP-адрес 192.168.10.3 доступен, маршрутизация между подсетями настроена правильно, а пинги проходят без потерь, подключение должно установиться. Однако платформа выдает ошибку. Чтобы понять причину, проанализируем внутренний алгоритм работы кластера серверов 1С:
1541) по указанному нами IP-адресу 192.168.10.3.rphost) в данный момент наименее загружен и может обслужить этого клиента.SRV-1C-MAIN через локальную службу DNS. Поскольку клиент находится в другой подсети (за пределами локального домена сервера 1С), его DNS-сервер ничего не знает об имени SRV-1C-MAIN. Соединение аварийно разрывается с ошибкой «Хост не найден».Таким образом, для успешной работы нам необходимо решить две ключевые задачи: настроить правильное разрешение символических имен серверов в VPN-сети и открыть правильный диапазон портов на всех сетевых экранах.
Самый простой и быстрый способ сопоставить имя удаленного сервера с его IP-адресом без глобальной перенастройки DNS-серверов в организации — это использование локального файла hosts на компьютере, с которого инициируется подключение. Если же требуется массово обновить параметры подключения к базам на рабочих станциях доменных пользователей, можно применить скрипт для автоматической замены имени сервера в файлах ibases.v8i через GPO.
Разберем этот процесс по шагам:
C:\Windows\System32\drivers\etc\hosts.Пример записи в файле hosts:
# Сопоставление для подключения к удаленному серверу 1С через VPN
192.168.10.3 SRV-1C-MAIN
После сохранения файла обязательно измените строку подключения в вашем коде 1С. Вместо IP-адреса теперь следует использовать именно сетевое имя сервера:
Параметры = "Srvr=""SRV-1C-MAIN"";Ref=""UPP"";Usr=""Администратор"";Pwd=""СложныйПароль"";";
Важное примечание: В некоторых случаях для обратной связи серверу 1С также требуется знать имя компьютера-клиента. Если соединение все равно не устанавливается, пропишите аналогичное соответствие (IP-адрес и имя клиента) в файле hosts на самом сервере 1С.
Вторая распространенная проблема — блокировка трафика брандмауэром Windows или межсетевым экраном на VPN-роутере. Начинающие администраторы часто открывают только порт 1541, считая его единственным необходимым для работы 1С. Но это не так.
Для полноценной работы кластера 1С требуется открыть целый диапазон портов:
ragent). Используется для администрирования.rmngr). Принимает первичные запросы на подключение.rphost). Именно по этим портам передаются основные данные после авторизации.Выясним, открыты ли порты на удаленном сервере. Для этого воспользуемся утилитой telnet из командной строки Windows на клиентском компьютере. Сначала выполним проверку порта менеджера:
telnet 192.168.10.3 1541
Если экран очистился или появился курсор — порт открыт. Если возникла ошибка подключения — порт заблокирован брандмауэром сервера или роутера.
Также обязательно проверьте доступность хотя бы нескольких портов из динамического диапазона рабочих процессов:
telnet 192.168.10.3 1560
telnet 192.168.10.3 1561
Если порты закрыты, необходимо зайти в настройки брандмауэра Windows (или аппаратного сетевого экрана вашей сети) на сервере и создать разрешающее правило для входящих подключений (Inbound Rules) для исполняемых файлов ragent.exe, rmngr.exe и rphost.exe, либо явно разрешить TCP-порты 1540-1541 и 1560-1591 для подсети, из которой происходит подключение.
Если вы прописали имена в hosts, открыли все порты, проверка через telnet проходит успешно, но при попытке получить данные из базы 1С система «зависает» или выдает ошибку о разрыве соединения — проблема кроется в сетевом параметре MTU (Maximum Transmission Unit).
Трафик 1С характеризуется передачей больших объемов сериализованных данных. При передаче этих данных через шифрованный VPN-туннель к каждому пакету добавляется служебный заголовок VPN-протокола. Если исходный размер пакета равен стандартным 1500 байтам, то вместе с заголовком он превышает максимальный размер кадра, разрешенный провайдером.
В результате происходит фрагментация пакетов, которую многие современные роутеры блокируют в целях безопасности, либо пакеты просто отбрасываются. Мелкие пакеты утилиты ping при этом проходят без проблем.
Чтобы решить эту проблему, выполните следующие действия:
1350 или 1400 байт. В Windows это можно сделать через командную строку от имени администратора:
netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "Имя_Вашего_VPN_Подключения" mtu=1350 store=persistent
Если подключение реализуется программно из кода одной базы к другой через COM-технологию:
Connector = Новый COMОбъект("V83.COMConnector");
Параметры = "Srvr=""SRV-1C-MAIN"";Ref=""UPP"";Usr=""Администратор"";Pwd=""Пароль"";";
Попытка
БазаПриемник = Connector.Connect(Параметры);
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Помните, что COM-соединение работает поверх технологии Microsoft DCOM (RPC). Помимо портов самого кластера 1С, для работы DCOM требуются:
135 (RPC Endpoint Mapper).49152–65535).Проброс такого количества портов через VPN крайне небезопасен. Если брандмауэр блокирует этот диапазон, COM-соединение работать не будет. В таком случае администраторы прибегают к ограничению динамического диапазона портов RPC через утилиту dcomcnfg (Службы компонентов) до нескольких конкретных портов и открывают только их.
Прямое подключение к базе 1С в другой подсети через VPN посредством толстого клиента или COM-соединения — это устаревший, медленный и нестабильный метод. При малейшем микросбое в VPN-канале сессия «отваливается», а транзакции могут зависнуть.
Современным, надежным и быстрым стандартом интеграции баз 1С является использование HTTP-сервисов:
Преимущества такого подхода очевидны:
80 для HTTP или безопасный 443 для HTTPS).hosts, открывать диапазоны портов кластера 1С (1560-1591) и мучаться с настройками DCOM.