В процессе администрирования клиент-серверных информационных баз «1С:Предприятия» часто возникает классическая проблема: после изменения сетевой инфраструктуры или миграции серверов лицензирования веб-клиенты (пользователи, подключающиеся через браузеры или тонкие клиенты по HTTP/HTTPS) внезапно теряют доступ к базе, получая сообщение «Не обнаружена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия». При этом обычные тонкие клиенты, работающие внутри локальной сети, продолжают успешно запускаться и получать лицензии. В этой статье мы подробно разберем, как устроена раздача лицензий для веб-сервера, почему происходит рассинхронизация сетевых настроек и как по шагам восстановить стабильную работу всей системы.
Для того чтобы понять суть проблемы, нам необходимо детально проанализировать разницу в получении лицензий обычным тонким клиентом и веб-клиентом, работающим через публикацию на веб-сервере (например, Apache или IIS). Рассмотрим эту цепочку взаимодействия:
1cv8c.exe на компьютере пользователя пытается самостоятельно обнаружить клиентскую лицензию. Он ищет локальный USB-ключ HASP, программные лицензии на локальном диске, а также опрашивает менеджеры лицензий HASP License Manager по сети с помощью широковещательных запросов или настроек в собственном файле nethasp.ini. Если клиент находит лицензию сам, сервер приложений «1С:Предприятия» в этом процессе не участвует.Из этого следует важнейшее правило архитектуры «1С:Предприятия»: в случае использования веб-клиента за получение и выдачу лицензии отвечает исключительно сервер приложений «1С:Предприятия». Сервис сеансовых данных (или сервис лицензирования в зависимости от версии платформы), запущенный в рамках кластера серверов 1С, должен сам обратиться к локальным ключам сервера или к сетевым HASP-менеджерам, получить свободную лицензию и закрепить ее за сессией веб-клиента.
Выясним, разрешено ли серверу приложений 1С самостоятельно раздавать клиентские лицензии. Если эта опция отключена, веб-клиенты гарантированно не смогут войти в систему, даже если на сервере или в сети есть свободные ключи.
Для проверки выполним следующие действия:
Разрешить выдачу лицензий сервером 1С:Предприятия. Оно обязательно должно быть установлено в значение «Да».Если этот параметр установлен в значение «Нет», сервер будет отказывать в выдаче лицензий веб-клиентам, перекладывая эту обязанность на сторону самого клиента (что, как мы выяснили выше, для веб-клиентов технически невозможно).
Когда мы меняем IP-адреса серверов, на которых физически установлены аппаратные многопользовательские ключи HASP (серии ORGL8), нам необходимо явно указать серверу 1С новые адреса для поиска. По умолчанию поиск менеджеров лицензий идет через широковещательные UDP-запросы. Однако в распределенных сетях (в разных подсетях) широковещательный трафик блокируется маршрутизаторами. В этом случае мы обязаны настроить файлы конфигурации.
Рассмотрим правильную настройку файла nethasp.ini на стороне сервера приложений «1С:Предприятия» для принудительного опроса конкретного сервера лицензий по протоколу TCP/IP:
[NH_COMMON]
NH_IPX = Disabled
NH_NETBIOS = Disabled
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 172.168.0.46
NH_TCPIP_METHOD = TCP
NH_USE_BROADCAST = Disabled
Проанализируем ключевые параметры этого конфигурационного файла:
NH_SERVER_ADDR — указываем точный IP-адрес машины, где установлен USB-ключ HASP и запущен HASP License Manager (в нашем примере это 172.168.0.46).NH_TCPIP_METHOD — устанавливаем значение TCP. Использование протокола TCP вместо UDP повышает надежность связи между серверами в разных подсетях.NH_USE_BROADCAST = Disabled — принудительно отключаем широковещательный поиск, так как мы точно указали целевой IP-адрес. Это существенно ускоряет процесс инициализации и снижает таймауты при запуске сессий.Теперь посмотрим на настройки ответной части — файла nhsrv.ini, который находится на компьютере-менеджере лицензий (где установлен USB-ключ). Нам необходимо разрешить обслуживание входящих TCP-соединений:
[NHS_SERVER]
NHS_USERLIST = 250
NHS_SERVERNAMES = key2
NHS_HIGHPRIORITY = no
[NHS_IP]
NHS_USE_UDP = enabled
NHS_USE_TCP = enabled
NHS_IP_portnum = 475
Обратим внимание на параметр NHS_USE_TCP = enabled. Он открывает порт 475 по протоколу TCP для приема входящих запросов от нашего сервера «1С:Предприятия».
Частая ошибка системных администраторов при настройке файлов конфигурации — размещение nethasp.ini в неверном каталоге. Сервер приложений «1С:Предприятия» и клиентская часть могут иметь разную разрядность, и для них предназначены разные системные пути.
Разберем, где должен лежать файл настроек:
C:\Program Files\1cv8\.... Соответственно, файл конфигурации для него должен находиться исключительно по пути: C:\Program Files\1cv8\conf\nethasp.ini.C:\Program Files (x86)\1cv8\conf\nethasp.ini, эти настройки будут применены только для локального 32-битного клиента, запускаемого на этой машине, а сам 64-битный сервер 1С (процесс rphost) их просто проигнорирует и продолжит искать ключи по старым адресам или настройкам по умолчанию.Важный нюанс прав доступа: служба сервера «1С:Предприятия» обычно работает под ограниченной системной учетной записью (например, usr1cv8). Если вы создали или скопировали файл nethasp.ini под учетной записью администратора, обязательно проверьте права доступа к файлу. У пользователя usr1cv8 должны быть права на «Чтение» этого файла, иначе служба не сможет его прочитать и проигнорирует настройки.
Перейдем к самой сути проблемы, описанной автором темы. Администратор изменил IP-адреса серверов лицензирования, корректно переписал конфигурационные файлы nethasp.ini и nhsrv.ini, убедился, что тонкие клиенты сразу заработали по новым адресам, но веб-сервер продолжал выдавать ошибку отсутствия лицензии.
Выясним причину этого поведения:
Процессы тонкого клиента запускаются на компьютерах пользователей каждый раз заново. При каждом новом запуске процесс считывает конфигурационный файл nethasp.ini с диска «с нуля», сразу получая актуальный IP-адрес менеджера лицензий.
В то же время сервер приложений «1С:Предприятия» является долгоживущей системной службой. Рабочие процессы сервера (rphost.exe) и менеджер кластера (rmngr.exe) считывают файл nethasp.ini только один раз при инициализации службы или при самом первом обращении к подсистеме лицензирования. В дальнейшем все параметры сетевого поиска кэшируются в оперативной памяти процессов сервера 1С.
Пока служба сервера приложений 1С не будет полностью перезапущена, сервер будет продолжать попытки связаться с менеджером HASP по старым IP-адресам, полностью игнорируя любые изменения, внесенные вами в файлы nethasp.ini на жестком диске. В технологическом журнале сервера 1С при этом будет фиксироваться следующая характерная ошибка:
nethasp.ini: C:/Program Files/1cv8/conf/nethasp.ini, прочитан успешно, ошибка соединения с менеджером лицензий: Net Status=0, System Error=0, Warning=15
Код ошибки Warning=15 прямо указывает на невозможность установить сетевое соединение с менеджером лицензий по сохраненным в памяти адресам. Именно поэтому полный перезапуск службы сервера «1С:Предприятия» является обязательным действием для применения новых сетевых настроек лицензирования.
Проанализируем еще один важнейший системный аспект, с которым неизбежно столкнется автор темы при текущей схеме организации сети. В дано указано:
При этом автор рассчитывает, что сервер 1С сможет забирать лицензии из обоих этих ключей и суммировать их емкость для раздачи веб-клиентам. Однако здесь кроется критическое ограничение платформы «1С:Предприятие»:
Сервер приложений 1С:Предприятия умеет единовременно работать только с ОДНИМ сетевым ключом HASP каждой серии по сети.
Если в вашем файле nethasp.ini на сервере 1С будут прописаны IP-адреса обоих HASP-менеджеров (Машины 1 и Машины 2) с ключами серии ORGL8, то при инициализации сервер опросит их, выберет тот менеджер, который ответит первым, и будет забирать лицензии только с него. Второй сетевой ключ той же серии сервер 1С полностью проигнорирует. Таким образом, веб-клиентам будет доступно максимум 50 лицензий, а не 100.
В то же время тонкие клиенты пользователей, работая напрямую в обход сервера 1С, могут распределяться по разным ключам (например, часть пользователей заберет лицензии с Машины 1, часть — с Машины 2 за счет разделения подсетей), но для веб-клиентов этот механизм суммирования работать не будет.
Для решения этой проблемы и суммирования лицензий на сервере 1С рекомендуем использовать следующие подходы:
Подводя итоги, сформируем краткий чеклист действий для восстановления раздачи лицензий веб-клиентам после изменения сетевых настроек:
Разрешить выдачу лицензий сервером.nethasp.ini лежит в правильном каталоге в соответствии с разрядностью службы сервера (для 64-битного сервера это каталог Program Files, а не Program Files (x86)).usr1cv8), есть права на чтение файла nethasp.ini.nethasp.ini точный IP-адрес HASP-менеджера и отключите широковещательный поиск (Broadcast).nhsrv.ini разрешите работу по протоколу TCP.