BGP отдать случайный ip [РЕШЕНО]

RIP, OSFP, BGP, MPLS/VPLS
Аватара пользователя
Sir_Prikol
Сообщения: 394
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

BGP отдать случайный ip [РЕШЕНО]

Сообщение Sir_Prikol »

Доброго времени суток

На сколько я понял, из своих экспериментов, то чтоб передать случайный ip пиру, посредством BGP, мне его надо сначала занести в статический маршрут у себя

К примеру, отдаю пиру комьюнити 65555:111
Естественно в фильтрах разрешена только эта комьюнити
Пытаюсь отдать пиру случайный IP, к примеру 1.1.1.1

В фильтрах прописывал данный префикс 1.1.1.1/32, пытался в том-же филтре навесить на этот ip комьюнити - тишина

Прописал статический маршрут на 1.1.1.1 с добавлением комьюнити - пир получил маршрут

В следствии вопрос, это костыль или так должно быть?
Вопрос 2, если у меня несколько аплинков, то, по сути, мне надо писать n*аплинк количество статических маршрутов с данным IP и комьюнити?

Смысл этих действий в чём, слишком разрастается adress-list на удалённых микротиках, надоедает его править, а так на головном прописал нужную сеть и забыл, на второстепенных прописал правила маршрутизации в фильтрах и оно само разбегается как надо
Последний раз редактировалось Sir_Prikol 21 янв 2021, 19:35, всего редактировалось 1 раз.
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 3062
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: BGP отдать случайный ip

Сообщение Chupaka »

Доброго. Ну, чтобы отдать какой-то маршрут пиру, надо его откуда-то взять. Фильтр маршруты не генерирует, только фильтрует. Маршрут можно получить из BGP Networks (при Synchronize=no он не должен дублироваться в таблице маршрутизации) или, собственно, из таблицы маршрутизации, с прописыванием в Network чего-нибудь всеобъемлющего.

Одного маршрута должно быть достаточно на всех пиров.

Я как-то тоже пытался играться с распространением списка адресов, и там проблема, как помню, была с работой с кастомными таблицами маршрутизации, не main - из них маршруты не очень хотели забираться... В RouterOS v7 обещали фильтры, которые смогут забирать данные из address-list и пихать их туда, но пока что-то тишина...
Аватара пользователя
Sir_Prikol
Сообщения: 394
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP отдать случайный ip

Сообщение Sir_Prikol »

BGP Networks (при Synchronize=no) - на сколько я проэкспериментировал, не вешает комьюнити, хотя я могу и ошибаться
как помню, была с работой с кастомными таблицами маршрутизации, не main - из них маршруты не очень хотели забираться...
из-за этого я и стал распространять через комьюнити
Одного маршрута должно быть достаточно на всех пиров.
Имелось ввиду аплинковские маршруты на головном, при условии разных гейтов.
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 3062
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: BGP отдать случайный ip

Сообщение Chupaka »

Sir_Prikol писал(а): 21 янв 2021, 15:10 BGP Networks (при Synchronize=no) - на сколько я проэкспериментировал, не вешает комьюнити, хотя я могу и ошибаться
Так комьюнити навешиваться фильтром должны
Sir_Prikol писал(а): 21 янв 2021, 15:10 из-за этого я и стал распространять через комьюнити
Но роуты при этом в main? И, строго говоря, мешают нормально жить и работать :)
Sir_Prikol писал(а): 21 янв 2021, 15:10 Имелось ввиду аплинковские маршруты на головном, при условии разных гейтов.
Так от гейта-то ничего особо не зависит
Аватара пользователя
Sir_Prikol
Сообщения: 394
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP отдать случайный ip

Сообщение Sir_Prikol »

Так от гейта-то ничего особо не зависит
Как это? Вот у меня, допустим, 2 аплинка с разными гейтами
Я прописываю статический маршрут на тот IP который хочу отдать субпиру, к примеру 1.1.1.1, чтоб у пира в фильтрах на него навесилась routing mark и согласно этой маркировки он был доступен всегда (актуально при провайдерстве, на разных брасах и списком белых IP)

У себя я создаю статический маршрут на 1.1.1.1 - я не могу оставить гейт пустым, мне надо сказать через какой аплинк единички будут доступны, вот я и спросил про разные гейты, по сути я дублирую маршруты. Но это мелочи. Если будет работать synchronize=no - то проблема отпадёт.
Но роуты при этом в main? И, строго говоря, мешают нормально жить и работать
До этого не добрался ещё, пока нормально не могу сети отдать.

Просто я не заметил разницы между Synchronize=no и Synchronize=yes, сеть в любом случае прилетает от нижестоящего пира. И вот тут возникает проблема. Если я пропишу сети на головном, где гарантия что эти сети не улетят вышестоящему?, Не смотря на то, что я фильтрую к вышестоящему всё, кроме своей сети
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 3062
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: BGP отдать случайный ip

Сообщение Chupaka »

Sir_Prikol писал(а): 21 янв 2021, 16:14 У себя я создаю статический маршрут на 1.1.1.1 - я не могу оставить гейт пустым
type=blackhole, но это только в том случае, если этот маршрут не будет использоваться в маршрутизации трафика (что, как правило, неверно, если он в таблице main)
Sir_Prikol писал(а): 21 янв 2021, 16:14 Просто я не заметил разницы между Synchronize=no и Synchronize=yes, сеть в любом случае прилетает от нижестоящего пира.
Т.е. при Synchronize=yes и отсутствии маршрута в IP -> Routes сеть всё равно анонсируется?..
Sir_Prikol писал(а): 21 янв 2021, 16:14 Если я пропишу сети на головном, где гарантия что эти сети не улетят вышестоящему?, Не смотря на то, что я фильтрую к вышестоящему всё, кроме своей сети
Так вот фильтры - и есть гарантия :)
Аватара пользователя
Sir_Prikol
Сообщения: 394
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP отдать случайный ip

Сообщение Sir_Prikol »

Т.е. при Synchronize=yes и отсутствии маршрута в IP -> Routes сеть всё равно анонсируется?..
Это решил, сеть анонсится только тогда, когда она сидит в ip routes, вопрос снят

Осталась мелочь :)

На пире я получил нужный адрес от нужного комьюнити и....

Создал фильтр, чтоб у меня на это комьюнити вешался нужный мне routing mark - в ip routes - вижу маркировку маршрута - всё в норме, но....

Пишу правило фильтра

Код: Выделить всё

/ip fi fi add action=accept chain=output routing-mark=one
Запускаю пинг с микротика на этот адрес
и счётчики не крутятся

Подозреваю что из-за того что на тестируемом микротике выставлен default route на pppoe клиенте, но не уверен
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 3062
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: BGP отдать случайный ip

Сообщение Chupaka »

А чего счётчики должны крутиться? routing-mark=one проверяет, навесили ли на пакет ранее эту метку (другим правилом Mangle). Если надо проверить, что пакет подходит под кастомную таблицу маршрутизации - надо routing-table=one использовать, видимо. Ну и добавить Routing Rule для лукапа в этой таблице: https://wiki.mikrotik.com/wiki/Manual:R ... le_Matcher

З.Ы. 2010 год... Как давно же я с мучениями выбил у них добавление этой фишки в RouterOS :D
Аватара пользователя
Sir_Prikol
Сообщения: 394
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP отдать случайный ip

Сообщение Sir_Prikol »

Ураа! :) Заработало! :)

В общем то что я задумал - можно использовать. Резюмирую

Головной микротик:
Создаём инстанцию для нижестоящих пиров

Код: Выделить всё

/routing bgp instance
add as=65531 name=to.cams redistribute-connected=yes redistribute-other-bgp=yes redistribute-static=yes router-id=192.0.2.2
прописываем сети с параметром Synchronize=no

Код: Выделить всё

/routing bgp network
add network=1.1.1.1/32 synchronize=no
Создаём фильтры с этими-же сетями (в идеале надо-бы чтоб в фильтр автоматом падали сети с routing bgp networks) и навешиваем нужный комьюнити, соответственно отдаём нужное(ые) комьюнити нижестоящим (в примере только то, что отвечает за мои нужды)

Код: Выделить всё

/routing filter
add action=accept append-bgp-communities=65531:115 chain=from-office-bgp-in prefix=192.168.0.0/16 prefix-length=16-32

add action=accept chain=to-office-bgp-out prefix=1.1.1.1 prefix-length=32 set-bgp-communities=65535:115
add action=accept bgp-communities=65531:115 chain=to-office-bgp-out
add action=accept bgp-communities=65535:115 chain=to-office-bgp-out
add action=discard chain=to-office-bgp-out
описание:
1.Принимаем от нижестоящих их сети и навешиваем на них нужное комьюнити (нижестоящих много, нужно получить их сети для нормальной реализации моих нужд)
2. Навешиваем на нужную сеть (нужный адрес) необходимое комьюнити для отделения от остальных сетей
3. Отдаём сети с основным комьюнити (у меня необходимость для того чтобы концевые железки могли контактировать друг с другом)
4. Отдаём комьюнити с нужной сетью

Тут важно отметить один нюанс, сожравший у меня кучу нервов в один давний момент. Чтоб отдать 2 и более комьюнити их надо прописывать ОТДЕЛЬНЫМ фильтром. Не смотря на то что винбокс позволяет добавлять несколько комьюнити в одном фильтре. Запоминаем - каждое комьюнити - отдельный фильтр

Создаём пира

Код: Выделить всё

/routing bgp peer
add hold-time=1m in-filter=from-office-bgp-in instance=to.cams keepalive-time=5s name=from.sb.04 out-filter=to-office-bgp-out remote-address=100.64.40.4 remote-as=65504 ttl=default
На этом на головном маршрутизаторе всё.

Переходим к нижестоящему пиру:

Создаём инстанс

Код: Выделить всё

/routing bgp instance
set default as=65509
Прописываем сети для отдачи наверх (если надо)

Код: Выделить всё

/routing bgp network
add network=192.168.146.0/24 synchronize=no
Создаём фильтры

Код: Выделить всё

/routing filter
add action=accept bgp-communities=65535:115 chain=from.carribean set-routing-mark=one
add action=accept chain=from.carribean
Описание:
1. Получаем сети с определённого комьюнити и навешиваем на него нужный routing mark (в общем то, для чего задумывалась данная схема работы)
2. Получаем всё остальное

Создаём пира

Код: Выделить всё

/routing bgp peer
add hold-time=1m in-filter=from.carribean keepalive-time=5s name=peer1 remote-address=100.64.0.1 remote-as=65531 ttl=default
Далее идём в ip route rules и создаём простое правило -

Код: Выделить всё

/ip route rule
add table=one
Описание:
таблица "one" появляется в момент навешивания routing mark на нужную сеть при получении маршрута

После этого в любом правиле, фаервола просто используем данную таблицу маршрутизации для своих нужд (drop/accept/reject....etc)

Код: Выделить всё

/ip firewall filter
add action=drop chain=output routing-table=one
(в примере дропаем выход в мир для этой таблицы с самого микротика, не забываем про разницу между output и forward)

Вот в принципе и всё. То что я хотел - получил, немного облагородить и будет идеально.
Теперь, чтоб прописать разрешение ходить железкам по нужным адресам - мне достаточно изменить данные на головном микротике, правда пока в двух местах, в routing bgp networks и в фильтрах (в идеале хочу прописывать только в одном месте - routing bgp networks, но, боюсь, в моей конфигурации это не реализовать, только каким-нить скриптом, который будет смотреть что у меня за сети прописаны и сравнивать их с фильтрами), и железо получит возможность руководствоваться моими правилами, у меня высвобождается толпа времени (до этого момента надо было распространять адресслист на каждый микротик, а их около 250 и занимало не мало времени и было очень занудным)
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 3062
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: BGP отдать случайный ip

Сообщение Chupaka »

Поздравляю :)
Sir_Prikol писал(а): 21 янв 2021, 19:01 в идеале хочу прописывать только в одном месте - routing bgp networks, но, боюсь, в моей конфигурации это не реализовать, только каким-нить скриптом, который будет смотреть что у меня за сети прописаны и сравнивать их с фильтрами
А много у вас других подсетей /32 анонсируется? Может, достаточно фильтра по prefix-length=32 на всех?
Sir_Prikol писал(а): 21 янв 2021, 19:01 до этого момента надо было распространять адресслист на каждый микротик, а их около 250 и занимало не мало времени и было очень занудным
На таких объёмах даже простенький bash-скрипт, который пробегается по всему списку роутеров и выполняет нужную команду по SSH, очень спасает :)