История от @slo_Oth

История от @slo_Oth

для канала: @devopsina


Ща в одном чатике речь за сети пошла. И я вспомнил свой, пожалуй, самый эпический факап.

Работал я тогда в интернет-провайдере. Абонентская база была небольшая, а технологии - допотопные. Чтоб вы понимали насколько неразвита была сеть: когда я туда только устроился, база абонентов и средств на счету велась в excel-файлике, который лежал в шаре на ПК Технического Директора. Когда руководство понимало, что в карманах стало пустовато, техдир открывал этот файлик, искал самых лютых неплательщиков, шел на BRAS и прям руками отрубал PPPoE сессии.

К тому времени как случилась эта история, уже был настроен человеческий(нет) мониторинг, появился биллинг и некоторая автоматика по отключениям. Даже была волшебная кнопка "Статус линии", позволяющая за 30 секунд узнать на каком именно свитче, базовой станции или абонентской AP произошла беда. Но чаще, дураком был абонент с вечно зависающим роутером. Можно даже говорить о том, что эта кнопка была мне нужна для того, чтобы аргументированно мордой абонов тыкать в "проблемы на их стороне". Но речь не о кнопке.

Естественно, ни о каких vlan-per-user, RADIUS и прочих радостях провайдерской жизни речи тогда быть не могло. Часть абонентов в PPPoE, часть - по dhcp в одном бродкасте. Проблемы встречались разные. Однажды у нас кончилась /24 сеть под dhcp. И я с широкой руки расширил ее аж до /16. Помимо этого абоненты с завидной регулярностью втыкали роутер в нашу сеть не тем концом, в результате чего соседи данного индивида вместо адресов из нашей сети начинали получать адреса очередного бл**ского тэпэлинка. От частых звонков по подобному поводу у меня слегка почесывалось в районе пятой точки. А, поскольку, скотина я ленивая, и постоянно почесывать жопу было обломно, я  ̶п̶р̶и̶д̶у̶м̶а̶л̶ спер из интернетов вундервафлю, которая решила бы проблему с левыми dhcp. 

Работало это так: скрипт при запуске отправлял dhcp-запрос в сеть. Можно было указать MAC-адреса, ответы с которых не учитывались, чтобы ненароком собственный сервер не уложить. Если скрипт получал ответ, он начинал дудосить данный MAC dhcp-запросами пока у паразитного сервера не кончатся IP-адреса и тот не перестанет выдавать новые lease-ы. Ну, забросил я это дело в крон на запуск каждый час и забыл о проблеме. Жопа чесаться перестала. Лепота.

Прошел месяц или даже больше. Звонит абонент. Пинги, говорит, удлинняются. Ну, я этого абонента своим "статусом линии" потыкал: все там кучеряво. Пакетики бегают, пинги привычной длины. Послал я его, короче. Не туда, куда вы подумали, а роутер перезагружать.

Через пару дней звонит тот же абонент. С той же проблемой. Говорит, перезагрузка роутера не помогает. Снова смотрю, снова все в порядке. Интернет мы раздавали по файфаю, поэтому сразу пошел-посмотрел не срет ли кто своим трафиком на наших частотах. Все норм. Сообщил человеку. Да и у него все вроде заработало. Сказал, что , может быть, роутер у него - говнище бракованное и ему б его поменять. Предложил, согласно политике компании, покупку и установку тплинка за 1699р.(при цене в магазине - 900). Абонент отказался.

Спустя неделю снова звонит. Сил, говорит, нет на трехзначные латенси в LA2 смотреть. Роутер он поменял своими силами. Я предположил, что проблема с серверами линейки и снова положил трубку. Лишь бы отъебался этот задрот. 

Через пару дней снова: "я с мобилы раздал, все заебись, а ваш инторнет не работает. Пинги длинные". Предложил ему выезд с диагностикой. Но политика такая: если проблему находим не на нашей стороне или проблемы вовсе нет - абон платит полтыщщи за выезд. Приехал. Ноутом в точку доступа воткнулся, пинги померил. Все збс. Содрал за выезд.

Прошло еще дня 3-4. Звонит. И как бы, невзначай, в процессе разговора говорит "А еще я заметил, что такая хренота происходит в период с 16 минут до 18 каждого часа". Внимательный читатель мог уже догадаться в чем дело. Но внимательный читатель только минуту назад прочитал про события месячной давности. А для меня-то тогда месяц прошел. Ладно, думаю, похуй. Я тя, ссука, на мониторинг поставлю. И ему так сказал. В форме повежливее. И поставил.

Спустя несколько дней звонит. Иду проверять мониторинг. Абон напоминает про периодичность проблемы. Иду смотреть. И правда. Каждый час с 16 до 18 минут примерно вырастает пинг. Абоненту сообщил, что проблема обнаружена, "ожидайте".

Полез глядеть откуда ноги растут. Прошерстил кучу графиков. А кто заббикс видел, тот в цирке не смеется. Тот вообще редко по-жизни смеется. Потому что знает какая ж это боль графики интерфейсов одного 24-портового свитча в заббиксе посмотреть и корреляции выявить. Просто напоминаю, что у одного порта есть ifInOctets, ifOutOctets, ifInUnicastPkts, ifOutUnicastPkts, еще по 2 метрики для бродкаста и мультикаста, Errors и Discards(тоже по 2: in/out). Итого, надо отсмотреть как минимум 12*24=288 графиков, чтобы навести себя на мысли об источнике аномалии. Более продвинутыми методами диагностики я тогда не обладал. 

В конечном итоге было обнаружено обилие broadcast трафика на всех портах корневого коммутатора. То, что можно было установить источник, просто найдя куда все это богатство стекается я узнал, как раз посмотрев графички на порту виновника, сразу после того, как тайна века была разгадана. А на момент поисков у меня был единственный способ: затаиться и ждать. Вооружился я тогда приблудой под названием Microsoft Network Monitor. Старое, максимально угребищное легаси. Но юзать wireshark с его обилием кнопочек и надписей для меня было как велосипедисту боингом управлять. Поэтому так.

В час Икс, минуту Гамма, начал я наблюдать на своем порту трафик Ипсилон. А именно, огромное количество бродкаст пакетов. И все - с разными MAC-ами. Я тогда инфобезом увлекался и сразу же подумал на происки злобных хацкеров со стороны конкурентов. Потому как практиковался я, в своем этом инфобезе, как раз на "соседской" сети. Несколько дней я ползал по своим серверам в поисках бэкдоров. Проблема была в том, что присутствие вредоноса я тогда мог замечать только 2 минуты каждый час.

Спустя еще неделю я нашел виновника. От момента первичного обращения прошло уже не менее месяца. Виновником был тот самый сервак, на который я воткнул в крон своего DHCP-террориста.

Объясняю что за херня на самом деле произошла. Если углубиться в тонкости работы DHCP, то, грубо говоря, клиент отправляет на бродкаст адрес сети пакет с содержимым вида "кто тут у вас главный?". И ждет пока кто-то из сети ответит "я адреса раздаю, чего хотел?". Пакеты, отправленные на бродкаст превращаются в кучу пакетов, отправленных на каждый из адресов, доступных для хостов в данной сети. Для /30 это будет 2 пакета, для /28 - 14, для /24 - 254. Поскольку я отвесил своим абонентам аж 16 подсеть - для меня это было 65534 пакета. К каждому возможному хосту по одному пакету. А, поскольку, сеть у нас была беспроводная, то, и без того паршиво работающий wifi, начинал работать совсем отвратительно. Благо, наши базовые станции были не настолько мощны чтобы отдать весь этот поток трафика. Через 2 минуты струя иссякала и все снова становилось нормально. До следующего запуска скрипта по крону.


Report Page