Проблема

Собственно один из сценариев с OSPF - распространение маршрутной информации от одного филиала в другой, и в 6-ке проблем не было. Настроил зону, включил туда диапазон выдаваемый любым PtP сервером и адреса клиентов полетели по всем филиалам. Да, очень неудобно, когда таких маршрутов много, их обычно можно агрегировать и проблемы нет. Но в 7-ке проблема в другом, то ли из-за бага, то ли я что-то делаю не так, но маршруты для PtP клиентов не распространяются.

Решение

Само решение довольно простое.

Надо просто объявить static blackhole маршрут до подсети этих клиентов с большой метрикой и назначить в OSPF распространение static маршрутов. Тут почти все, надо еще и отфильтровать маршруты, что-бы распространялись только необходимые, далее будет код:

/ip route
add blackhole disabled=no distance=255 dst-address=10.0.2.0/24 gateway="" pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no distance=255 dst-address=10.0.28.0/24 gateway=172.16.26.129 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10

/routing ospf instance
add name=ospf-instance-1 out-filter-chain=ospf-out redistribute=static,ospf router-id=10.0.0.129

/routing ospf area
add instance=ospf-instance-1 name=ospf-area-1
add area-id=10.0.3.0 instance=ospf-instance-1 name=local type=stub

/routing filter rule
add chain=ospf-out disabled=no rule="if ( protocol static ){\r\
    \n if( dst==10.0.2.0/24 && dst-len==24 ) { accept }\r\
    \n} else {\r\
    \n reject\r\
    \n}"

/routing ospf area range
add area=local disabled=yes prefix=10.0.2.0/24

/routing ospf interface-template
add area=ospf-area-1 dead-interval=4s hello-interval=1s networks=10.0.0.128/25 type=ptp
add area=local networks=10.0.3.0/24 passive
add area=local networks=10.0.2.0/24 passive prefix-list=10.0.2.0/24 type=ptp
add area=local networks=10.0.28.0/24 passive prefix-list=10.0.28.0/24 type=ptp

Для примера выше, сеть 10.0.2.0/24 выделена для L2TP клиентов, 10.0.28.0/24 - "пробная", для проверки работы фильтра и распространятся не должна.

Логика фильтра следующая: если маршрут статичный, то проверить его на соответствие критерию, если нет, то отбросить.

Глянем маршруты на соседнем роутере:

Flags: D - DYNAMIC; A - ACTIVE; c, o, d, y - COPY
Columns: DST-ADDRESS, GATEWAY, DISTANCE
    DST-ADDRESS       GATEWAY                 DISTANCE
DAd 0.0.0.0/0         172.16.26.129                200
DAc 10.0.0.0/25       bridge-ISP                     0
D o 10.0.0.129/32     10.0.0.129%gre-tunnel1       110
DAc 10.0.0.129/32     gre-tunnel1                    0
DAo 10.0.2.0/24       10.0.0.129%gre-tunnel1       110
DAo 10.0.2.1/32       10.0.0.129%gre-tunnel1       110
DAo 10.0.3.0/24       10.0.0.129%gre-tunnel1       110
DAc 10.0.4.254/32     <l2tp-ppp1>                    0
DAc 10.0.5.0/24       ether3                         0
DAc 172.16.26.128/25  ether4                         0

Как видно из листинга выше, тут есть только анонсированные маршруты и маршрут /32 до самого роутера.

Комментарии (15)


  1. Maxim_Q
    18.12.2021 23:27

    Вы в тех.поддержку по поводу проблемы писали? Они обычно помогают и отвечают. Если это реальная проблема ее лучше пофиксить


    1. MagicGTS Автор
      19.12.2021 00:29

      Ещё не успел, надо было обходняк сделать.


  1. XBOCTOB
    18.12.2021 23:38

    Может они при переходе к 7-му ROS поменяли принадлежность таких маршрутов? Документацию, традиционно не читал, но... У redistribte вижу варианты "bgp connected copy dhcp fantasy modem ospf rip static vpn", кроме очевидного "connected" могу предположить "vpn" для вашего случая (для PtP это тоже более-менее логично). Каким типом их показывает /ip/route/print ?


    1. MagicGTS Автор
      19.12.2021 00:31

      Пробовал все варианты, ни один не работает. В листинге из статьи как раз есть такой интерфейс.


  1. negodzq
    19.12.2021 00:32
    +1

    Больше похоже на баг

    При добавлении клиента x.x.x.x через винбокс получаем адрес в формате x.x.x.x/32 и маршрут не распространяется, правка адреса не помагает, винbокс упорно добавляет префикс /32

    Если добавить клиента через cli, то адрес получаем в нужном формате и всё работает. Правка клиента, добавленного через винбокс, в cli тоже даёт положительный результат

    7.1 stable, не такой уж и stable

    P.S. а ещё интересное поведение маршрутом, если у вас настроен recursive routing

    Перед переходом на 7.1 надо убедиться, что значение target scope больше scope, иначе велик шанс к дальней поездке, если роутер на удаленном объекте.


    1. MagicGTS Автор
      19.12.2021 00:33

      Про рекурсию - проверю в лабе, у меня куча мест, куда я точно не хочу ехать в ближайшее время.


    1. erazel
      20.12.2021 11:55

      Там даже по другому у рекурсивки. Как я выяснил эмпирически - у пары маршрутов образующих рекурсивный маршрут должен быть разный target scope. Именно на это ругается. Если target scope разные то target scope дефолтного рекурсивного может быть равный scope маршрута на "проверочный" хост.


  1. pkashtanov
    19.12.2021 00:33

    Спасибо, давно искал решение этой проблемы.


  1. daWSL
    19.12.2021 11:07

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

    Зачем "мусорить" в соседские RIB/FIB россыпью /32, если можно анонсировать только один "изящный" суммарный маршрут?


    1. MagicGTS Автор
      19.12.2021 11:12

      Ваше непонимание понятно.

      OSPF часто используют как магическую технологию, где прописал очень мало чего и все ок. О суммаризации подобных маршрутов начинают думать только тогда, когда их становится много.

      В данном случае вышло так, что эти маршруты были отфильтрованны багом, а те кто никогда не заморачивался на суммаризации - просто столкнуться с проблемой, о решении которой они никогда не думали.


  1. sclk34
    19.12.2021 13:02

    7ка какая-то сырая. У меня на chr дикие просадки пингов даже до роутера если какой-то из клиентов начинает загрузку. На 6ке таких проблем нет. В общем откатил назад небыло времени разбираться. А еще я не понял, если уж поменяли что-то у себя коренным образом в операционке, сделайте скрипт чтоли чтобы сатарые конфиги без проблем переезжали.


    1. MagicGTS Автор
      19.12.2021 15:35

      Я понимаю почему они не сделали полную автомиграцию - это очень не просто само по себе, да и учесть все нюансы конфигурации и особенности поведения старой версии софта при переносе в новую версию вообще считай невозможно.


  1. pfzr
    19.12.2021 14:36

    А если добавить в redistribute connected?
    redistribute=static,ospf - тут только статические маршруты и other ospf


    1. MagicGTS Автор
      19.12.2021 14:36

      Я все варианты пробовал, маршруты до /32 не раздаются.


      1. Pinkbyte
        19.12.2021 23:40

        Очень похоже на старый баг в Quagga, который я репортил аж ЕМНИП в 2011 году(я не в курсе самописная ли реализация протоколов маршрутизации у Mikrotik или заимствованная) - там тоже /30 работал нормально, а /32 - не раздавался вообще(/31 не проверял).

        Починили это дело только в каком-то из свежих релизов FRRouting