Как отравить кошку? Детективная история со счастливым концом

Статья подготовлена для Habrahabr

Устраивайся поудобнее, мой читатель. Сегодня я расскажу тебе увлекательную историю.

Все началось недавно. Свежеустановленный (меньше месяца) роутер Cisco вдруг на всех обиделся и ушел в себя. Настолько ушел, что на внешние раздражители реагировать перестал совершенно, трафик через себя пропускать посчитал делом неблагодарным и недостойным, и вообще закуклился по самое не могу.

Первая мысль после перезагрузки роутера: какой-то шутник решил запустить очередную убер-программу. Ну, или чей-нибудь ноут сошел с ума – тоже бывает. Однако пристальное изучение трафика (netflow, прослушка tcpdump-ом на предмет хитрого бродкаста) ничего не дало. Более того, шторм-контроль на клиентских портах не срабатывал.

А тем временем, роутер, проработавший после ребута едва ли пять минут, снова завис. Прошу заметить, в самый разгар рабочего дня. “К счастью”, телефония шла через этот же роутер, и только это спасло нас от воплей огорченных коллег:).

Хм… – сказали суровые сибирские мужики.

Выключаем всех клиентов, включаем по одному – вроде, тихо. Начинаем допрос с пристрастием: кто, что, куда… в ответ тишина. Не были, не знаем. Починяли примус. Читали почту, работали.

И можно было бы списать на случайность, если бы такая проблема не повторилась еще несколько раз в других филиалах, где недавно меняли роутеры, в разное время, с разной нагрузкой…

Естественно, как только стало понятно, что проблема не единичная, был открыт тикет в Cisco TAC, началась стандартная история со сменой версий IOS, предложением поменять маршрутизатор, проверкой настроек и тыды и тыпы.

Параллельно с общением с TAC собрали стенд и попытались воспроизвести ситуацию “в лабораторных условиях”. После анализа тонны логов прокси выяснили, что зависание происходит при открытии почтового ящика на outlook.com.

Черт возьми, Холмс, но как?!

На стенде проблема воспроизведена на 100%. При входе в учетную запись outlook.com роутер умирает, не издав ни звука. Крашдампов роутер после себя не оставляет, даже если попросить, запущенный watchdog ситуацию не спасает – роутер зависает наглухо и спасает его только холодный рестарт по питанию. Начинаем по одной выключать активированные настройки и выясняем, что если отключить инспекцию трафика, все приходит в норму. Меняем несколько версий IOS – поведение идентичное, даже с “рекомендованной для этой модели специалистами TAC”. Начинаем копать глубже – оказывается, виноват nbar (Network Based Application Recognition) – модуль, позволяющий распознавать тип трафика (voice, video, data… etc) для правильной его окраски и применения различных политик QoS.

Инженер TAC, который вел наш тикет, от таких новостей был несколько в шоке, но снял всю нужную информацию и передал программистам. Ответ их был шикарен:

“it is rather a general behavior of ISR routers in case of loops at the interrupt level.
If the interrupt service routine in the router is suspended or stalled it might cause the router to hang
and the console to become unresponsive, requiring a manual reload to restore service.
The router can be configured with the command ‘scheduler isr-watchdog’ (as shown in example below )
in order to activate a mechanism for detecting such cases.
It will also trigger a router reload if such an event is identified.”

Т.е. все в порядке, так и должно быть. Гордые кошки умирают молча.

Также инженер TAC ответил, что в buglist мы этой проблемы не найдем, т.к. она internal, и вообще не фиг лишний раз будоражить общественность, а лучше просто молча обновить protocol pack (набор сигнатур и правил для этого самого nbar). Оно, конечно, может, и правильно, но, с другой стороны, отсутствие этой проблемы в known bugs превращает поиск решения, по сути, в гадание на кофейной гуще и отключение всех функций роутера поочередно (а учитывая стоимость железки, то подходящей лабы под рукой вполне может и не оказаться).
После обновления protocol pack все пришло в норму, и вот уже месяц (тьфу-тьфу-тьфу) никаких проблем с маршрутизаторами нет.

Вот такая пятничная история. Так что если ты используешь nbar и твоем хозяйстве есть вышеупомянутые роутеры (ISR G2, если что), то крайне советую обновить protocol pack, пока твои пользователи не решили как-нибудь открыть какой-нибудь “интересный” сайт.

Leave a Reply