В какой-то момент возникля необходимость запушить в такую коробочку 96-97 тыс. префиксов. Были сонения, что оно после это выйдет из комы, так как на обработку такого количества префиксов даже x86 тачка тратила пару минут, но, правда при загрузке из конфига и это были статические маршруты. Префиксы аггрегировали порядка 11млн с небольшим адресов, кстати. Так вот по bgp микрот эти все анансы принял, задумался минуты на 3 и перезагрузился.

Ну, думаю, ладно; переконфигурял bird, сказал ему не слать этот список в сторону микроты. Коробочка тем временем уже успела принять несколько пачек анансов и думала над обрабаткой, а тут ей приходит, что, мол, дропни всё это. И эта операция тож продолжалась несколько часов. Я просто пошёл спать, а на утро микрот уже нормалтно работал :)

Задал вопрос про префиксы, про потребление памяти каждым роутом на freenode #mikrotik , это неофициальный канал микротика, там мне присоветывали для bgp пользовать, например, ccr1036 за 995 бачей. Что к моему вопросу отношения не имеет.

Ну, чтоже, запихнуть префиксы в роутер хочется, а сколько он их может вместить? Возникло предположение, что процесс впёрся в память, а её там не особо много 64 мега всего и 39.1 свободно, плюс что-то себе обычно резервирует ядро, это обычно 4-5 мегабайт на таком количестве памяти.

Эксперимент. Засунуть 1000 роутов и посмотреть сколько памяти уйдёт. Ушло ~400 кило. Следующей итерацией была 10000 маршрутов, потратилось 3,9 мега. То есть на каждую тыщу префиксов уходит 400кб памяти. Иными словами роутер может принять суммарно от всех анонсеров примерно 70-75 тыщ префиксов. А у нас чуть меньше 97 тыщ. Перебор, однако.

Что делать? Ответ простой - по условиям задачи можно взять чуть более ёмкие префиксы, при этом часть маршрутов до некоторых адресов станет неоптимальными, но в принципе это допустимо, так как даже в этом случае связность с остальными улами в составе префиксов как минимум появится, чего мы и добиваемся. Соответственно, укрупняя префиксы по средством включения одних подсетей в другие, но с более крупной маской, мы сокращаем общее число префиксов в списке. Приятель присоветовал скриптец на go, который как раз так и делает. В результате всех операций я получил список из порядка 17тыщ префиксов + примешалось около 7% посторонних адресов от общего количества из 11 млн адресов (чуть меньше 800 тыщ штук). Результат допустимый в условиях поставленной задачи.

Про тонкие моменты с bgp-анонсами я, возможно, напишу в другой раз.

Next Post