MikroTik Для больших дядей часть 2
И так я надеюсь вы все успешно настроили маршрутизаторы из первой части, и добрались до данного этапа.
Помните важную деталь так как мы строго соблюдаем все правила, у нас у всех должна быть полностью идентичные настройки.
И так давайте приступим к следующей части нашей эпопеи, а именно настройка маршрутизации.
Наша задача на сегодня это связать все маршрутизаторы с помощью протокола OSPF так, чтобы любой маршрутизатор мог достучаться до любого другого маршрутизатора.
И для этого нам потребуется знать следующие аспекты.
Любая сеть OSPF начинается с Backbone это магистральная область, которая знает о том как достучаться до всех других областей, в OSPF Backbone имеет номер 0.0.0.0 в любой сети где есть OSPF обязательно должна быть такая Area. Так как у нас сеть одна и она небольшая мы будем сразу делать на Backbone благо в RouterOS уже есть такая Area по дефолту.
Фильтры OSPF
Очень частая ошибка при конфигурации OSPF это не использовать фильтры маршрутов, если один из маршрутизаторов будет настроен не правильно он может “Выплюнуть” в сеть лишние маршруты которые приведут к развалу всей сети, особенно это заметно при построении туннелей, а так же когда используется связка BGP и OSPF в особенности когда есть Full View, одна галочка, и на всех маршрутизаторах закончилась память. А так как OSPF передаёт только изменения, память прибиться очищать либо отключением протокола OSPF либо перезагрузкой.
Прежде чем настраивать OSPF нам необходимо настроить фильтры, для того чтобы в дальнейшем не допустить ошибку и не нарваться на неё.
В OSPF у нас есть возможность указать какие маршруты мы можем принять и добавить в таблицу маршрутизации (не путать с таблицей LSDB) а какие нет, ну и также можем указать какие маршруты из таблицы маршрутизации отдавать в сеть OSPF. При этом мы не можем, точнее у нас не получиться запретить на отдачу внутренние маршруты по которым строятся связь OSPF. Так как такие маршруты являются неотъемлемой частью LSDB таблицы, а она должна быть на всех маршрутизаторах одинакова в одной area.
В первой части, мы продумали адресаций для каждого типа оборудования, а теперь наступил момент воспользоваться тем, что у нас явно все типы адресов находятся в одной сети.
Я покажу на примере
/routing filter add chain=ospf-in prefix=172.31.255.0/24 prefix-length=32 action=accept
chain=ospf-in
- цепочка фильтров которая по умолчанию назначена на дефолтный
instance OSPF в RouterOS. Говорит о том, что мы будем проверять на соответствие
некому правилу, и если не запрещено то такой маршрут будем добавлять в таблицу маршрутизации.
prefix=172.31.255.0/24
- префикс это не маршрут, префикс это адресное
пространство из которого мы будем выискивать маршруты с определённой длинной.
prefix-length=32
- а вот тут уже непосредственно длинна маршрута.
Другими словами мы будем разрешать action=accept
все маршруты у которых длина
соответствует prefix-length
а также сам маршрут лежит в более большой сети
prefix
. Наши Loopback интерфейсы как раз на маршрутизаторах имеют адреса из
данной сети и маску /32.
Также нам необходимо разрешить Loopback адрес для PE и CE устройств.
И конечно в конце, чтобы не прилетели лишние маршруты мы должны добавить
/routing filter add chain=ospf-in action=discard
Я предпочитаю также использовать цепочку ospf-out, что бы при ошибке не улетело нечего лишнего, поэтому давайте также продублируем все что было в ospf-in в цепочке ospf-out.
Фильтры так же как и правила firewall обрабатывают по порядку, поэтому сначала разрешаем, а в конце цепочки всё запрещаем.
OSPF instance
Instance это процесс ospf в большинстве случаев он нам нужен только один. Зачастую второй Instance нужен если вы предлагаете своим клиентам услугу l3vpn, но нам до неё ещё как до луны или если вы делаете соединение ospf сетей с другой сетью, и чтобы в вашу LSDB таблицу не было доставлено лишних маршрутов используют разные Instance. На данном этапе нам достаточно одного дефолтного instance.
Особенность Instance вы должны указать некое уникальное значение Router-id, это не IP адрес, но записывается так же как и IP принцип и длину 4 октета по 8 бит. Если не указывать, то маршрутизатор самостоятельно выберет из наименьшего активного IP адреса, нам некоем случаем нельзя полагаться на волю судьбы. Для данного решения у нас есть адрес Loopback который отлично подходит под значение Router-ID.
Назначается Router-id следующим образом
/routing ospf instance set default router-id=172.31.255.#
Значения Loopback адресов возьмите с адреса интерфейса Br-lo либо с нашей схемы.
Интерфейсы
Для работы OSPF необходимо указать на каких интерфейсах будет работать процесс OSPF слушать и отправлять.
В RouterOS есть одна особенность как только вы укажите подсеть в разделе networks на интерфейсах на которых объявлены IP адреса из данной подсети сразу запуститься процесс OSPF. Категорически необходимо исключить такое поведение изменить “не добавление” нельзя, но можно создать шаблон по умолчанию, для всех интерфейсов которые будут добавлен в процесс автоматически. Как вы наверное уже догадались я категорически не приветствуют всего того, что может быть изменено динамически и привести к проблемам в работе сети.
Шаблон для всех интерфейсов назначается с помощью alias интерфейса all
/routing ospf interface add interface=all passive=yes
Все интерфейсы которые будут добавлены динамически будут обладать свойствами passive=yes
passive=yes
- обозначает что на данном интерфейсе не будет запущен процесс
ospf, не будут отсылаться пакет ospf и будут проигнорированы водящие пакеты ospf.
Т.е тем самым мы все динамические интерфейсы которые могут быть добавлены из-за вашей ошибки в дальнейшем (а они будут) помечаем как пассивные для протокола ospf.
Далее нам необходимо добавить интерфейсы в процесс ospf
/routing ospf interface add interface=ether1 network-type=broadcast
И обязательно указать тип сети в нашем случае это Broadcast так как мы используем сеть отличную от /32.
Обращаю ваше внимание, что вы должны добавить только те интерфейсы за которыми находятся соседние ВАШИ маршрутизаторы. Не надо добавлять Loopback интерфейсы. Если интерфейс используется для соединения с другим маршрутизатором, то добавляем, особенно обратите внимание на CE маршрутизаторах, на них используется только один интерфейс.
Networks
Настал момент непосредственно запуска процесса ospf. Вам необходимо на всех маршрутизаторах добавить сети (обращаю внимание именно СЕТИ, а не IP адреса). Сети в которых находятся другие маршрутизаторы в вашей сети использующие протокол OSPF. Указывать надо именно те сети которые непосредственно присоединены к текущему маршрутизатору.
Обращаю внимания, что нет необходимости добавлять в networks сети любые другие отличные от тех которые используются для связи между маршрутизаторами.
Например, на P-1 будет три сети, а на CE только одна.
Так же вы можете просто посмотреть на схему из первой части, и сети будут прописаны между маршрутизаторами.
Часто в инструкциях вы можете найти информацию примерно такого рода “добавьте в networks те сети которые вы хотите опубликовать в OSPF “, да есть такой кейс, но его лучше всего применять только в STUB area. У нас не используется STUB, а также вы не можете указать каким типом Type-1 или Type-2 будет распространяться данный маршрут, так как он будет intra-area т.е внутренний маршрут.
Добавить можно таким образом:
/routing ospf network add area=backbone network=172.31.252.0/30
Обращаю ещё раз внимание именно СЕТЬ с маской и только сеть между маршрутизаторами.
Редистрибьюция
Ну и наконец кульминация всего, это непосредственно распространение маршрутной информации с помощью редистрибьюции. Наша задача рассказать всем маршрутизаторам о там, что на маршрутизаторах есть адрес Loopback, а так как маршрут, который формируется на основании наличия IP адреса является connected именно с таким типом маршруты мы будем опубликовывать в сети OSPF.
/routing ospf instance set default redistribute-connected=as-type-1
А так как на всех маршрутизаторах у нас настроены фильтры мы не боимся (переживаем и перепроверяем настройку фильтров), что мы распространим лишнюю информацию. Даже в случае ошибки если один маршрутизатор распространит лишнюю маршрутную информацию, то мы не будем принимать нечего отличного от того, что явно разрешено.
Задачи
На всех маршрутизаторах:
Настроить цепочку фильтров ospf-in
- Разрешить адреса loopback P маршрутизаторов
- Разрешить адреса loopback PE маршрутизаторов
- Разрешить адреса loopback CE маршрутизаторов
- Запретить все остальные маршруты
Настроить цепочку фильтров ospf-out
- Разрешить адреса Loopback (в зависимости от типа маршрутизатора P, PE или CE) маршрутизаторов
- Запретить все остальные маршруты
Подсказка все фильтры в цепочке ospf-in у вас будут одинаковые, а вот ospf-out будут отличаться.
Указать на всех маршрутизаторах router-id для instance default, указать Router-id аналогичный, как и Loopback адрес.
Добавить дефолтный шаблон интерфейсов с пассивным поведением
Добавить все интерфейсы на которых будет запущен процесс ospf
Добавить connected сети, по которым строится процесс OSPF.
Запустите процесс редистрибьюции connected маршрутов.
Итог
Если вы все правильно сделали, то на всех маршрутизаторах вы будете наблюдать примерно такую картину.
/ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADC 172.31.252.36/30 172.31.252.38 ether2 0
1 ADC 172.31.252.40/30 172.31.252.42 ether1 0
2 ADC 172.31.252.44/30 172.31.252.45 ether3 0
3 ADo 172.31.253.1/32 172.31.252.46 110
4 ADo 172.31.253.2/32 172.31.252.41 110
172.31.252.37
5 ADC 172.31.254.1/32 172.31.254.1 Br-Lo 0
6 ADo 172.31.254.2/32 172.31.252.41 110
172.31.252.37
7 ADo 172.31.255.1/32 172.31.252.41 110
8 ADo 172.31.255.2/32 172.31.252.41 110
9 ADo 172.31.255.3/32 172.31.252.41 110
10 ADo 172.31.255.4/32 172.31.252.37 110
11 ADo 172.31.255.5/32 172.31.252.37 110
12 ADo 172.31.255.6/32 172.31.252.37 110
Как видите мы видим маршруты с флагом o
- OSPF до всех loopback адресов всех маршрутизаторов.
Если вы используете средство виртуализации (я использую GNS3) и вам удобнее использовать Winbox вы можете создать локальное подключение и использовать ROMON для подключения к маршрутизаторам.

Поделиться
Обсуждение
Лицензия
Текст данной статьи распространяется под общедоступной лицензией CC BY-NC-ND 4.0, ознакомиться с тектом лицензии вы можете на данной странице.