klink0v (klink0v) wrote,
klink0v
klink0v

Очередной камень в огород микротиков

В процессе вялого ковыряния микротика, который (пока ещё) служит роутером у меня дома, обнаружил у него ещё один (очередной) неприятный баг.

Как выяснилось, у него унутри имеется ажно две разных ARP-таблицы. Одна - системная, нужна для целей маршрутизации. Это которая сидит в "/ip arp print". А вторая, более низкого уровня, используется его аппаратным свитчом в целях разруливания Ethernet-кадров по физическим портам. Её можно посмотреть командой "/interface bridge host print".

Дык вот, несмотря на кажущуюся похожесть, это две абсолютно разные таблицы. Которые никоим образом не зависят друг от друга и не пересекаются. И наличие/остутствие/обновление какого-либо MAC-адреса в одной из них в общем случае никоим образом не затрагивает другую.

А полез туда ковыряться я вот почему. Периодически я стал замечать, что время от времени мой 951G-2HnD превращается в тупой хаб и начинает слать все пакеты во все порты. Скажем, если я что-то качаю из торрентов, то входящий трафик я почему-то могу видеть на любом из своих домашних устройств, хотя по-хорошему, он (трафик) должен доставляться прицельно только лишь на мой основной комп и больше никуда, ибо unicast.

В процессе разборок оказалось, что вышеупомянутая ARP-таблица свитча имеет дефолтное время устаревания записи 5 минут. Но это было бы совершенно не смертельно, если бы она при этом регулряно обновлялась. Только вот, увы. Счетчик "протухания" записи сбрасывается только тогда, когда по сети проходит какой-нибудь ARP-пакет. Но не знаю как винда, а линукс вообще не утруждает себя рассылкой таких пакетов. И я его даже могу понять. Действительно, если туда-сюда постоянно летает суровый трафик с payload-ом, зачем лишний раз размениваться на ARP-запросы, когда в общем-то и без них всё прекрасно ясно: что, откуда и куда. А вот микротик, мало того что не обновляет эту таблицу сам на основании данных из транзитных пакетов/кадров, дык ещё и не генерирует никаких ARP-запросов. Типа, "не знаю, и знать не хочу".

В итоге получается, что 5 минут истекают, ARP-запись в таблице свитча протухает, как следствие удаляется, и свитч превращается в банальный хаб. До тех пор, пока по сети не пролетит какой-нибудь случайный ARP-пакет и тем самым не исправит ситуацию. Где логика? Где справедливость?

Как Workaround, я увеличил время устаревания ARP-записей с 5 до 15 минут ("/interface bridge set bridge-local ageing-time=15m"). Это помогло, но исключительно за счёт повышения вероятности "пролёта" расово правильного ARP-пакета в течение данного срока. А так, имеет место какой-то фундаментальный баг в прошивке. Но какой, понять невозможно, ибо она закрытая. Меня также терзают смутные сомнения, что где-то в этой же стороне нужно искать причину "протекания" VLAN-ов, с которым я столкнулся в начале этого лета.

С другой стороны, у меня в production уже примерно с полгода трудятся несколько штук маршрутизаторов на базе OpenWRT. Каких-то серьёзных косяков и/или зависаний пока что замечено не было. Мало того, что решение вышло в разы дешевле, дык ещё и по функционалу местами сильно козырнее. Так что я теперь однозначно перебираюсь на OpenWRT.

Tags: mikrotik, железо
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments