При развертывании связки 1С:Предприятие и PostgreSQL на операционной системе Windows 10 системные администраторы часто сталкиваются с парадоксальной ситуацией: сервер базы данных прекрасно откликается на обращения по IP-адресу или localhost, но категорически отказывается принимать соединения, если в строке подключения указано сетевое имя компьютера. Эта проблема особенно актуальна для сетей без выделенного контроллера домена (Workgroup), где механизмы разрешения имен могут работать нестабильно.
В рамках данной статьи мы подробно разберем, почему возникает ошибка "Unable to connect to server", и совместно пройдем по всем этапам диагностики и настройки системы для обеспечения стабильного доступа по имени хоста.
Прежде чем приступать к сетевым настройкам Windows, давайте убедимся, что сам сервер PostgreSQL готов принимать внешние подключения. Основным параметром здесь является listen_addresses в файле postgresql.conf. По умолчанию он может быть настроен только на localhost, что ограничивает подключения рамками локальной петли.
Рассмотрим содержимое файла postgresql.conf. Нам необходимо убедиться, что сервер слушает все доступные интерфейсы. Проверим наличие следующей строки:
# В файле postgresql.conf
listen_addresses = '*'
Символ «звездочка» указывает серверу на необходимость прослушивания всех сетевых адаптеров. Однако, как показывает практика, в Windows 10 этого может быть недостаточно из-за особенностей обработки IPv6. Если вы столкнулись с проблемой имени, попробуйте явно указать IPv4 адрес вашего сервера вместе с локальным адресом, либо оставить '*', но проверить настройки доступа в другом файле.
Разберем следующий важный файл — pg_hba.conf. Этот файл отвечает за авторизацию. Если клиент пытается подключиться по имени, Windows может разрешить это имя в IPv6-адрес (::1), даже если вы думаете, что IPv6 отключен. Проанализируем типичные записи в этом файле:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5
# IPv6 local connections:
host all all ::1/128 md5
Важный момент: если в вашей сети используется разрешение имен, которое выдает IPv6-адрес, а в pg_hba.conf отсутствует строка для ::1/128, подключение будет отклонено. Рекомендуется временно разрешить все подключения из локальной сети для диагностики, используя метод trust, но не забудьте вернуть md5 или scram-sha-256 после завершения тестов.
Выясним причину, по которой система не может сопоставить имя компьютера с его IP-адресом. В сетях без домена Windows использует протоколы LLMNR и NetBIOS. Проанализируем ситуацию с помощью командной строки. Выполним команду:
ping -4 ИмяВашегоКомпьютера
Флаг -4 принудительно заставляет систему использовать IPv4. Если ping проходит успешно и показывает правильный IP-адрес, значит, проблема кроется в настройках самого приложения (pgAdmin или 1С) или в фильтрации трафика. Если же ping выдает ошибку "При проверке связи не удалось обнаружить узел", нам необходимо вмешаться в работу службы разрешения имен.
Рассмотрим использование FQDN (Full Qualified Domain Name). В некоторых случаях Windows требует наличия точки в конце имени для корректного обращения к DNS-кэшу. Попробуйте указать в pgAdmin имя в формате myserver. (с точкой на конце). Это заставляет систему игнорировать суффиксы подключения и искать имя напрямую.
Если сетевое окружение работает нестабильно, а внедрение полноценного DNS-сервера не планируется, мы можем прибегнуть к проверенному методу — ручному прописыванию соответствий в файле hosts. Это решение является "золотым стандартом" при возникновении проблем с NetBIOS-именами в малых сетях.
Разберем по шагам процесс внесения изменений:
C:\Windows\System32\drivers\etc\hosts.Пример записи в файле hosts:
192.168.0.10 SERVER1C
127.0.0.1 SERVER1C
После сохранения файла система будет мгновенно сопоставлять имя SERVER1C с указанным адресом, минуя сетевые запросы к другим компьютерам. Это практически всегда решает проблему подключения pgAdmin и серверов 1С.
Проанализируем работу системных служб Windows 10. Часто функция сетевого обнаружения включена в панели управления, но фактически не работает, так как необходимые службы остановлены. Проверим состояние службы "Публикация ресурсов обнаружения функций" (Function Discovery Resource Publication).
Для корректной работы имени компьютера в сети выполните следующее:
services.msc.Эти действия позволят вашему компьютеру корректно "объявлять" свое имя в локальном сегменте сети, что критически важно для работы протоколов LLMNR.
Многие администраторы в попытках решить проблему полностью отключают Брандмауэр Защитника Windows. Однако в современных версиях Windows 10 это может привести к обратному эффекту: при остановленной службе MpsSvc сетевой стек может начать блокировать запросы к локальным портам для некоторых приложений.
Вместо отключения службы, мы рекомендуем создать явное разрешающее правило для порта PostgreSQL (по умолчанию 5432). Проанализируем команду для быстрой настройки через PowerShell:
New-NetFirewallRule -DisplayName "PostgreSQL Port" -Direction Inbound -LocalPort 5432 -Protocol TCP -Action Allow
Это гарантирует, что входящий трафик будет разрешен независимо от того, используется ли для обращения IP-адрес или имя хоста. Также убедитесь, что профиль сети установлен как "Частная" или "Доменная", так как в профиле "Общедоступная" многие механизмы обнаружения имен блокируются по умолчанию.
Если проблема наблюдается именно при попытке добавить информационную базу в консоли администрирования 1С, стоит обратить внимание на локальный кэш подключений. Платформа 1С может кэшировать старые параметры авторизации и адресации.
Посмотрим на файл 1cv8conn.pfl. В некоторых случаях его удаление (при условии остановки службы сервера 1С) помогает сбросить настройки сетевых соединений. Этот файл обычно располагается в каталоге данных приложения соответствующего пользователя или в папке профиля службы 1С.
Также стоит проверить настройки SPN (Service Principal Name), если вы используете доменную авторизацию. Хотя в сообщении автора указано, что сеть без домена, для будущих внедрений важно помнить: если клиент пытается выполнить аутентификацию по имени, а в Active Directory не прописан соответствующий SPN для службы PostgreSQL, соединение будет разорвано с ошибкой безопасности.
Подводя итог, можно сказать, что проблема подключения по имени в Windows 10 чаще всего кроется в конфликте IPv6 и IPv4 или в некорректной работе LLMNR. Использование файла hosts является самым быстрым и надежным "костылем", в то время как настройка служб обнаружения функций — это правильный системный подход.