Когда клиент 1С не видит сервер по имени: настройка hosts в Windows и Linux

· 10 мин

Содержание

В Windows файл hosts лежит в C:\Windows\System32\drivers\etc\hosts, в Linux и macOS — в /etc/hosts. Для работы 1С в него добавляют строку вида 192.168.1.10 srv1c: IP-адрес сервера и его сетевое имя. Править файл можно только с правами администратора, перезагрузка компьютера не нужна.

Есть два способа научить компьютер находить сервер 1С по имени: запись в DNS или строка в hosts. DNS — правильный путь для офиса, где все машины в одном домене. Hosts выбирают, когда DNS нет или он не ваш: удалённый сотрудник по VPN, сервер в облаке, база у подрядчика, тестовый стенд. Файл hosts для 1С — это локальная «подсказка» одному компьютеру, которая срабатывает раньше DNS.

Где находится файл hosts в Windows и как его открыть

Полный путь одинаковый для Windows 10, 11 и Windows Server 2016–2022:

C:\Windows\System32\drivers\etc\hosts

Если система стоит не на диске C, путь начинается с переменной: %SystemRoot%\System32\drivers\etc\hosts. Её можно вставить прямо в адресную строку Проводника.

У файла нет расширения. Это не hosts.txt и не hosts.ics — те файлы рядом служебные, 1С и Windows их не читают.

Как открыть hosts на редактирование

Двойной щелчок по файлу не поможет: Блокнот откроется без прав администратора, и при сохранении появится отказ в доступе. Порядок такой:

  1. Нажмите «Пуск», наберите Блокнот.
  2. Щёлкните правой кнопкой по найденному приложению → «Запуск от имени администратора».
  3. В Блокноте выберите Файл → Открыть.
  4. Вставьте путь C:\Windows\System32\drivers\etc\ в поле адреса.
  5. В правом нижнем углу смените фильтр «Текстовые документы (*.txt)» на «Все файлы (*.*)» — иначе hosts не будет виден.
  6. Откройте hosts, допишите строки в конец, сохраните через Ctrl+S.

Быстрый вариант для тех, кто привык к консоли. Откройте PowerShell от имени администратора и выполните:

notepad $env:SystemRoot\System32\drivers\etc\hosts

Добавить строку без Блокнота тоже можно:

Add-Content -Path "$env:SystemRoot\System32\drivers\etc\hosts" -Value "192.168.1.10`tsrv1c"

Перед первой правкой сделайте копию: copy C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\hosts.bak. Откат займёт секунду.

Редактирование hosts на серверах Linux и macOS

В Linux и macOS путь один — /etc/hosts. Файл принадлежит root, поэтому правка идёт через sudo:

sudo cp /etc/hosts /etc/hosts.bak
sudo nano /etc/hosts

В nano сохранение — Ctrl+O, затем Enter, выход — Ctrl+X. Если привычнее vim, используйте sudo vim /etc/hosts.

Строка 127.0.1.1 на сервере 1С под Ubuntu и Debian

Это главный подвох при установке сервера 1С на Linux. Установщик Ubuntu и Debian пишет в hosts строку:

127.0.1.1   srv1c

То есть собственное имя сервера указывает на петлевой адрес. Для сервера 1С так оставлять не стоит: кластер регистрирует себя по имени компьютера, и разрешение этого имени в 127.0.1.1 даёт путаницу в адресах процессов. Замените строку на реальный адрес сервера в локальной сети:

127.0.0.1      localhost
192.168.1.10   srv1c.office.local   srv1c

Проверьте результат командой hostname -f и getent hosts srv1c — должен вернуться адрес 192.168.1.10.

Если сервер 1С уже работает с пользователями, изменённое разрешение имени подхватится процессами кластера полностью только после перезапуска службы. Перезапуск оборвёт все сеансы — делайте его вечером или в выходной, предупредив пользователей.

Порядок поиска имён в Linux

Linux смотрит в hosts, только если это разрешено в /etc/nsswitch.conf. Строка по умолчанию выглядит так:

hosts: files dns

files — это и есть /etc/hosts, он проверяется первым. Если в вашей сборке порядок другой, записи из hosts могут игнорироваться.

macOS

На Mac сервер 1С ставят редко, но клиент 1С для macOS встречается. Путь тот же, /etc/hosts. После правки сбросьте кэш имён:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Как правильно записать строку в hosts

Синтаксис простой, но ошибки в нём — частая причина того, что «прописал, а не работает ».

ЭлементПравилоПример
IP-адреспервым в строке, IPv4 или IPv6192.168.1.10
Разделительпробел или табуляция, сколько угодно192.168.1.10 srv1c
Имяодно или несколько через пробелsrv1c srv1c.office.local
Комментарийвсё после # игнорируется# сервер 1С бухгалтерии
Одна записьодна строка, перенос — конец записи—

Чего hosts не умеет:

  • 🚫 порты — строка 192.168.1.10:1541 srv1c не работает, порт задаётся в 1С, а не здесь;
  • 🚫 маски — *.office.local не поддерживается, каждое имя пишется отдельно;
  • 🚫 протокол и путь — https:// и /base в hosts недопустимы, только голое имя хоста;
  • 🚫 подчёркивание и кириллица в имени — имя компьютера для сервера 1С лучше держать латиницей, цифрами и дефисом.

Пример готового блока для 1С:

# --- 1С ---
192.168.1.10    srv1c   srv1c.office.local     # центральный сервер кластера
192.168.1.11    srv1c-2                         # второй рабочий сервер
192.168.1.20    sqlsrv  sqlsrv.office.local     # MS SQL / PostgreSQL
192.168.1.30    lic-srv                         # менеджер сетевых ключей

Регистр букв в имени не важен: SRV1C и srv1c — одно и то же.

Если одно и то же имя написано в hosts дважды с разными адресами, сработает первая строка. Перед добавлением поищите имя в файле поиском Ctrl+F.

Какие имена прописать для кластера 1С, СУБД и лицензий

Главное, что нужно знать практику: адрес сервера, который вы вводите в окне добавления базы, — не единственное имя, которое должен найти клиент.

Клиент → кластер серверов 1С

Схема подключения такая. Клиент стучится к агенту сервера (порт 1540), затем к менеджеру кластера (1541) и к рабочему процессу. Адреса менеджера и рабочих процессов агент сообщает по имени компьютера, под которым сервер зарегистрирован в кластере.

Отсюда классический случай. Сотрудник по VPN добавил базу как Srvr="192.168.1.10";Ref="buh";, агент ответил, а дальше клиент получил имя srv1c и не смог его разрешить. Ошибка выглядит примерно так:

Ошибка соединения с сервером 1С:Предприятия 8.3:
server_addr=tcp://srv1c:1541 descr=11001(0x00002AF9): Этот хост неизвестен.

Лечится одной строкой в hosts клиента: 192.168.1.10 srv1c. Имя берите ровно то, что стоит после tcp:// в тексте ошибки.

Узнать, под каким именем зарегистрирован сервер, можно на самом сервере:

  • в консоли кластера: ветка «Рабочие серверы» — колонка с именем компьютера;
  • через утилиту rac: rac cluster list покажет имя хоста кластера, rac server list --cluster=<id> — рабочие серверы.

Если в кластере несколько рабочих серверов, клиенту нужны записи для каждого: рабочий процесс, к которому вас направит менеджер, может оказаться на любом из них.

Сервер 1С → сервер СУБД

В свойствах информационной базы есть поле «Сервер баз данных». Это имя разрешает сервер 1С, а не компьютер пользователя. Поэтому запись 192.168.1.20 sqlsrv нужна в hosts сервера 1С — у клиентов она ничего не изменит.

Для именованного экземпляра MS SQL в поле пишут sqlsrv\INST, в hosts при этом указывается только sqlsrv. Для PostgreSQL на нестандартном порту — sqlsrv port=5433, в hosts опять же только имя.

Сетевой ключ HASP

Если в конторе стоит сетевой аппаратный ключ, адрес менеджера лицензий задают в файле nhsrv.ini параметром NH_SERVER_ADDR. Его можно указать IP-адресом — тогда hosts не нужен. Если указано имя, оно должно разрешаться на каждом компьютере, где ищется ключ: на клиенте при клиентских ключах, на сервере 1С при серверном ключе.

Веб-клиент и публикация базы

Когда база опубликована на веб-сервере под внешним доменом, внутри офиса этот домен часто указывает на внешний адрес и через роутер не открывается. Строка 192.168.1.40 1c.firma.ru в hosts офисных компьютеров направит браузер и тонкий клиент сразу на внутренний веб-сервер. Сертификат HTTPS при этом продолжит работать: имя в адресной строке не меняется.

Сводка: где какая запись нужна

ЗадачаЧей hosts правимКакое имя пишем
Клиент не видит кластеркомпьютер пользователяимя из ошибки tcp://…
Несколько рабочих серверовкомпьютер пользователяимена всех рабочих серверов
1С не подключается к SQLсервер 1Симя из поля «Сервер баз данных»
Сервер на Linux, 127.0.1.1сервер 1Ссобственное имя → реальный IP
Сетевой HASP по именигде ищется ключимя из NH_SERVER_ADDR
Веб-публикация внутри офисакомпьютер пользователядомен публикации

Проверка: подхватилась ли запись

Windows читает hosts на лету, но кэширует результаты. После правки выполните в командной строке:

ipconfig /flushdns
ping srv1c

В ответе ping должен стоять адрес из hosts. Если сервер не отвечает на ping из-за брандмауэра — не страшно, важна первая строка с IP.

Проверить сам порт агента:

Test-NetConnection srv1c -Port 1540

TcpTestSucceeded : True значит, что имя разрешилось и порт открыт. Затем проверьте 1541 и порты рабочих процессов (по умолчанию диапазон 1560–1591, его задают в свойствах рабочего сервера).

Не проверяйте hosts командой nslookup. Она обращается напрямую к DNS-серверу и файл hosts не читает. Отсутствие ответа в nslookup при работающем ping — нормальная картина.

Для PowerShell есть Resolve-DnsName srv1c — он учитывает hosts. В Linux аналог — getent hosts srv1c.

Клиент 1С, который уже был открыт при правке hosts, перезапустите. Отдельные сбои с кэшем имени в запущенном процессе случаются, и перезапуск клиента быстрее, чем поиск причины.

Диагностика: выберите симптом

Ошибки при правке hosts и безопасность системы

Частые промахи при редактировании:

  • 📄 Файл сохранился как hosts.txt. Блокнот добавил расширение. Удалите лишнее и переименуйте файл; включите показ расширений в Проводнике, чтобы видеть разницу.
  • 🔒 «Нет доступа» при сохранении. Блокнот открыт без прав администратора. Иногда у файла стоит атрибут «Только чтение» — снимите его в свойствах файла.
  • ↩️ Решётка в начале строки. Строка закомментирована и не работает. Так часто бывает с примерами, скопированными из шаблона hosts.
  • 🔁 Устаревший IP. Сервер переехал, адрес сменился, а старая запись в hosts продолжает отправлять клиента в пустоту. DNS бы обновился, hosts — нет.
  • 🌐 Запись только на одном компьютере. Через неделю на другой машине та же ошибка. Если записей много и машин больше трёх-четырёх, заведите имя в DNS.

Защита файла

Hosts — излюбленная цель вредоносных программ: подменой адреса пользователя уводят на поддельный сайт банка или блокируют обновления антивируса. Поэтому:

  • 🛡️ Защитник Windows может удалять записи с адресами известных сайтов или помечать изменённый файл. Свои локальные строки для 1С он обычно не трогает.
  • 👀 Раз в квартал открывайте hosts и смотрите, нет ли чужих строк. Незнакомая запись с именем банка или почты — повод для проверки антивирусом.
  • 🧾 Держите комментарий у каждой своей строки: кто добавил и зачем. Через год вы скажете себе спасибо.

Встречаются советы прописать в hosts адреса сайтов фирмы 1С с 127.0.0.1, чтобы «программа не проверяла лицензию». Это обход лицензионной защиты: незаконно и опасно — к таким инструкциям часто прилагаются модифицированные файлы платформы с вредоносным кодом. Кроме того, блокировка ломает получение обновлений, работу интернет-поддержки и сервисов отчётности.

Частые вопросы

Нужно ли перезагружать компьютер после правки hosts?
Нет. Достаточно выполнить ipconfig /flushdns в Windows и перезапустить клиент 1С. На Linux-сервере процессы кластера может понадобиться перезапустить вместе со службой.
Можно ли в hosts указать порт сервера 1С?
Нет, hosts сопоставляет только адрес и имя. Нестандартный порт указывают в строке подключения базы: srv1c:2541.
Что лучше для удалённых сотрудников: hosts или DNS?
Если VPN-сервер раздаёт клиентам ваш внутренний DNS, достаточно записи в DNS. Если нет — hosts на каждом удалённом компьютере.
Почему nslookup не видит имя, которое есть в hosts?
nslookup опрашивает DNS-сервер напрямую и файл hosts не читает. Проверяйте командами ping, Resolve-DnsName или Test-NetConnection.
Нужно ли прописывать hosts для файловой базы?
Нет, если база лежит в общей папке и путь задан по IP вида \\192.168.1.10\base. Если путь задан по имени компьютера и имя не находится, строка в hosts поможет так же, как для сервера.