Snmp: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
Рядок 123: Рядок 123:
** ifInErrors - количество ошибок
** ifInErrors - количество ошибок
** ifAlias - имя порта
** ifAlias - имя порта
В документе соединений добавляем соединение для данного типа свичей:
<pre>
$c = Get_config 'DGS1100';
$c->Set_connection( %connection );
</pre>


В учетке свича укажите snmp конфиг DGS1100 (вероятно, вам придется его добавить в выпадающий список)
В учетке свича укажите snmp конфиг DGS1100 (вероятно, вам придется его добавить в выпадающий список)

Версія за 09:40, 25 жовтня 2018

Ставим Net::SNMP

cd /usr/ports/net-mgmt/p5-Net-SNMP && make install clean


Запрашиваем по snmp у свича 10.100.100.14 параметр «описание устройства»:

snmpwalk -v2c -c public 10.100.100.14 1.3.6.1.2.1.1.1.0

Если не получили информацию, возможно:

  • На свиче 10.100.100.14 не включен snmp версии v2c
  • На свиче 10.100.100.14 не создана snmp community = public
  • На свиче 10.100.100.14 нет параметра 1.3.6.1.2.1.1.1.0

Параметры Snmp (mib-ы) в некоторой степени стандартизированы, но иногда бывают отличия даже в разных моделях устройств одного производителя. Невозможно дать универсальные команды по включению и настройке snmp в конкретном устройстве - вам необходимо изучить документацию к нему. Но обычно интуитивно понятно и, зачастую, команды для настройки snmp можно узнать путем просмотра текущего конфига устройства.

Создаем группу для оборудования

В админке, в меню «Настройки» → «Группы» создаем группу «Свичи», у которой устанавливаем такие параметры:

  • Имя идентификационного поля: Инвентарный номер
  • Имеют поля ФИО, договор, пароль: убираем галку
  • Имеют баланс: убираем галку
  • К учетным записям подключаются услуги: убираем галку
  • К учетным записям подключаются ip, имеют трафик: ставим галку
  • Учетные записи имеют сущность «Порты»: ставим галку
  • В данной группе находятся сотрудники компании: убираем галку


В меню «Настройки» → «Дополнительные поля» проверяем, что инсталятор создал поле:

  • Имя поля: snmp конфиг
  • Имя поля в бд: _snmp
  • Тип поля: выпадающий список
  • Тип объекта: snmp

Здесь же ставим галку напротив группы «Свичи».


В группе «Свичи» создаем учетную запись свича, добавляем ip и параметр «snmp конфиг» устанавливаем в значение «Стандартный свич». После этого пробуем получить данные свича нажав на ссылку «Инфо по snmp». Если не получаем никаких данных, то включаем debug режим на титульной странице, повторяем запрос «Инфо по snmp» и смотрим в debug.

Комментарии к портам можно установить в меню «Порты» на странице данных текущего свича.


Теперь для безопасности на свиче изменим community, например, на название сети CoolNet.

Проверим:

snmpwalk -v2c -c CoolNet 10.100.100.14 1.3.6.1.2.1.1.1.0

Создаем параметры подключения

В меню «Документы» создаем папку Snmp. В ней создаем документ с именем, например, «Соединения». Обязательно добавляем тег snmp_connection

Содержимое документа:

%connection = (
    Community => 'CoolNet',
    Version   => 2,
);

$c = Get_config 'Planet';
$c->Set_connection( %connection );

$c = Get_config 'DLink';
$c->Set_connection( %connection );

$c = Get_config 'Switch';
$c->Set_connection( %connection );

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

В этом примере:

  • $c = Get_config 'Planet'; - в переменную $c мы получили конфиг с именем Planet. Инсталятор автоматически создает 3 конфига: Switch, PLanet и DLink. Вы можете создать и для других устройств, но об этом позже.
  • $c->Set_connection( %connection ); - установили новые параметры соединения (Community = 'CoolNet').


Проверяем в админке получение данных свича по snmp. Пробуем выключить его какой-либо порт. Учтите, что в настройках самого свича community CoolNet должно иметь права на изменение данных.


Создаем конфиг нестандартного устройства

В админке в папке Snmpo создаем документ с именем DGS1100 и обязательно с тегом: snmp_device

Содержимое документа:

$c = New_Config 'DGS1100', 'Switch';

$c->{cfg}{dot1dTpFdbPort}  = {
    oid  => '1.3.6.1.2.1.17.4.3.1.1.',
    name => 'Порт по маку',
};

$c->{cfg}{Show_ports} = [
    'dot1dTpFdbPort',
    'ifAdminStatus',
    'ifOperStatus',
    'ifSpeed',
    'ifInErrors',
    'ifAlias',
];
  • Создали конфиг для свичей DGS1100.
  • Добавили mib: dot1dTpFdbPort. По нему можно будет получить информацию какие мак-адреса зарегистрированы на портах свича
  • Show_ports описывает таблицу с информацией о портах, которая выводится в админке при получении данных по snmp. В данном случае в этой таблице будут столбцы:
    • номер порта
    • dot1dTpFdbPort - список мак адресов (абонентов) на текущем порту
    • ifAdminStatus - заблокирован ли порт
    • ifOperStatus - текущее состояние (подключен или нет)
    • ifSpeed - скорость порта
    • ifInErrors - количество ошибок
    • ifAlias - имя порта

В документе соединений добавляем соединение для данного типа свичей:

$c = Get_config 'DGS1100';
$c->Set_connection( %connection );

В учетке свича укажите snmp конфиг DGS1100 (вероятно, вам придется его добавить в выпадающий список)

Добавим какой-нибудь mib в список отображаемых данных

$c->Object('sysContact',
    oid  => '1.3.6.1.2.1.1.4.0',
    name => 'Тестовый параметр',
);
$c->Add_show_param('sysContact');

Здесь мы создали новый mib с кодом sysContact = '1.3.6.1.2.1.1.4.0' и с помощью Add_show_param добавили его в список отображаемых параметров.

Изменение отображаемой информации

Допустим, по snmp мы получаем какие-то значения в неудобном для восприятия виде. Например, ifAdminStatus возвращает 1 если порт включен, 2 - если выключен. Давайте заменим 1 на «включен», а 2 на «выключен». Хотя это уже сделано в стандартном конфиге, но мы для примера перезапишем:

$c->Object('ifAdminStatus',
    oid    => '1.3.6.1.2.1.2.2.1.7.',
    name   => 'Включен?',
    values => {
        1 => 'включен',
        2 => 'выключен',
        3 => 'тестируется',
    },
    css    => {
        2 => 'error',
    },
    set    => {
        1 => 'Включить',
        2 => 'Выключить',
    },
);

Будьте внимательны и не ошибитесь в скобочках и стрелочках.

Обратите внимание, что в mib мы добавили еще 2 параметра: css - будет выводить красным цветом (error) значение 2 (порт отключен), set - позволяет менять параметр из админки. Если параметра set не будет, mib будет доступен только для чтения.

Если же мы хотим произвести более сложные действия с отображаемыми данными, то можем ключ values указать на фрагмент кода:

$c->Object('xxxxxxxx',
    oid    => 'x.x.x.x.x.x.x.x.',
    name   => 'Мак-адрес',
    values => sub {
        my($value) = @_;
        $value =~ s/^0x//;
        return [ url->a($value, a => 'mac_info', mac => $value) ];
    }
);

В данном примере, при выводе информации по портам, в колонке «Мак-адрес» будет выведен мак-адрес без префикса 0x (0x001122334455 преобразуется в 001122334455). При этом он будет оформлен как ссылка на поиск информации о мак-адресе в NoDeny.

Пример 1

Вывод мак-адресов на портах свича:

$c->{cfg}{dot1dTpFdbPort}  = {
    oid  => '1.3.6.1.2.1.17.4.3.1.1.',
    name => 'Порт по маку',
};

$c->{cfg}{Show_ports} = [
    'dot1dTpFdbPort',
    'ifAdminStatus',
    'ifOperStatus',
    'ifSpeed',
    'ifInErrors',
    'ifAlias',
];