Ситуация, когда сервер 1С на базе Ubuntu в связке с PostgreSQL прекрасно работает внутри локальной сети, но отказывается принимать подключения через интернет, является классической при настройке клиент-серверной архитектуры. Разберем пошагово, почему это происходит и как обеспечить стабильный доступ для удаленных сотрудников.
Прежде чем переходить к настройкам, важно понять, как именно тонкий клиент или толстый клиент взаимодействует с сервером. Процесс происходит в несколько этапов:
1540).1541).Главная ловушка заключается в том, что рабочие процессы используют динамический диапазон портов. Если вы пробросили на роутере только 1540 и 1541, соединение разорвется сразу после попытки авторизации.
Для полноценной работы через NAT (роутер) необходимо открыть не два, а целый диапазон портов. По умолчанию в 1С:Предприятии 8.3 это порты 1560–1591. Рассмотрим, как убедиться, что они открыты в Ubuntu.
Проверим состояние брандмауэра ufw и разрешим входящий трафик:
sudo ufw allow 1540:1591/tcp
sudo ufw reload
Не забудьте настроить аналогичный проброс (Port Forwarding) на вашем роутере. Весь диапазон TCP 1540-1591 должен быть перенаправлен на внутренний IP-адрес вашего сервера Ubuntu.
Выясним причину самой частой ошибки: «Сервер базы данных не обнаружен». Она возникает из-за того, что при подключении сервер передает клиенту свое локальное имя (hostname), например srv-1c-ubuntu. Клиент, находясь в интернете, не знает, по какому IP-адресу искать это имя.
Рассмотрим два способа решения этой проблемы:
C:\Windows\System32\drivers\etc\hosts (от имени администратора) и добавьте строку:
[Внешний_IP_сервера] srv-1c-ubuntu
Хотя сервер 1С и СУБД могут находиться на одной машине, необходимо убедиться, что PostgreSQL готов принимать запросы от процессов 1С. Проанализируем конфигурационные файлы /etc/postgresql/[версия]/main/.
В файле postgresql.conf параметр listen_addresses должен позволять прослушивание интерфейсов:
listen_addresses = '*'
В файле pg_hba.conf проверим права доступа. Для локального взаимодействия сервера 1С с базой достаточно стандартных настроек, но если вы планируете администрировать базу извне, убедитесь в наличии разрешающих строк для вашего пользователя.
Прямое открытие портов 1540-1591 в интернет считается небезопасным. Рассмотрим стандарт индустрии — использование веб-сервера Apache. В этом случае клиенту достаточно будет иметь доступ только к порту 80 (HTTP) или 443 (HTTPS), а все сложности с диапазонами портов и именами хостов исчезнут.
Выполним установку Apache на Ubuntu:
sudo apt-get install apache2
Затем воспользуемся утилитой webinst, которая идет в комплекте с платформой 1С, для публикации базы данных. Перейдите в каталог с установленной платформой (например, /opt/1cv8/x86_64/[версия]/) и выполните команду:
sudo ./webinst -apache24 -wsdir MyBaseName -dir /var/www/mybase -connstr "Srvr=localhost;Ref=MyBaseName;" -confPath /etc/apache2/apache2.conf
Здесь MyBaseName — имя вашей базы. После этого перезапустите веб-сервер:
sudo systemctl restart apache2
Теперь подключение из интернета будет осуществляться по адресу вида http://[Внешний_IP]/MyBaseName. Это стабильнее, безопаснее и проще в настройке на стороне клиента.
Иногда сервер 1С на Ubuntu по умолчанию начинает слушать порты только на протоколе IPv6. Если ваш провайдер или роутер использует IPv4, подключение не удастся. Проверим, на каких адресах ожидают соединения процессы ragent:
netstat -tulnp | grep ragent
Если вы видите только tcp6, рекомендуем временно отключить IPv6 в настройках sysctl или принудительно настроить 1С на работу с IPv4, чтобы исключить конфликты адресации при пробросе портов.
Подведем итоги. Если вам нужно быстро «пробросить» 1С наружу:
ufw диапазон 1540-1591.hosts на клиентских ПК.PostgreSQL разрешает подключения от сервера 1С.Однако для постоянной работы мы настоятельно рекомендуем использовать веб-публикацию через Apache или организацию VPN-туннеля (например, WireGuard). Это избавит вас от необходимости открывать технологические порты сервера в глобальную сеть и значительно повысит безопасность ваших данных.