В рамках поставленной задачи (узнавать о появлении новых MAC-адресов на портах
коммутаторов DLink) понадобилось организовать настройку SNMP-trap'ов на
коммутационном оборудовании с последующим приемом их на сервере и дальнейшей
обработкой в зависимости от пришедшего события.
Для начала надо установить и настроить демон, который будет принимать трапы от
оборудования и при нужном MIB вызывать наш обработчик. Установка net-snmp -
тема отдельная, выполняется из пактов или портов, и особых трудностей не вызывает.
Собственно приемом трапов занимается snmptrapd. Для обработки заданного трапа
пишем в snmptrapd.conf:
traphandle 1.3.6.1.4.1.171.11.63.6.2.20.0.2 /scripts/trap.php
Теперь после рестарта демона snmptrapd, он начнет принимать приходящие трапы и
при наличии трапа с заданным MIB (1.3.6.1.4.1.171.11.63.6.2.20.0.2 - в нашем
случае), будет вызывать наш обработчик, который уже будет совершать необходимые
нам действия.
Обработчик SNMP-трапов
Принимать SNMP trap-ы на самом деле достаточно просто. Вот пример простого
обработчика SNMP-трапов на PHP:
#!/usr/bin/php -q
<?php
$message = "";
$fd = fopen("php://stdin", "r");
while (!feof($fd)) $message .= fread($fd, 1024);
?>
Все что делает этот скрипт - получает в переменную $message текст, который
передается демоном snmptrapd. Текст приходит разделенный знаками конца строки.
Первая строка - это всегда имя хоста (который прислал трап), вторая - IP-адрес
этого хоста, третья - его uptime, четвертая - MIB пришедшего трапа. Остальные
строки в сообщении - это детальная информация касательно пришедшего трапа, если
она предусмотрена.
Для отправки Trap-ов на коммутаторе исполняем такие команды:
create snmp community trap_com view CommunityView read_only
create snmp host x.x.x.x v2c trap_com
Где х.х.х.х - IP-адрес сервера, котоырй будет принимать SNMP traps.
Далее надо включить опцию дабы коммутатор отсылал трап при появлении на порту
нового мака. Делается это через SNMP
snmpset -v2c -c write_commenity switch_ip 1.3.6.1.4.1.171.11.63.6.2.1.2.19.0 i 3
Выключить эту опцию можно так
snmpset -v2c -c write_commenity switch_ip 1.3.6.1.4.1.171.11.63.6.2.1.2.19.0 i 2
Узнать текущее состояние опции можно так
snmpwalk -v2c -c read_commenity switch_ip 1.3.6.1.4.1.171.11.63.6.2.1.2.19
Вся информация справедлива для коммутаторов 3028. Для других моделей MIB-ы
могут сильно отличаться - к сожалению, DLink любит менять их от серии к серии.
Надо заметить, что опция отправки трапа при появлении нового мака на порту
доступна далеко не на всех моделях DLink-овых коммутаторов - например, 3010
такой возможности не поддерживает.
|