Как запретить серверу 1С раздавать аппаратные лицензии и настроить их получение через HASP License Manager?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с аппаратными ключами защиты 1С часто возникает ситуация, когда лицензии расходуются слишком быстро. Это происходит из-за того, что по умолчанию «Сервер 1С:Предприятие» берет на себя роль раздатчика лицензий. В этом режиме лицензия выдается на каждый сеанс (каждое запущенное окно программы), что крайне невыгодно при работе одного пользователя с несколькими базами. Рассмотрим, как перевести систему в режим выдачи лицензий «на компьютер» через HASP License Manager, чтобы один пользователь мог запускать неограниченное количество баз, занимая всего одну лицензию.

Понимание механизмов защиты: «на сеанс» vs «на компьютер»

Для начала проанализируем ситуацию и выясним причину избыточного потребления лицензий. В системе 1С существует два основных способа получения клиентской лицензии:

  1. Выдача сервером 1С: Сервер сам обращается к ключу и «отрезает» лицензию для конкретного подключения. В этом случае подсчет идет по сеансам. Если пользователь открыл три базы, сервер заберет из ключа три лицензии.
  2. Выдача через HASP License Manager (HLM): Клиентское приложение (толстый или тонкий клиент) само ищет менеджер лицензий в сети по протоколу TCP/UDP 475. Если клиент находит лицензию таким способом, она закрепляется за рабочей станцией. В этом случае пользователь может открыть любое количество баз, и будет занята только одна лицензия.

Наша задача — заставить клиентское приложение находить лицензию самостоятельно, запретив серверу предлагать свои услуги по раздаче.

Способ 1: Отключение раздачи лицензий в настройках информационной базы

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

Разберем по шагам, как это сделать через консоль администрирования серверов 1С:

  1. Откроем консоль администрирования MMC (для Windows) или воспользуемся инструментами администрирования для Linux.
  2. Перейдем в дерево настроек конкретной информационной базы.
  3. Найдем параметр «Разрешить выдачу лицензий сервером 1С:Предприятие».
  4. Установим значение в «Нет» (сняв соответствующую галочку).

Рассмотрим ситуацию, когда баз много. Чтобы не менять настройки вручную в каждой базе, проанализируем возможность использования утилиты командной строки rac (Remote Administration Client). Мы можем выполнить команду для изменения настроек программно:


rac infobase --cluster=UUID_кластера --infobase=UUID_базы update --license-distribution=deny

После этого сервер перестанет предлагать лицензии клиентам этой базы, и они будут вынуждены искать их в сети через HASP LM.

Способ 2: Настройка клиентского nethasp.ini

Даже если мы отключили раздачу на сервере, клиент может «не увидеть» ключ в сети из-за особенностей широковещательных запросов (Broadcast), особенно если сервер и клиенты находятся в разных подсетях. Выясним, как гарантированно направить клиента к ключу.

Для этого нам потребуется отредактировать файл nethasp.ini. Обычно он располагается в папке conf установленной платформы (например, C:\Program Files\1cv8\conf\). Настроим его следующим образом:


[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
;; Указываем конкретный IP-адрес сервера, где установлен аппаратный ключ
NH_SERVER_ADDR = 192.168.1.50 
;; Отключаем широковещательный поиск для ускорения работы
NH_USE_BROADCAST = Disabled

Такая настройка заставляет программу 1С обращаться напрямую к менеджеру лицензий. Посмотрим на результат: теперь клиент сначала пытается получить лицензию по сети «на компьютер», и только если это не удастся (а серверная раздача у нас отключена), он выдаст ошибку отсутствия ключа.

Способ 3: Изоляция ключа от сервера 1С

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

Рассмотрим варианты решения:

  1. Вынос ключа на другой хост: Переставим USB-ключ в другой компьютер в локальной сети. Установим там драйвер и HASP License Manager. Теперь сервер 1С не увидит ключ локально и не сможет его раздавать, если мы не пропишем обратное.
  2. Блокировка доступа для процесса сервера: Если ключ обязан остаться на сервере, мы можем использовать настройки nhsrv.ini (файл конфигурации менеджера лицензий). В секции NHS_IP_LIMIT можно ограничить список IP-адресов, которым разрешено брать лицензии. Если мы исключим 127.0.0.1 или локальный IP сервера, процесс rphost не сможет достучаться до менеджера лицензий, в то время как пользователи продолжат получать ключи.

Особенности работы с веб-клиентами и Linux

Важно помнить о критическом ограничении: веб-клиенты (через браузер) не умеют получать лицензии по сети через HASP LM. Браузер технически не может инициировать соединение по протоколу NetHASP. В этом случае раздача лицензий сервером является единственным способом работы.

Если в вашей инфраструктуре активно используются веб-клиенты, выполним следующее разделение:

Проанализируем работу на Linux. В среде Linux управление ключами осуществляется демоном hasplmd. Для мониторинга используйте Sentinel Admin Control Center (доступен по адресу http://localhost:1947). В разделе «Sessions» вы сможете четко увидеть, кто именно занял лицензию. Если в колонке User вы видите имя пользователя — лицензия взята «на компьютер». Если вы видите процесс rphost или системную учетную запись сервера — значит, лицензию раздает сервер «на сеанс».

Резюме

Для оптимизации лицензий мы проделали следующие шаги: выяснили разницу в типах лицензирования, отключили раздачу лицензий в настройках ИБ, настроили nethasp.ini на стороне пользователей и проверили возможность физического переноса ключа. Эти действия позволяют сократить расходы лицензий в 2-3 раза в зависимости от интенсивности работы пользователей с несколькими базами одновременно.

← На главную