четверг, 21 июля 2011 г.

1С:Предприятие. РАБОТА С КЛЮЧАМИ ЗАЩИТЫ HASP ПО СЕТИ

Для работы с сетевыми ключами, помимо установки драйверов, вам еще потребуется установить License
Manager (Менеджер лицензий) для каждого сетевого ключа. Менеджер лицензий  - это утилита, которая
служит связующим звеном между сетевым ключом и «1C», запускаемой на удаленной машине.
Для  работы защищенного приложения на удаленной рабочей станции необходимо  обеспечить
беспрепятственный проход UDP- и TCP-пакетов по 475 порту в обе стороны. Также должны проходить
и  broadcast-пакеты. Если последнее требование по каким-либо причинам не выполняется, необходима
настройка приложения через файл  nethasp.ini (должен находиться в одной директории с  исполняемым
файлом) с целью отключения broadcast-механизма поиска ключа и явного указания
IP-адреса машины, обслуживающей ключ.
Пример файла nethasp.ini:
--------------------- nethasp.ini -------------------------------
[NH_COMMON]
NH_TCPIP = Enabled
...
[NH_TCPIP]
NH_SERVER_ADDR = 168.192.1.10 // ip-адрес компьютера, где расположен Менеджер лицензий.
NH_TCPIP_METHOD = TCP
NH_USE_BROADCAST = Disabled
---------------------------------------------------------------
Если часть маршрута между запускаемой программой и ключами HASP проходит через Интернет или на
ключе более 100 лицензий, могут возникнуть проблемы с тайм-аутами при доставке пакетов. Время
ожидания ответа можно регулировать с помощью параметров NH_SESSION и  NH_SEND_RCV. По
умолчанию они закомментированы, и их значение составляет 30 и 5 секунд соответственно. Таким образом,
делается 6 попыток найти ключ по 5 секунд каждая. При необходимости  вы можете увеличить эти
параметры.
Менеджер лицензий не рекомендуется устанавливать его на компьютер с  2-мя  и более  сетевыми
интерфейсами,  так как это может вызвать  некорректное функционирование  Менеджера.  Для решения
данной проблемы следует:
• Перенести Менеджер лицензий на другую машину в сети.
• Отключить остальные сетевые интерфейсы.
• Также можно попробовать изменить метрики в свойствах протокола  TCP/IP (первым будет
использован интерфейс с меньшей метрикой), но результат в данном случае гарантировать нельзя.
При установке в сети двух и более Менеджеров лицензий их необходимо настроить для корректной
работы. Иначе в сети может возникать коллизия  из-за имен Менеджеров лицензий  - при старте они
принимают одно и то же имя по умолчанию, и в результате в сети присутствует несколько ресурсов с
одинаковыми именами. Стоит отметить, что нередко Менеджеры нормально работают и без настройки. Тем
не менее, следует иметь в виду, что возможно возникновение проблемы. Кроме того, настройка может
понадобиться, например, чтобы разделить клиентов по разным Менеджерам лицензий.
Основная идея настройки в данном случае – назначить каждому Менеджеру свое имя и сообщить каждой
копии «1С»  эти имена. Задать имя Менеджеру можно через файл nhsrv.ini, он должен находиться в одном
каталоге с  Менеджером лицензий (по умолчанию  - C:\Program Files\Aladdin\HASP LM). Если Менеджер
лицензий установлен как сервис, то данный файл необходимо скопировать в каталог  Windows\System32
(для 64-разрядных ОС  - Windows\SysWOW64). Имя должно состоять из алфавитно-цифровых символов
(только английские буквы!), и не должно быть длиннее 7 символов.
Пример настройки:
------------------- nhsrv.ini #1------------------------------
[NHS_SERVER]
NHS_SERVERNAMES = LM1
----------------------------------------------------------------------------------- nhsrv.ini #2------------------------------
[NHS_SERVER]
NHS_SERVERNAMES = LM2
----------------------------------------------------------------
Также вы можете указать диапазон  IP-адресов,  которым будет разрешено взаимодействовать с
Менеджером лицензий.  За это отвечает параметр NHS_IP_LIMIT и по умолчанию он закомментирован.
Запросы с адресов, которые не указаны в этом параметре будут проигнорированы. С помощью параметра
NHS_USERLIST можно указать максимальное число одновременных подключенный к менеджеру лицензий,
по умолчанию его значение равно 250.
Сообщить защищенному приложению имена Менеджеров  лицензий  можно через файл  nethasp.ini, он
должен находиться в одном каталоге с защищенным приложением (для «1С» – каталог Bin) либо в каталоге
Windows\System32(для 64-разрядных ОС - Windows\SysWOW64):
-------------------- nethasp.ini ------------------------------
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 168.192.1.41, 168.192.1.11
NH_SERVER_NAME = LM1, LM2
----------------------------------------------------------------
Параметры «адрес»  и «имя»  должны соответствовать друг другу, т.е. на машине с адресом 168.192.1.41
должен быть запущен Менеджер с именем LM1. Адреса даны для примера, следует указывать реальные IP
адреса машин, где установлены соответствующие Менеджеры лицензий. В параметре NH_SERVER_ADDR
можно через запятую указать несколько компьютеров, где расположены Менеджеры лицензий. Если по
первому адресу менеджер лицензий окажется недоступен или на нем не окажется свободных лицензий, то
запрос будет перенаправлен к следующему менеджеру лицензий, который был указан в
NH_SERVER_ADDR.
При использовании UDP в качестве протокола передачи данных возможна 100% загрузка одного из ядер
процессора или массовые ошибки receive problem error 10038 и receive problem error 10054 в журнале
License Manager. Причина сбоев в работе Менеджера лицензий  – «битые»  пакеты, приходящие по  UDP.
Поскольку обмен при помощи  UDP-дейтаграмм не предусматривает контроля успешной доставки пакета,
данный протокол надежно работает только в сетях, построенных на высококачественном оборудовании.
Единственный способ разрешить эту проблему, не учитывая замену оборудования на более качественное,
– это переход на обмен посредством  TCP-пакетов. В этом случае контролируется успешная доставка
каждого пакета, и работа с ключом становится более надежной.
Для того, чтобы настроить «1С» на работу через TCP-пакеты, необходимо сконфигурировать файл
nethasp.ini:
--------------------- nhsrv.ini -------------------------------
[NH_COMMON]
NH_TCPIP = Enabled
...
[NH_TCPIP]
NH_SERVER_ADDR = 168.192.1.41
NH_TCPIP_METHOD = TCP
---------------------------------------------------------------
Далее следует отключить в Менеджере лицензий прослушивание UDP-протокола, оставив только TCP, для
этого в nhsrv.ini требуется прописать:
--------------------- nhsrv.ini -------------------------------
[NHS_IP]
NHS_USE_UDP      = disabled
NHS_USE_TCP      = enabled
---------------------------------------------------------------
«1C» 8.x работает только по UDP. Однако ее можно заставить использовать TCP неявно. Для этого, помимо
того, что описано выше, необходимо разрешить в свойствах протокола  TCP/IP (Properties - Advanced -
WINS) поддержку  NetBios over TCP/IP на рабочих станциях, где работает защищенное приложение и на
машине, где установлен ключ. Конфигурационные файлы приложения необходимо настроить следующим
образом:
-------------------- nethasp.ini ------------------------------
[NH_COMMON]NH_TCPIP = Disabled
NH_NETBIOS = Enabled
...
[NH_NETBIOS]
NH_USELANANUM = NUM
-----------------------------------------------------------------
Значение параметра  Num можно взять из лога Менеджера лицензий,  - там указывается, какие каналы
Менеджер слушает по  NetBios'у. Если номеров несколько, переберите их по очереди, пока  «1С» не
запустится. При такой настройке «1С» в качестве транспорта по-прежнему будет использовать TCP/IP, но
работать с ним будет через интерфейс  NetBios. Причем при передаче пакетов будет использоваться
именно TCP-механизм, в силу особенностей реализации NetBios over TCP/IP.
При нештатном завершении работы  «1С», когда  программа не успевает освободить лицензию, могут
образовываться «зависшие»  лицензии.  В этом случае новые копии приложения не будут запускаться до
тех пор, пока  «зависшие» лицензии не будут удалены.  По истечению таймаута, который составляет 36
часов с момента последнего обращения со стороны защищенного приложения, лицензии будет
освобождены самим  Менеджером лицензий. Раньше этого срока освободить лицензию можно только
перезапустив Менеджер лицензий (перезагружать компьютер нет необходимости). Обратите внимание, что
в этом случае другие пользователи должны будут так же перезапустить приложение.  Если таймаут равен
0, значит, лицензия уже освобождена, даже если запись об этом осталась в журнале Менеджера лицензий.
По мере наступления новых событий, подлежащих журналированию, эта запись будет затерта.

Комментариев нет:

Отправить комментарий

1