Развертывание тестовой лаборатории, в которой серверная часть 1С работает на виртуальной машине, а клиентское приложение и СУБД находятся на физическом хосте — классический сценарий для разработчиков и системных администраторов. Однако при первой же попытке подключения пользователи часто сталкиваются с проблемой: виртуальная машина пингуется, общая папка работает, но клиент 1С категорически отказывается видеть сервер 1С, выдавая ошибку соединения. В этой статье мы подробно разберем, почему возникает эта проблема, как правильно настроить сетевые интерфейсы в VirtualBox, решить проблему разрешения имен и настроить брандмауэры обеих систем для стабильной работы.
При создании новой виртуальной машины в VirtualBox по умолчанию активируется сетевой режим NAT (Network Address Translation). В этом режиме виртуальная машина находится за встроенным маршрутизатором VirtualBox и получает IP-адрес из внутренней подсети (обычно 10.0.2.x). Гостевая операционная система может свободно выходить во внешнюю сеть и «видеть» ваш физический компьютер (хост-машину), но внешняя сеть, включая ваш хост, не может напрямую достучаться до виртуальной машины.
Попытки пробросить порты (Port Forwarding) в режиме NAT для сервера 1С практически обречены на неудачу. Дело в том, что платформа 1С:Предприятие использует динамический диапазон портов. Клиентское приложение сначала обращается к менеджеру кластера, а тот перенаправляет запрос на один из свободных рабочих процессов rphost, порт которого назначается динамически. Настроить проброс всего динамического диапазона портов через встроенный NAT крайне сложно и неэффективно. Поэтому мы сразу откажемся от NAT в пользу более подходящих сетевых режимов.
Проанализируем два основных сетевых режима, которые позволят связать хост-машину и виртуальный сервер 1С в единую сеть.
192.168.56.1, а гостевая операционная система — адрес вида 192.168.56.x.192.168.1.150).Рассмотрим, как переключить сетевой адаптер на примере режима Host-Only:
VirtualBox Host-Only Ethernet Adapter.ipconfig в командной строке. Адрес должен быть из диапазона 192.168.56.x.Часто происходит ситуация: сетевой адаптер настроен, IP-адрес виртуальной машины пингуется с хоста, но при попытке добавить базу в стартере 1С мы получаем ошибку соединения. Выясним причину этой классической проблемы.
Когда клиентское приложение 1С на хост-машине пытается подключиться к серверу 1С по IP-адресу (например, к 192.168.56.101), менеджер кластера 1С rmngr принимает этот запрос. Однако в ответ он отправляет клиенту не свой IP-адрес, а сетевое имя (имя компьютера) виртуальной машины (например, win7-1c-srv). Получив это имя, клиент 1С пытается перенаправить рабочую сессию на адрес win7-1c-srv. Поскольку в нашей тестовой сети нет выделенного DNS-сервера, операционная система хоста понятия не имеет, какому IP-адресу соответствует имя win7-1c-srv, и подключение обрывается.
Чтобы решить эту проблему, настроим локальное разрешение имен с помощью файла hosts. Разберем этот процесс по шагам:
192.168.56.101).C:\Windows\System32\drivers\etc\hosts (при поиске файла выберите режим отображения «Все файлы (*.*)»).
192.168.56.101 win7-1c-srv
win7-1c-srv операционная система хоста будет мгновенно перенаправлять пакеты на IP-адрес 192.168.56.101.hosts в гостевой ОС и пропишем туда IP-адрес и имя хост-машины, чтобы сервер 1С мог без задержек отвечать клиенту.Отключение брандмауэра Windows на время тестирования — отличный способ быстро локализовать проблему (как и поступил автор темы в сообщении 13). Однако в постоянной практике отключать защиту крайне не рекомендуется. Вместо этого настроим правила входящих подключений для конкретных портов, которые использует сервер 1С.
Выделим ключевые порты, которые должны быть открыты на виртуальной машине с сервером 1С:
1540 — Агент сервера 1С (процесс ragent).1541 — Менеджер кластера (процесс rmngr).1560-1591 — Диапазон портов для рабочих процессов (процессы rphost).Создадим правило в брандмауэре Windows на виртуальной машине:
1540, 1541, 1560-1591.Если СУБД установлена на хост-машине, а сервер 1С развернут внутри VirtualBox, нам необходимо разрешить СУБД принимать внешние сетевые подключения. По умолчанию Microsoft SQL Server часто настроен на работу только через протокол Shared Memory (локальная общая память), что делает его недоступным из виртуальной сети VirtualBox.
Разберем, как включить сетевой доступ к MS SQL Server:
SQL Server Network Configuration -> Protocols for MSSQLSERVER (или имя вашего экземпляра СУБД).IP Addresses, прокрутим до раздела IPAll и убедимся, что в поле TCP Port указан стандартный порт 1433.1433, чтобы виртуальная машина могла достучаться до базы данных.Важное примечание: При создании информационной базы 1С в консоли администрирования (которая будет запущена на виртуальной машине) в поле «Сервер баз данных» нельзя указывать localhost или 127.0.0.1. Необходимо указывать IP-адрес хост-машины в виртуальной сети (в нашем случае 192.168.56.1) или сетевое имя хоста, предварительно прописанное в файле hosts виртуальной машины.
Использование виртуализации накладывает серьезные ограничения на работу защитных механизмов платформы 1С. Проанализируем два важных аспекта:
Программные лицензии (файлы программной защиты .lic):
Программная лицензия жестко привязывается к ключевым параметрам аппаратной конфигурации компьютера. Одним из таких параметров является MAC-адрес сетевой карты. Если вы активируете лицензию на виртуальной машине, когда она находится в режиме NAT, а затем переключите сетевой адаптер в режим Сетевого моста или Host-Only, VirtualBox изменит MAC-адрес виртуальной сетевой платы. Платформа 1С мгновенно определит это как изменение ключевых параметров компьютера, и активированная лицензия заблокируется, потребовав использования резервного пин-кода. Поэтому строго соблюдайте правило: сначала полностью настройте сеть в VirtualBox, зафиксируйте MAC-адрес в настройках ВМ и только после этого приступайте к активации программных лицензий.
Аппаратные USB-ключи HASP:
По умолчанию виртуальная машина «не видит» USB-порты вашего физического компьютера. Чтобы пробросить аппаратный ключ защиты внутрь VirtualBox, выполните следующие шаги:
В сообщениях форума справедливо отмечается, что разнесение сервера 1С и СУБД по разным операционным системам (даже в пределах одного физического компьютера) ведет к падению производительности. При локальной установке «все на одном хосте» сервер 1С и MS SQL Server используют для обмена данными высокоскоростной протокол взаимодействия через оперативную память — Shared Memory. Как только сервер 1С уходит на виртуальную машину, а SQL остается на хосте, обмен данными начинает происходить по сетевому протоколу TCP/IP через стек виртуального сетевого адаптера.
Такой сетевой оверхед (сетевые задержки и микролаги при передаче пакетов) может снизить скорость выполнения тяжелых запросов и проведения документов на 15–30%. Для целей разработки, отладки кода и обучения раздельная схема вполне применима. Однако для продуктивных баз с реальными пользователями крайне рекомендуется устанавливать сервер 1С и СУБД в пределах одного сервера (или одной виртуальной машины), чтобы задействовать все преимущества протокола Shared Memory.