
Мы небольшой региональный интернет-провайдер. Недавно случился у нас инцидент.
Первый звоночек прозвенел, когда было зафиксировано резкое уменьшение нагрузки на внешнем интернет‑канале, сопровождавшееся записями в логах KERNEL PERF interrupt took too long, lowering на одном из серверов, обеспечивающих доступ в сеть Интернет. Расследование показало, что нагрузка вернулась к норме в течение 15 минут, и никаких последствий не было выявлено.
Последствия проявились через несколько часов, когда нагрузка упала уже значительно с одновременным увеличением пинга до всех узлов с внешней зоны Интернета. Оперативно принятые меры позволили устранить проблему, но не дали понимания полной картины происходящего. На всякий случай были остановлены некритичные ресурсоёмкие сервисы, чтобы снизить нагрузку.
Как вскоре выяснилось, это не помогло, и проблема опять проявилась в ещё больших объёмах. По результатам углубленного анализа исходных данных удалось выяснить несколько векторов возникновения проблемы, суть которых — неоптимальные настройки полисера. Что, однако вызывало некоторые сомнения - эта же конфигурация работала месяцами и не вызывала никаких проблем. Подозрения пали на динамическую часть конфигурации, содержащую десятки тысяч элементов. Разработали несколько вариантов оптимизации, но был принят самый радикальный - вообще отключить ACL и полисинг. Что и было тут же сделано, благо запаса пропускной способности вполне хватало, и все напряглись в тревожном ожидании. Счастья не случилось - канал опять просел, пинги рванули вверх выше Эвереста, посыпалась масса звонков от пользователей.
Тут сделаем лирическое отступление — абонент, прорвавшийся к нам через соц.сети, поведал что он в очереди 67-й (!), при том что у нас всего 20 входящих каналов! С этим надо будет разобраться позже.
При обновлении конфигурации полисера обратили внимание, что сброс таблиц nftables на какое-то время решает проблему, и казалось бы — успех уже близок. Понятно, что это какая-то программная проблема, осталось найти что именно. Стали анализировать все доступные логи, и обнаружили всплеск трафика на одном из DNS серверов. Включили реалтайм мониторинг, и несказанно удивились - десяток абонентов генерировал в сотни раз больше DNS запросов, чем все остальные абоненты, вместе взятые. Попахивало DDoS-атакой ботнета.
Попавшие под подозрение были немедленно отключены, на DNS сервере сброшен кеш (а то мало ли — может уже отравлен), полисер перезапущен. Загрузка канала пошла вверх, пинги на 8.8.8.8 стабилизировались на обычных 18.5 мс - вот оно счатье! Но недолго. Так как крайним на подозрении был DNS сервер, запилили в него ACL, ограничивающий сильно активных пользователей, флудящих запросами. Правда, пришлось ограничивать сильно.
И ведь помогло. Но теперь жаловались абоненты, попавшие под ограничение. С этим уже можно было работать. Дальнейший анализ не выявил каких-либо аномалий или признаков DDoS или действий ботнета. Нет, они конечно были, какой-то процент наших абонентов разводит у себя вирусы и состоит в ботнетах, не подозревая того, но всё в обычных ежедневных пределах. Проблему вызывало явно что-то другое.
Интернет внутри страны все это время работал без перебоев, платежи проходили, интернет-банкинг всех банков был доступен, местные новости и погода открывались без проблем.
Обратили внимание, что ограничение DNS снижает потребление канала в Интернет до значений менее 70% от потолка, и тогда проблема не проявляется. Забрезжил свет в конце тоннеля.
Вспомнили, что все началось с KERNEL PERF interrupt took too long в логах на одном из серверов. В нём стояли две сетевые карты Intel x710-DA4, что обеспечивало 80 Гбит/с пропускной способности. На одном из портов одной из карт значение размера кольцевого буфера отличалось от соседних, и явно было не то, что настроено изначально. Поправить размер кольцевого буфера не проблема, занимает 1 секунду, и при 4-кратном резервировании (помним, Intel x710-DA4 имеет 4 порта) не приводит к разрыву соединения. Но в данном конкретном случае простейшая операция намертво завесила сервер! Бросок в серверную, кнопка reset — сервер ожил. Пинги на 8.8.8.8 в пределах нормы, загрузка канала медленно растет, уже превысила 75% - кол-центр молчит, жалоб нет. После 80% следить перестали - и так вcё было понятно.
Послесловие.
После очень удачной линейки на чипе X520 очень уважаемая компания Intel выпустила новую модель — X710. Там всё было лучше — PCIE v3 вместо v2 на х520-х, больше аппаратных очередей, меньше энергопотребление.
Но по итогу вышла крайне ненадежная вещь, и никакими обновлениями драйверов в Intel за столько лет ничего сделать так и не смогли. Просто похоронили x710, выпустив на замену линейку E810.
Комментарии (11)

MEGA_Nexus
27.05.2026 19:34Но по итогу вышла крайне ненадежная вещь, и никакими обновлениями драйверов в Intel за столько лет ничего сделать так и не смогли.
Но ведь вы сами написали, что проблема не в карте, а в значении размера кольцевого буфера.
На одном из портов одной из карт значение размера кольцевого буфера отличалось от соседних, и явно было не то, что настроено изначально.
Касательно же самой карты.
Просто похоронили x710, выпустив на замену линейку E810.
Есть 3 модели этой карты.
Ethernet Controller X710-TM4
Ethernet Controller X710-AT2
Ethernet Controller X710-BM2
Launch Date X710-BM2 - Q4’15, а двух других - Q3’19.
А Launch Date для E810 - Q3'20, т.е. всё выглядит как плановая смена линейки. Предыдущая линейка карт X710 отработала 5 лет и имела max speed 10 Gb\s, а на смену ей пришла линейка E810, где max speed 100 Gb\s, т.е. в 10 раз быстрее.
5 лет вполне нормальный маркетинговый жизненный цикл для линейки сетевых карт.

verwolfian Автор
27.05.2026 19:34Но ведь вы сами написали, что проблема не в карте, а в значении размера кольцевого буфера.
Нет. Проблема именно в карте. Значение буфера слетело в ходе работы, никто его не менял. При попытке вернуть на нужное значение - система стала колом.
Как впоследствии выяснилось, такие глюки на x710 ловили и раньше, но было не так критично.
Что касается x520, то они на рынке уже 15 лет, и к ним как-то нареканий нет, в отличие от x710

Gansterito
27.05.2026 19:34А что за ПО на серверах? Голый Linux или какой-то специфичный linux-based дистрибутив? Функционал на серверах BRAS или что-то большее?

verwolfian Автор
27.05.2026 19:34Голый линукс. Debian. bird, nftables.
Функционал border+NAT+BRAS, другой функционал на других серверах.
naim
27.05.2026 19:34а сколько pps в пике ? и nftables насколько производительней NAT делает чем классический iptables masquerade ?

verwolfian Автор
27.05.2026 19:34а сколько pps в пике ?
5M
и nftables насколько производительней NAT делает чем классический iptables masquerade ?
Не знаю.
У нас давно CG-NAT используется, поэтому специально не меряли.
Те кто мерял - говорят, nftables выигрывает. Причем сильно.
naim
27.05.2026 19:34Спасибо огромное . А что то типа libreqos www.opennet.ru/opennews/art.shtml?num=65075 смотрели или не актуально ?

verwolfian Автор
27.05.2026 19:34Смотрели, но не ставили.
CAKE и fq_codel можно и в голом линуксе прописать (прописывали, на первый взгляд ничего хорошего). Ну и питон с JS на бордере так себе... (Наверное :) )
А красивые картинки на таких скоростях неактуальны. Даже nfdump пришлось выкинуть.
JDJ
то есть вы региональный провайдер, у вас канал 80Гбит+, который могли положить десяток ваших абонентов, вы же так рассуждали в моменте?
verwolfian Автор
Не совсем понял вашу мысль.
В статье упоминается, что ложился один из серверов, а не канал упирался в потолок.
Так-то и один абонент может сложить канал, если у него есть T-Rex (но у нас не сложит :) )
JDJ
я понял, вы нагрузку на железо называете, сложить канал и всплеск трафика, ясно.
к вашему посту отношения не имеет, просто вспомнил как в столичном провайдере инцидент решали два топ инженера, сидящие друг перед другом буквально, столи сдвинуты были и на одной и той же циске, одновременно меняли её настройки. минут 15 кряхтели пока тот что помоложе не увидел в логах что циску настраивает не только он. орали долго друг на друга xD