Как настроить два ключа HASP в одной локальной сети для 1С без конфликтов лицензирования?

Системный администратор IT и автоматизация бизнеса
← На главную

Каждый системный администратор, обслуживающий инфраструктуру 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 в сети больше нет.

Чтобы исключить эту проблему, нам необходимо жестко разделить менеджеры лицензий по уникальным именам. Сделаем это по шагам.

Шаг 1. Настройка уникальных имен в файле nhsrv.ini

Файл конфигурации nhsrv.ini управляет поведением самого менеджера лицензий HASP LM на том компьютере, где физически установлен USB-ключ. Обычно этот файл находится в папке установки HASP LM, а если менеджер запущен как служба Windows — в системных каталогах C:\Windows\System32 или C:\Windows\SysWOW64.

Выполним настройку для каждого сервера лицензирования:

  1. На Терминальном сервере (например, IP 192.168.0.1), где установлен ключ на 10 пользователей, откроем файл nhsrv.ini и в секции [NHS_SERVER] зададим уникальное имя сервера (не более 7 латинских символов):
    
    [NHS_SERVER]
    NHS_SERVERNAMES = LMTS
    
  2. На рабочей станции (например, IP 192.168.0.13), где установлен ключ на 5 пользователей, также откроем nhsrv.ini и зададим другое уникальное имя:
    
    [NHS_SERVER]
    NHS_SERVERNAMES = LMCOMP
    

После сохранения изменений обязательно перезапустим службу HASP Loader на обоих компьютерах через оснастку services.msc, чтобы новые имена применились.

Шаг 2. Настройка файла nethasp.ini на клиенте (терминальном сервере)

Теперь нам нужно указать платформе 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. Это исключит путаницу при распределении свободных лицензий.

Почему при ограничении адреса 1С пишет «нет свободных лицензий», хотя Aladdin Monitor видит их?

Рассмотрим ситуацию, когда мы прописали в nethasp.ini только адрес терминального сервера 192.168.0.1, но при запуске базы получаем ошибку отсутствия лицензий, хотя утилита Aladdin Monitor показывает, что свободные слоты есть. У этого парадокса есть три главные причины:

  1. Зависшие («призрачные») сессии RDP. Когда пользователи завершают работу некорректно — например, просто закрывают окно терминального подключения крестиком, обрывают интернет-соединение или если процесс 1С завершается аварийно — лицензия в HASP LM не освобождается мгновенно. Она может оставаться заблокированной сервером лицензий до нескольких часов или до перезапуска службы.
  2. Специфика работы Aladdin Monitor. Эта утилита опрашивает HASP LM по протоколу UDP через порт 475 и отображает текущую таблицу распределения. Однако, если сессия зависла, Monitor может показывать ее как «активную», но при этом сама служба HASP LM из-за внутренних таймаутов или конфликта дескрипторов может отказать новому клиенту в выдаче этой лицензии. Помогает в этом случае только перезапуск службы HASP Loader.
  3. Кэширование лицензий в файле 1cv8conn.pfl. Платформа 1С сохраняет сведения о последнем успешном получении лицензии в специальный кэш-файл. В операционных системах Windows он располагается по пути:
    C:\ProgramData\1C\1Cv8\1cv8conn.pfl (для всех пользователей) или в профиле конкретного пользователя AppData.
    Если клиент однажды успешно получил лицензию с рабочей станции 192.168.0.13, он будет в первую очередь опрашивать именно её, игнорируя настройки приоритетов в 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С, где каждый ключ обслуживает строго свой сегмент пользователей, а сетевые коллизии будут полностью исключены.

← На главную