, последнее обновление:

RIP && RIPng - делаем максимально динамическую маршрутизацию

Однажды я столкнулся с тем, что моя личная локалка разрослась настолько, что поддерживать таблицы маршрутизации везде можно либо через какой-нибудь Ansible, либо с помощью специализированных протоколов динамической маршрутизации. Шутка ли - 6 сегментов, к которому может присоединиться еще один!

В качестве протокола решил выбрать RIP - который расшифровывается как раз как “Routing Information Protocol”. Он настолько туп, насколько прост, но со своими оговорками:

  • Максимальное число хопов между любыми двумя роутерами не должно превышать 15, иначе они считаются недоступными.

Главное, что нужно запомнить, и что облегчит понимание настройки всего добра:

  • RIP/RIPng работает только на интерфейсе.

Подробнее можете почитать в Википедии, в мануале по RIP в вики Mikrotik и в мануале по prefix lists в вики Mikrotik (это нам тоже будет нужно).

Итак, поехали.

Настраиваем списки адресов, которые НЕ будем раздавать

При выборе стратегии раздачи маршрутов я долго выбирал между “раздавать ничего, кроме вайтлиста” и “раздавать все, кроме блэклиста”, и решил остановиться на втором пункте, и вот почему:

  1. Мне как раз и нужно раздавать максимальное количество роутов максимальному числу окружения, чтобы свести ручное взаимодействие везде, кроме ответственного роутера, к нулю.
  2. Я могу добавить еще одну подсеть, например, для тестирования новой схемы взаимодействия виртуалок, и я не хочу совершать дополнительные действия по включению этой подсети в список разрешенных.
  3. (самый главный пункт) Я, все-таки, ленивый человек.

Вообще, все пункты про одно и то же - я ленивый, и поэтому хочу свести к минимуму дополнительные действия, которые необходимо предпринять для раздачи нового маршрута. Поэтому настраиваем списки адресов, которые мы НЕ будем раздавать.

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

По-умолчанию это должен быть как минимум дефолтный гейтвей, через который микротик (и клиенты за ним) ходят в интернет, так как это точно нарушит возможность работы с другими хостами из подсети с дефолтным гейтом для клиентов, которым мы раздали свои маршруты. Предположим, что ваш гейт - 123.45.67.1, тогда надо добавить вот такую запись в список do-not-rip:

/routing prefix-lists add chain=do-not-rip prefix=123.45.67.0/24 action=discard

Повторите это для всех подсетей, которые вы не хотите анонсить. Это могут быть также маршруты к VPN провайдерам или другим маршрутизаторам в вашей сети.

Для RIPng, который управляет IPv6, делаем то же самое, то с IPv6 адресами. Например, у вас есть подсеть 2001:4f8:abcd:1::/64:

/routing prefix-lists add chain=do-not-rip prefix=2001:4f8:abcd:1::/64 action=discard

Это также стоит повторить для всех специфичных маршрутов, например, для маршрутов до других маршрутизаторов в вашей сети или VPN провайдерам.

Настраиваем сам RIP/RIPng

Теперь необходимо выполнить некоторые настройки самого RIP/RIPng:

  • Никогда не раздаем дефолтные маршруты:
/routing rip set distribute-default=never
/routing ripng set distribute-default=never
  • Раздаем статические маршруты (например, к виртуалкам). Это те маршруты, которые вы руками добавили в таблицу маршрутизации:
/routing rip set redistribute-static=yes
/routing ripng set redistribute-static=yes
  • Раздаем маршруты, которые определены как рабочие (например, в другие VPN сети):
/routing rip set redistribute-connected=yes
/routing ripng set redistribute-connected=yes
  • (опционально) Так как предполагается, что вы не используете OSPF/BGP, то отключаем раздачу маршрутов, полученных с помощью этих протоколов:
/routing rip set redistribute-ospf=no
/routing rip set redistribute-bgp=no
/routing ripng set redistribute-ospf=no
/routing ripng set redistribute-bgp=no

Включаем раздачу маршрутов

При включении раздачи маршрутов другим маршрутизаторам есть только один общий шаг - это включение работы на интерфейсах, который выполняется для RIP и для RIPng. Добавление соседей - чисто фишка RIP, который работает с IPv4.

Включаем работу на определенных интерфейсах

Так как мы будем работать только с нашими маршрутизаторами, то мы не будем использовать никакую аутентификацию, чтобы не усложнять процедуру (хотя и является плохой практикой, конечно же). В случае необходимости докрутите аутентификацию самостоятельно.

Добавляем интерфейс для работы с RIP:

/routing rip interface add interface=IFACENAME in-prefix-list=do-not-rip out-prefix-list=do-not-rip receive=v2 send=v2

Этой командой мы разрешаем RIP слушать и отправлять маршруты на интерфейсе IFACENAME с фильтрацией по списку do-not-rip (который будет фильтровать исходящие и входящие объявления маршрутов по добавленному выше списку, чтобы не сломать сеть) и использоваться будет протокол версии 2 (что правильно).

Для RIPng выглядит это так:

/routing ripng interface add interface=IFACENAME in-prefix-list=do-not-rip out-prefix-list=do-not-rip

Полная аналогия - разрешаем RIPng работать на интерфейсе IFACENAME с фильтрацией по списку do-not-rip.

Эти команды надо повторить для всех интерфейсов, на которых нужно включить RIP/RIPng.

В случае с RIPng (который IPv6) этого достаточно - если есть другие маршрутизаторы, то они автоматом сконнектятся и обменяются маршрутами. А вот в случае с RIP (который IPv4) необходимо также добавить адреса маршрутизаторов, с которыми будем контактировать.

Добавляем маршрутизаторы для общения для RIP (IPv4)

Делается это так:

/routing rip neighbor add address=192.168.255.1

Где 192.168.255.1 - адрес маршрутизатора, до которого мы можем достучаться на одном из включенных ранее интерфейсов.

Послесловие

Эту инструкцию надо повторить (подменяя, конечно же, адреса и префиксы в prefix-lists) на другом маршрутизаторе, с которым вы хотите обменяться маршрутами. Если все сделано правильно - то больше вам не придется везде править маршруты руками :).