В этой статье мы подробно разберем ситуацию, с которой часто сталкиваются системные администраторы при настройке сложной архитектуры лицензирования 1С:Предприятие. Рассмотрим случай, когда в сети присутствуют и аппаратные ключи защиты (USB HASP), и программные лицензии, размещенные на выделенном сервере лицензирования, но клиентские приложения не могут их получить.
Представим конфигурацию сети:
Симптомы проблемы: утилита ring license validate на сервере лицензирования показывает, что все в порядке. Однако рабочий сервер 1С не может забрать лицензии для клиентов. В логах или сообщениях об ошибке мы видим, что система пытается обратиться не к тому ключу защиты (неверный ID серии ключа), либо возникает ошибка привязки лицензии.
Давайте разберем по шагам, почему это происходит и как настроить систему правильно.
Первое, на что нам необходимо обратить внимание, — это ошибка вида:
Ошибка программного лицензирования. Ошибка привязки программной лицензии к компьютеру:
file://C:/ProgramData/1C/licenses/202xxxxxxxx056.lic
В текущей конфигурации компьютера имеются:
HASP_0: ORGL8, client, 5 users, id 12xxxxxxx74, 1
Здесь мы видим две проблемы:
20xxxxxx270).12xxxxxxx74).Важное архитектурное правило: Крайне не рекомендуется привязывать программные лицензии на Сервере лицензирования к аппаратному ключу, который установлен на другом компьютере (сетевому ключу). И вот почему:
Если у вас есть возможность, перенесите аппаратный ключ, к которому привязаны программные лицензии, локально в порт Сервера лицензирования. Если это невозможно, перейдем к настройке конфигурационных файлов, чтобы минимизировать конфликты.
Если в сети несколько менеджеров лицензий (HASP LM), платформа 1С по умолчанию использует широковещательный запрос (Broadcast). Это значит, что она "кричит" на всю сеть: "У кого есть лицензия?". Кто первый ответил (или чей ответ быстрее дошел), тот ключ и будет использован.
В нашем случае отвечает "неправильный" ключ. Чтобы заставить сервер видеть строго определенный ключ, нам нужно настроить файл nethasp.ini. Обычно он находится в папке conf установленной версии платформы (например, C:\Program Files\1cv8\conf\nethasp.ini).
Настроим секцию [NH_TCPIP] следующим образом:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
; Обязательно отключаем широковещательный поиск
NH_USE_BROADCAST = Disabled
; Указываем конкретный IP-адрес машины с нужным ключом
NH_SERVER_ADDR = 10.11.11.2
Обратите внимание: если вы не установите параметр NH_USE_BROADCAST = Disabled, указание IP-адреса может не сработать, так как широковещательный ответ от другого сервера может прийти быстрее адресного опроса.
Иногда настройки клиента недостаточно, и нужно запретить "лишнему" менеджеру лицензий отвечать на запросы нашего сервера. Для этого настроим сам HASP License Manager на той машине, где стоит "мешающий" ключ.
Файл настройки называется nhsrv.ini. Он должен находиться в папке с установленным менеджером лицензий (обычно C:\Program Files (x86)\Aladdin\HASP LM\).
Важный нюанс: Как выяснилось в ходе разбора проблемы, служба HASP LM может не видеть этот файл, если он просто лежит в папке программы, но папка не прописана в системной переменной %PATH%, или если служба запущена с правами, не позволяющими читать этот файл. Убедитесь, что после редактирования файла вы перезапустили службу HASP Loader.
В файле nhsrv.ini используем параметр NHS_IP_LIMIT для ограничения доступа:
[NHS_IP]
; Разрешаем доступ только определенным подсетям или адресам
; Синтаксис: NHS_IP_LIMIT = , <Маска подсети>
; Но чаще используется список разрешенных IP
NHS_IP_LIMIT = 10.11.11.2, 10.44.*.*
Этот параметр работает как "белый список". Если вы пропишете туда только локальные адреса, сервер перестанет отвечать на запросы из других подсетей, что исключит его из "видимости" вашего сервера лицензирования.
Если вы столкнулись с нестабильной работой схемы "Программная лицензия привязана к сетевому ключу", наиболее надежным решением будет изменение параметров привязки.
Помните, что резервные пин-коды для программных лицензий можно запрашивать в центре лицензирования 1С, даже если они закончились в комплекте (при условии, что вы зарегистрированный пользователь). Это позволит создать более устойчивую архитектуру без лишних зависимостей от сети.
Если сервер 1С не видит лицензии, выполним следующие действия:
nethasp.ini на клиенте (сервере 1С) отключим NH_USE_BROADCAST и пропишем явный IP нужного ключа.nhsrv.ini на серверах с ключами, чтобы ограничить зону их видимости.