10 октября 2012 г.

Ай да mikrotik, а да сукин сын.

Ну ребята, таки mikrotik меня удивил. Нда, я давно так не удивлялся. Такое ощущение, как будто съел кучу васаби и тебе сразу прочистило все дыхательные пути.

Итак: есть как бы роутер на микротик, у него два интерфейса:
  1. eth1 192.168.0.100
  2. eth2 192.168.1.100
Маршрут по умолчанию через eth1 на другой роутер.
И микротик и роутер двумя интерфейсами подключены к обеим сетям: 192.168.0.0/24 и 192.168.1.0/24
Причем у микротика eth2 - это было временное подключение, только на стадии первичной конфигурации, так как рабочая станция с которой он первоначально конфигурился была в сети 1.0.

А теперь вопрос: если на микротике из интерфейса eth2 вытащить шнурок, сможете ли вы с машины, находящейся в сети 192.168.1.0/24 попасть на 192.168.0.100?
Или немного другой вариант вопроса: можете ли вы, находясь на микротике попасть в сетку 192.168.1.0/24 согласно его маршрута по умолчанию?

Ответ простой - нет!

Как оказалось, у RouterOS есть забавная фишка. У нее маршруты к сетям, подключенным к интерфейсу, при отключении линка из таблицы маршрутизации автоматически не удаляются! О как! В Linux удаляются (кстати все маршруты проходящие через этот интерфейс), в Windows удаляются, а в RouterOS нет!

И вот, три дня я нем мог понять, почему с упорством маньяка RouterOS пытается отсылать пакеты в интерфейс, на котором нет линка?

Слава богу служба поддержки Микротика работает отлично и они меня просветлили (именно просветлили, прямо таки карму почистили).

Для того, что бы интерфейс начал работать в привычном, например для меня, режиме. Нужно добавить небольшой фильтр.

[admin@MikroTik] > /routing filter print
Flags: X - disabled
 0   chain=connected-in prefix=192.168.1.0/24 scope=200 invert-match=no
     action=reject set-bgp-prepend-path=""

Принцип работы этого фильтра: если есть лик, значение scope=10, если линк down - то scope=200.

Немного поработав с mikrotik девайсами я догадываюсь почему у них так устроено :) но все равно - это было очень неожиданно.

Небольшой апдейт. Достаточно удалить ip адрес из списка и маршрут будет удален. Но если его не удалить руками, то да - пишем фильтр.

1 комментарий:

  1. Может я что-то не понимаю, но по-моему в это правиле нет логики.
    Смотрим. Это правило применяется к цепочке connected-in - для всех подключенных маршрутов,
    с prefix=192.168.1.0/24 - т.е. если есть маршрут содержит префикс 192.168.1.0/24 и у которого
    scope=200, invert-match=no (без инвертирования условий), action=reject. Смотрим, что такое reject - отклоняет маршрутизируемую информацию содержащую значение префикса. Для входящего фильтра "отклонять" значит, что информация об этом маршруте сохраняется в памяти, но маршрут не становится активным. Для исходящего фильтра это тоже самое, что и "отбросить".
    Ну и в конце вообще совершенно непонятное set-bgp-prepend-path="", относящееся к динамической маршрутизации.

    Т.е. правило должно применяться к работающему нединамическому маршруту с префиксом 192.168.1.0/24 со scope=200 - этот маршрут становится неактивным

    Принцип действия совсем не такой как описано автором статьи - "Принцип работы этого фильтра: если есть лик, значение scope=10, если линк down - то scope=200."

    ОтветитьУдалить