суббота, 29 ноября 2014 г.

Управление службами Web и Telnet по SNMP

По SNMP можно включать/выключать Web/Telnet-серверы.

DES-3028

.1.3.6.1.4.1.171.11.63.6.2.1.2.27.1.0 swL2DevCtrlWebState (i) - Состояние Web-службы (1 - other, 2 - disabled, 3 - enabled) [r/w]
.1.3.6.1.4.1.171.11.63.6.2.1.2.28.1.0 swL2DevCtrlTelnetState (i) - Состояние Telnet-службы (1 - other, 2 - disabled, 3 - enabled) [r/w]


DES-3200-28/A1/B1

.1.3.6.1.4.1.171.11.113.1.3.2.1.2.30.1.0 swL2DevCtrlWebState (i) - Состояние Web-службы (1 - other, 2 - disabled, 3 - enabled) [r/w]
У этой модели мне не удалось найти OID для Telnet-службы. Быть может этот функционал не реализован.


DES-3200-28/C1

.1.3.6.1.4.1.171.11.113.5.1.2.1.2.14.1.0 swL2DevCtrlTelnetState (i) - Состояние Telnet-службы (1 - other, 2 - disabled, 3 - enabled) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.1.2.14.2.0 swL2DevCtrlTelnetTcpPort (i) - Telnet-порт [r/w]

.1.3.6.1.4.1.171.11.113.5.1.2.1.2.17.1.0 swL2DevCtrlWebState (i) - Состояние Web-службы (1 - enabled, 2 - disabled) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.1.2.17.2.0 swL2DevCtrlWebTcpPort (i) - Web-порт [r/w]
У ревизии C1 появилась возможность менять порты для служб Web и Telnet. Обратите внимание, если во всех остальных случаях включение сервиса - это (3), то в случае ревизии C1 и Web, это уже (1). Чем руководствовались разработчики - загадка. При изменении порта перезапуск соответствующей службы не требуется.

Выключить Web-сервер на DES-3200-28/C1:

snmpset -v2c -c private 10.90.90.90 .1.3.6.1.4.1.171.11.113.5.1.2.1.2.17.1.0 i 1


четверг, 27 ноября 2014 г.

Некоторые нюансы DES-3028 при построении ACL

Модель DES-3028 давно снята с производства, но все еще широко эксплуатируется в ISP. И есть у этой модели некоторые особенности, которые нужно учитывать при создании ACL.

Кадры внутри коммутатора могут иметь метку 802.1Q (tag), а могут и не иметь.


Пример нетегированного кадра:

70 71 bc 0c  39 b7 68 b5  99 8f df 07  08 06 00 01
08 00 06 04  00 02 68 b5  99 8f df 07  0a 89 82 30
70 71 bc 0c  39 b7 0a 89  82 38 00 00  00 00 00 00
00 00 00 00  00 00 00 00  00 00 00 00            

Пример этого же кадра, но с тегом:

70 71 bc 0c  39 b7 68 b5  99 8f df 07  xx xx xx xx
08 06 00 01  08 00 06 04  00 02 68 b5  99 8f df 07
0a 89 82 30  70 71 bc 0c  39 b7 0a 89  82 38 00 00
00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00

Во втором случае видно, что все данные, кроме DST MAC и SRC MAC сместились на 4 байта - именно столько занимает описание тега в стандарте 802.1Q. Это надо помнить, когда мы создаем ACL правила на основе содержимого кадра (Packet Content Filtering).

Пример правила блокировки всех ARP для untagged-фреймов:

create access_profile packet_content_mask offset_0-15 0x0 0x0 0x0 0xffff0000 profile_id 6
config access_profile profile_id 6 add access_id auto_assign packet_content offset 12 0x08060000 port 11 deny


Все ARP в тегированных кадрах будут пропущены, т.к. EtherType в таких кадрах будет находиться на 4 байта правее.


Пример правила блокировки всех ARP для tagged-фреймов:

create access_profile packet_content_mask offset_16-31 0xffff0000 0x0 0x0 0x0 profile_id 6
config access_profile profile_id 6 add access_id auto_assign packet_content offset 16 0x08060000 port 11 deny


Все ARP в нетегированных кадрах будут пропущены, т.к. EtherType в таких кадрах будет находиться на 4 байта левее.

Эта особенность может создать серьезные неудобства при проектировании и тестировании правил, но ее же можно попытаться использовать с пользой. Обычно в ISP весь трафик, кроме идущего непосредственно к абоненту, передается тегированным. Таким образом, по отсутствию тега можно отличать абонентский трафик от всего остального. Это позволяет "навешивать" правила, блокирующие нежелательный абонентский трафик, на все порты, не опасаясь при этом за остальной трафик, и одновременно экономить ресурсы ACL (см. следующий пункт).

Важно: При тестировании имейте ввиду, что ОС Windows по умолчанию снимает метку 802.1Q со всех кадров. Настроить иное поведение очень непросто. Это означает, что все кадры, которые вы видите в Wireshark, гарантированно будут нетегированными.



На один порт всегда расходуется одно правило. Соответственно, на диапазон портов расходуется столько правил, сколько в него попало портов. Исключение - весь диапазон. В этом случае расходуется всего одно правило.


Например, если мы создаем 5 правил и назначаем их на абонентские порты (1-24), то мы израсходуем 24*5=120 правил. В запасе у нас останется 256-120=136 правил. Но если мы назначим эти же правила на все порты (1-28), то израсходуем всего лишь 5*1=5 правил и еще 251 останется в запасе. Чтобы иметь возможность экономить правила таким образом, может потребоваться переработать большинство правил на PCF, т.к. в этом случае появится возможность отличать абонентский трафик от прочего по наличию тега.



Информация от D-Link по поводу ACL и DSCP

Коммутатор может менять поле DSCP только на основании значения этого же поля DSCP. В критериях ACL не может быть никаких других параметров, в том числе и UDP портов.
Если трафик приходит без метки DSCP, то на DES-3028 можно только смеппить пакет в нужную очередь, а менять поле DSCP придется уже на вышестоящем коммутаторе (естественно при наличии такой возможности).

Этот момент мной не тестировался, но информация совпадает с темой данной заметки, потому размещаю ее здесь.

вторник, 25 ноября 2014 г.

Управление функционалом LoopBack Detect по SNMP

Про LBD мы уже немного поговорили вот здесь. Теперь научимся управлять этим функционалом по SNMP. Вся эта информация есть в MIB, здесь мы просто собираем ее в одном месте для удобства.

DES-3028

.1.3.6.1.4.1.171.11.63.6.2.21.1.1.0 swL2LoopDetectAdminState (i) - Глобальный статус LBD (1 - enabled, 2 - disabled) [r/w]
.1.3.6.1.4.1.171.11.63.6.2.21.1.2.0 swL2LoopDetectInterval (i) - Интервал обнаружения в секундах [r/w]
.1.3.6.1.4.1.171.11.63.6.2.21.1.3.0 swL2LoopDetectRecoverTime (i) - Время восстановления в секундах (0 - не восстанавливать порт) [r/w]
.1.3.6.1.4.1.171.11.63.6.2.21.1.5.0 swL2LoopDetectTrapMode (i) - Режим отправки trap (1 - none, 2 - loop_detected, 3 - loop_cleared, 4 - both) [r/w]

.1.3.6.1.4.1.171.11.63.6.2.21.2.1.1.2 swL2LoopDetectPortState (i) - Статус LBD на порту (1 - enabled, 2 - disabled) [r/w]
.1.3.6.1.4.1.171.11.63.6.2.21.2.1.1.4 swL2LoopDetectPortLoopStatus (i) - Статус порта (1 - normal, 2- loop, 3 - error) [r/o]

В серии DES-3200 появляются параметры swL2LoopDetectMode и swL2LoopDetectPortLoopVLAN. В остальном все идентично, поэтому описание дублировать не буду. Числовые значения OID во всех этих моделях отличаются.

DES-3200-28/A1/B1

.1.3.6.1.4.1.171.11.113.1.3.2.21.1.1.0 swL2LoopDetectAdminState
.1.3.6.1.4.1.171.11.113.1.3.2.21.1.2.0 swL2LoopDetectInterval
.1.3.6.1.4.1.171.11.113.1.3.2.21.1.3.0 swL2LoopDetectRecoverTime
.1.3.6.1.4.1.171.11.113.1.3.2.21.1.4.0 swL2LoopDetectMode (i) - Режим обнаружения (1 - vlan-based, 2 - port-based) [r/w]
.1.3.6.1.4.1.171.11.113.1.3.2.21.1.5.0 swL2LoopDetectTrapMode

.1.3.6.1.4.1.171.11.113.1.3.2.21.2.1.1.2 swL2LoopDetectPortState
.1.3.6.1.4.1.171.11.113.1.3.2.21.2.1.1.3 swL2LoopDetectPortLoopVLAN (s) - Список vlan, где обнаружена петля [r/o]
.1.3.6.1.4.1.171.11.113.1.3.2.21.2.1.1.4 swL2LoopDetectPortLoopStatus

DES-3200-28/C1

.1.3.6.1.4.1.171.11.113.5.1.2.18.1.1.0 swL2LoopDetectAdminState (i) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.18.1.2.0 swL2LoopDetectInterval (i) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.18.1.3.0 swL2LoopDetectRecoverTime (i) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.18.1.4.0 swL2LoopDetectMode (i) - Режим обнаружения (1 - vlan-based, 2 - port-based) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.18.1.5.0 swL2LoopDetectTrapMode (i)[r/w]

.1.3.6.1.4.1.171.11.113.5.1.2.18.2.1.1.2 swL2LoopDetectPortState (i) [r/w]
.1.3.6.1.4.1.171.11.113.5.1.2.18.2.1.1.3 swL2LoopDetectPortLoopVLAN (s) - Список vlan, где обнаружена петля [r/o]
.1.3.6.1.4.1.171.11.113.5.1.2.18.2.1.1.4 swL2LoopDetectPortLoopStatus (i) [r/o]

Включить LBD глобально и на 20-м порту:

snmpset -v2c -c private 10.90.90.90 .1.3.6.1.4.1.171.11.63.6.2.21.1.1.0 i 1 .1.3.6.1.4.1.171.11.63.6.2.21.2.1.1.2.20 i 1

воскресенье, 23 ноября 2014 г.

Получение состояний светодиодов передней панели DES-3200-28/C1 по SNMP

Модель DES-3200-28/C1 позволяет получить по SNMP состояние светодиодов передней панели коммутатора. Это довольно полезная возможность, удобная еще и тем, что много параметров возвращается в одном запросе.

Вот этот OID, доступный только для чтения:
.1.3.6.1.4.1.171.11.113.5.1.2.1.1.4.0 swDevInfoFrontPanelLedStatus

Возвращаемое значение содержит набор описаний LED-индикаторов (светодиодов).

Первые два байта описывают состояние PoE:
01 02 = PoE Mode
02 01 = Normal Mode
00 00 = Non-PoE Device

Третий байт указывает на состояние индикатора питания:
0x01 : Power Off
0x02 : Power On

Четвертый байт соответствует индикатору консоли:
0x01 = system start up
0x02 = a user is login through console
0x03 = no user is login through console

Пятый байт указывает на состояние RPS (Redundancy Power Supply).
0x01 = Internal Power working
0x02 = External Power working

Шестой байт соответствует индикатору состояния FAN:
0x01 = Fan LED Off
0x02 = Fan LED blinking

Следующие байты описывают состояние логических портов. Каждые два байта соответствуют одному порту.
Первый байт указывает на состояние светодиода, сигнализирующего об активности линка (Link/Activity LED), а второй соответствует индикатору скорости (Speed LED).

Расшифровка значений для Link/Activity LED:
Левая часть левого байта используется для определения состояния "мигающий светодиод/горящий светодиод"
8 = The LED blinks.

Правая часть левого байта используется для описания состояния линка:
1 = link fail.
2 = link pass.

Расшифровка значения для Speed LED:

Нормальный режим:
Левая часть правого байта указывает на тип подключения:
0 = copper link up (if link fail will show 0)
1 = fibber link up

Правая часть правого байта указывает на скорость подключения:
01 = 10Mbps.
02 = 100Mbps.
03 = 1000Mbps.
04 = 10000Mbps.

Режим POE:
01 = no PD connected.
02 = no deliver power to PD.
03 = deliver power to PD.

Разберем ситуацию на примере. Отправим команду:

snmpget -v2c -c public 10.90.90.90 .1.3.6.1.4.1.171.11.113.5.1.2.1.1.4.0


Коммутатор вернул значение:
00 00 02 01 01 02 82 02 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 82 13 01 01 01 01 01 01

00 00 - Указывает на то, что мы использует коммутатор без поддержки PoE.
02 - Питание включено (даже не спрашивайте, в каких случаях коммутатор вернет 01). :)
01 - Система стартовала.
01 - Работа от внутреннего источника питания. Наверное, имеется ввиду встроенный БП.
02 - Светодиод вентилятора моргает. (Может он просто расстроен от того, что на данной модели нет вентиляторов).
82 02 - Светодиод порта №1 мигает (8), линк поднят (2). Линк медный (0), скорость 100 Мбит/с (2).
01 01 - Светодиод портов №2-24,26-28 не мигает (0), линк не поднят (1). Тип подключения не определен (0, в сочетании с link fail), скорость 0 Мбит/с (1 указывает на 10 Мбит/сек, но раз линк не поднят, то будем считать ее равной 0).
...
...
82 13 - Светодиод порта №25 мигает (8), линк поднят (2). Линк оптический (1), скорость 1 Гбит/с (3).

пятница, 21 ноября 2014 г.

Планирование перезагрузки DES-3200-28/C1 по SNMP

В модели DES-3200-28/C1, начиная с прошивки 4.37.B006, а также в модели DES-3200-28/A1/B1, начиная с прошивки 1.84.B012, появилась возможность перезагрузки по расписанию. Можно запланировать перезагрузку через некоторое время, а можно указать конкретное время и дату. Через консоль это реализуется при помощи команды "config reboot schedule in|at". Здесь мы попробуем разобраться, как управлять данным функционалом по SNMP. Судя по всему, в MIB'ах информация еще не обновлена, поэтому разбираться пришлось методом научного тыка. Удалось найти OID для DES-3200-28/C1, поэтому именно с этой моделью сегодня и будем работать.

Итак, вот этот OID:

1.3.6.1.4.1.171.12.1.2.32


Имени у него пока нет. Но нам хватит и этого. :) Если перезагрузка не запланирована, то по этому адресу мы ничего не найдем. Если запланирована, получим нечто вроде такого:
.1.3.6.1.4.1.171.12.1.2.32.1.2.1 = INTEGER: 60
.1.3.6.1.4.1.171.12.1.2.32.1.3.1 = Hex-STRING: 13 1B
.1.3.6.1.4.1.171.12.1.2.32.1.4.1 = Hex-STRING: 15 0B 07 DE
.1.3.6.1.4.1.171.12.1.2.32.1.5.1 = INTEGER: 2
.1.3.6.1.4.1.171.12.1.2.32.1.10.1 = INTEGER: 1

Расшифровка значений:
60 - Количество минут, которые должны пройти до перезагрузки. Это число уменьшается со временем, но не сразу и полностью полагаться на него нельзя.
13 1B - Время, на которое запланирована перезагрузка. В данном случае 19:27.
15 0B 07 DE - Дата перезагрузки. В примере 21.11.2014.
2 - Флаг, указывающий, выполнять (1) ли сохранение конфигурации перед перезагрузкой или нет (2). Можно изменить на "ДА" (1) один раз. Вернуть на "НЕТ" (2) уже не получится.
1 - Неизвестный параметр.

Запланировать перезагрузку через 60 минут:

snmpset -v2c -c private 10.90.90.90 1.3.6.1.4.1.171.12.1.2.32.1.2.1 i 60

Примечание: Максимальное значение 1 месяц, т.е. 24*60*30=43200 минут.

Сохранить конфигурацию перед перезагрузкой:

snmpset -v2c -c private 10.90.90.90 1.3.6.1.4.1.171.12.1.2.32.1.5.1 i 1


Обратите внимание, что когда мы планируем перезагрузку через некоторый интервал, этот интервал будет обновлен на первоначальное значение каждый раз, когда мы что-то правим в настройках. Например, в 10:00 мы запланировали перезагрузку через 60 минут, а спустя 20 минут спохватились и сказали коммутатору, что ему надо будет еще сохранить конфигурацию. В этом случае время снова сдвинется на 60 минут и перезагрузка будет запланирована уже на 11:20. Если же мы планируем перезагрузку на точное время, то оно в дальнейшем не меняется.

Запланировать перезагрузку на 05:55 22.11.2014 с сохранением конфигурации:

snmpset -v2c -c private 10.90.90.90 1.3.6.1.4.1.171.12.1.2.32.1.3.1 x 0537 1.3.6.1.4.1.171.12.1.2.32.1.4.1 x 160b07de 1.3.6.1.4.1.171.12.1.2.32.1.5.1 i 1


Проверяем наши ключи:
.1.3.6.1.4.1.171.12.1.2.32.1.2.1 = INTEGER: 669
.1.3.6.1.4.1.171.12.1.2.32.1.3.1 = Hex-STRING: 05 37
.1.3.6.1.4.1.171.12.1.2.32.1.4.1 = Hex-STRING: 16 0B 07 DE
.1.3.6.1.4.1.171.12.1.2.32.1.5.1 = INTEGER: 1
.1.3.6.1.4.1.171.12.1.2.32.1.10.1 = INTEGER: 1

Смотрим чт получилось на самом коммутаторе:
 Reboot Schedule Settings
 ---------------------------
 Reboot schedule at 22 Nov 2014 05:55:00 (in 669 minutes)
 Save before reboot: Yes


Как видно, все сходится.

среда, 19 ноября 2014 г.

Перезагрузка коммутаторов по SNMP

Несправедливо обошли вниманием полезный фунционал перезагрузки коммутаторов по SNMP. Исправляем этот недочет. :)

Модель DES-3200-28/C1, как обычно, стоит особняком, поэтому сначала о DES-3028 и DES-3200-28/A1/B1.

Перезагрузить их можно при помощи общего OID:
.1.3.6.1.4.1.171.12.1.2.3.0 agentSystemReset (i) - warm-start (3)

А можно при помощи специфического для DES-3028:
.1.3.6.1.4.1.171.11.63.6.2.1.2.1.0 swL2DevCtrlSystemReboot (i)

И для DES-3200-28/A1/B1:
.1.3.6.1.4.1.171.11.113.1.3.2.1.2.1.0 swL2DevCtrlSystemReboot (i)

Записываемые значения: other(1), reboot(2), save-config-and-reboot(3), reboot-and-load-factory-default-config(4)
Думаю, по названию все понятно.

Пример перезагрузки DES-3028 и DES-3200-28/A1/B1 по общему OID:

snmpset -v2c -c private 10.90.90.90 .1.3.6.1.4.1.171.12.1.2.3.0 i 3


Пример перезагрузки модели DES-3028 с сохранением конфигурации (save-config-and-reboot - 3):

snmpset -v2c -c private 10.90.90.90 .1.3.6.1.4.1.171.11.63.6.2.1.2.1.0 i 3


Пример перезагрузки модели DES-3200-28 с сохранением конфигурации (save-config-and-reboot - 3):

snmpset -v2c -c private 10.90.90.90 .1.3.6.1.4.1.171.11.113.1.3.2.1.2.1.0 i 3

 

Теперь перейдем к DES-3200-28/C1. Несмотря на то, что agentSystemReset присутствует в MIB, воспользоваться им нельзя. Видимо это задел на будущее либо же обычный недосмотр. Спасает то, что в дополнение там появляется agentReboot:

.1.3.6.1.4.1.171.12.1.2.19.0 agentReboot (i) - start (2)

То есть в старый моделях ребут назывался резетом, а в новой называется ребутом. Но и резет при этом есть, только там уже будет не ребут, а, собственно, резет, т.е. сброс. Можно запутаться, поэтому перед тем, как что-то делать, не мешает лишний раз все проверить.

Пример перезагрузки DES-3200-28/C1:

snmpset -v2c -c private 10.90.90.90 1.3.6.1.4.1.171.12.1.2.19.0 i 2

понедельник, 17 ноября 2014 г.