Каждый системный администратор, обслуживающий инфраструктуру 1С:Предприятие, рано или поздно сталкивается с особенностями работы аппаратной системы защиты HASP. Особенно остро проблемы лицензирования проявляются в одноранговых сетях без контроллера домена, где развернут терминальный сервер, а в локальной сети одновременно находятся несколько физических USB-ключей защиты (например, один многопользовательский ключ на 10 лицензий установлен непосредственно в терминальный сервер, а второй на 5 лицензий — на обычную рабочую станцию в той же подсети).
В таких сценариях пользователи терминального сервера часто сталкиваются с неприятной ситуацией: платформа 1С упорно пытается получить лицензию со стороннего компьютера, где лимит быстро исчерпывается, в то время как на самом терминальном сервере остаются свободные лицензии. При этом попытка жестко ограничить поиск лицензий в файле конфигурации приводит к ошибке «Не обнаружена лицензия».
В этой статье мы подробно разберем, почему возникают подобные сетевые коллизии, проанализируем поведение платформы 1С и менеджера лицензий HASP License Manager, а также настроим конфигурационные файлы nhsrv.ini и nethasp.ini для стабильной и предсказуемой работы системы.
По умолчанию каждый запущенный в локальной сети менеджер лицензий (HASP License Manager, далее — HASP LM) регистрирует в сети одно и то же предопределенное имя. Когда в одной локальной сети работают два и более HASP LM с дефолтными настройками, возникает коллизия имен.
Даже если мы прописываем IP-адреса серверов через запятую в файле nethasp.ini, широковещательные запросы или запросы по умолчанию могут перенаправляться хаотично. Платформа 1С опрашивает менеджеры лицензий и, натыкаясь на первое ответившее имя, пытается забрать лицензию оттуда. Если на этом ключе лицензии закончились, платформа может прекратить дальнейший поиск по списку адресов, решив, что свободных лицензий серии ORGL8 в сети больше нет.
Чтобы исключить эту проблему, нам необходимо жестко разделить менеджеры лицензий по уникальным именам. Сделаем это по шагам.
Файл конфигурации nhsrv.ini управляет поведением самого менеджера лицензий HASP LM на том компьютере, где физически установлен USB-ключ. Обычно этот файл находится в папке установки HASP LM, а если менеджер запущен как служба Windows — в системных каталогах C:\Windows\System32 или C:\Windows\SysWOW64.
Выполним настройку для каждого сервера лицензирования:
nhsrv.ini и в секции [NHS_SERVER] зададим уникальное имя сервера (не более 7 латинских символов):
[NHS_SERVER]
NHS_SERVERNAMES = LMTS
nhsrv.ini и зададим другое уникальное имя:
[NHS_SERVER]
NHS_SERVERNAMES = LMCOMP
После сохранения изменений обязательно перезапустим службу HASP Loader на обоих компьютерах через оснастку services.msc, чтобы новые имена применились.
Теперь нам нужно указать платформе 1С, к каким именно менеджерам лицензий и под какими именами ей следует обращаться. Файл nethasp.ini находится на стороне клиента — в каталоге установленной платформы 1С (например, C:\Program Files\1cv8\conf\ или в папке конкретного релиза bin\conf\).
Проанализируем оптимальные параметры настройки этого файла для нашей конфигурации. Отключим неиспользуемые протоколы и широковещательный поиск (Broadcast), чтобы исключить хаотичный опрос сети, и свяжем IP-адреса с именами:
[NH_COMMON]
NH_TCPIP = Enabled
NH_IPX = Disabled ; Отключаем устаревший протокол IPX
NH_NETBIOS = Disabled ; Отключаем NetBIOS, чтобы избежать коллизий имен по умолчанию
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.0.1, 192.168.0.13
NH_SERVER_NAME = LMTS, LMCOMP
NH_TCPIP_METHOD = UDP ; Принудительно задаем метод работы через UDP
NH_USE_BROADCAST = Disabled ; Отключаем широковещательный поиск (очень важно!)
; Настройка таймаутов ожидания ответа от ключа
NH_SESSION = 5
NH_SEND_RCV = 4
Благодаря строке NH_SERVER_NAME = LMTS, LMCOMP платформа будет четко понимать, что по адресу 192.168.0.1 отвечает менеджер LMTS, а по адресу 192.168.0.13 — менеджер LMCOMP. Это исключит путаницу при распределении свободных лицензий.
Рассмотрим ситуацию, когда мы прописали в nethasp.ini только адрес терминального сервера 192.168.0.1, но при запуске базы получаем ошибку отсутствия лицензий, хотя утилита Aladdin Monitor показывает, что свободные слоты есть. У этого парадокса есть три главные причины:
HASP Loader.C:\ProgramData\1C\1Cv8\1cv8conn.pfl (для всех пользователей) или в профиле конкретного пользователя AppData.
nethasp.ini. При возникновении проблем рекомендуется физически удалить этот файл, чтобы принудительно сбросить кэш выбора лицензий.Если в процессе эксплуатации терминального сервера лицензии периодически «залипают» из-за некорректного выхода пользователей, самым надежным решением станет автоматизация перезапуска службы защиты во внерабочее время.
Для этого мы можем настроить Планировщик задач Windows (Task Scheduler) на терминальном сервере, который будет запускать простой командный скрипт каждую ночь. Создадим исполняемый файл с расширением .bat (например, restart_hasp.bat) со следующим содержимым:
@echo off
net stop "HASP Loader"
timeout /t 5 /nobreak
net start "HASP Loader"
Этот сценарий гарантированно очистит таблицу дескрипторов HASP LM, освободит все зависшие терминальные лицензии и подготовит систему к новому рабочему дню без ручного вмешательства системного администратора.
Применяя данные настройки, мы получим стабильно работающую систему лицензирования 1С, где каждый ключ обслуживает строго свой сегмент пользователей, а сетевые коллизии будут полностью исключены.