BGP-балансировка, резервирование

RIP, OSFP, BGP, MPLS/VPLS
timonsterrr
Сообщения: 43
Зарегистрирован: 05 мар 2017, 17:33

BGP-балансировка, резервирование

Сообщение timonsterrr » 27 апр 2017, 10:50

Всем привет. У меня следующая ситуация.
есть 2 магистральных провайдера, с которыми установлены сессии БГП. В данный момент трафик балансирую между ними вручную, с помощью ната (фейковые сети распихиваю по анонсированным в того или иного провайдера реальным пулам). Данная схема досталась мне в наследство от предыдущих админов и не дает мне спокойно спать.

Я хочу сделать балансировку нагрузки между этими провайдерами и резервирование.
задачи:
1 Использоваться каналы обоих провайдеров должны более менее равномерно
2 Нат будет не статический, а cg на специализированной железке
3 Надо обеспечить отказоустойчивость. При падении провайдера1 чтобы весь трафик начинал ходить через провадера2 и наоборот.

Сейчас часть пулов анонсирована в провайдера1 и другая часть в провайдера2 и в случае падения одного из них связь пропадает у всех абонентов, кто в него натится и анонсится (абоненты с реальными адресами)

Что хочу сделать - анонсировать все имеющиеся реальные пулы обоим провайдерам. Но пулы, через которые ходят в провайдер1 во второй провайдер анонсировать с BGP Prepend повыше, дабы удлинить путь и чтобы в этот путь пакеты шли только при падении провайдера 1. И наоборот пулы, которые ходят через второго провайдера анонсировать первому провайдеру с удлиненным препендом.

http://isp-servis.ru/config_mikrotik.html Вот здесь нашел как это примерно сделать. Подскажите может у кого уже есть опыт решения подобных задач. Ибо чутье подсказывает мне, что моя задумка не совсем универсальна и недостаточно гибкая.

А гибкости нет в следующем, как мне кажется - что делать если в одном из провайдеров сильно ухудшилось качество канала? (потери, ддос и тд) Он по сути поднят....но по факту инет в нем толком не работает у абонентов и наш БГП микрот об этом ничего не знает. Да, существуют скрипты, которые будут проверять состояние канала и при его ухудшении либо его отключать либо менять настройки фильтров бгп или маршрутов и тд. Но хотелось бы как то обойтись без костылей в виде скриптов и дополнительных правил и маршрутов.

Аватара пользователя
Chupaka
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: BGP-балансировка, резервирование

Сообщение Chupaka » 27 апр 2017, 16:55

Да, всё правильно, анонсировать в оба канала, но с препендами.

Нет, без костылей не обойдётесь :)

timonsterrr
Сообщения: 43
Зарегистрирован: 05 мар 2017, 17:33

Re: BGP-балансировка, резервирование

Сообщение timonsterrr » 28 апр 2017, 08:49

Chupaka писал(а):
27 апр 2017, 16:55
Да, всё правильно, анонсировать в оба канала, но с препендами.

Нет, без костылей не обойдётесь :)
Как быть с исходящим трафиком? надо чтобы и входящий и исходящий ходили через один канал. Удлинять исходящие маршруты? каким образом?

timonsterrr
Сообщения: 43
Зарегистрирован: 05 мар 2017, 17:33

Re: BGP-балансировка, резервирование

Сообщение timonsterrr » 28 апр 2017, 11:13

Вот наткнулся на интересную статью.
https://itservice-bg.net/mikrotik-bgp-d ... ree-peers/

Как раз описан мой случай по сути. через BGP_local_pref решается вопрос с выбором предпочитаемого исходящего маршрута.
Итого мой план:
1 - Анонсировать все префиксы в оба провайдера, но с препендами
2 - У префиксов, которые резервируются так же BGP_local_pref понизить, дабы исходящий трафик ходил через основного, не резервного, для этого префикса провайдера.
3 - Придумать скрипт, который будет оценивать качество канала каждого из провайдеров и если есть просадки на протяжении например последних 5 минут - либо совсем его отключать на какое то время, дабы трафик пошел в резервного для префиксов проблемного провайдера...либо делать что то еще...я еще не придумал))

О результатах - отпишусь здесь) на следующей неделе.

Аватара пользователя
Chupaka
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: BGP-балансировка, резервирование

Сообщение Chupaka » 28 апр 2017, 15:03

Для руления исходящим трафиком надо использовать Policy Routing.
Например, так:

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

/ip route add routing-mark=ISP1 gateway=1.1.1.1
/ip route add routing-mark=ISP2 gateway=2.2.2.2
/ip route rule add src-address=192.168.1.0/0 action=lookup table=ISP1
/ip route rule add src-address=192.168.2.0/0 action=lookup table=ISP2
Local Pref - это для того, чтобы исходящий трафик от всех подсетей направлять в лучшие пиры при использовании Full View, например

timonsterrr
Сообщения: 43
Зарегистрирован: 05 мар 2017, 17:33

Re: BGP-балансировка, резервирование

Сообщение timonsterrr » 28 апр 2017, 15:23

Chupaka писал(а):
28 апр 2017, 15:03
Для руления исходящим трафиком надо использовать Policy Routing.
Например, так:

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

/ip route add routing-mark=ISP1 gateway=1.1.1.1
/ip route add routing-mark=ISP2 gateway=2.2.2.2
/ip route rule add src-address=192.168.1.0/0 action=lookup table=ISP1
/ip route rule add src-address=192.168.2.0/0 action=lookup table=ISP2
Local Pref - это для того, чтобы исходящий трафик от всех подсетей направлять в лучшие пиры при использовании Full View, например
Так а если исходящий будет руками направлен (что, кстати, у нас сейчас и сделано) от определенных префиксов в определенных ISP то при падении ISP у префикса пропадет исходящий маршрут.
А если я установлю для каждого префикса localpref в зависимости от предпочтений
например сеть 1.1.1.1/24 анонсирована в ISP1 с localpref 100 и штатным препендом и в ISP2 с localpref 50 и препендом = 5. То по сути в штатной ситуации она должна ходить через ISP1 и исходящий и входящий трафик, верно? И если ISP1 падает, то в данном случае пойдет ли исходящий трафик через ISP2?
В данный момент с обоими провайдерами у нас fullview

timonsterrr
Сообщения: 43
Зарегистрирован: 05 мар 2017, 17:33

Re: BGP-балансировка, резервирование

Сообщение timonsterrr » 28 апр 2017, 16:21

В общем...подумал я подумал....зачем все эти костыли...и решил сделать проще:
исходящего трафика не так уж и много и по сути не критично через какого провайдера кто будет выходить. Поэтому от всех костылей, связанных с удлинением исходящих маршрутов и тд решено отказаться. Пусть уходят по кратчайшим.
При этом от препенда тоже решил отказаться и сделать по-другому.
все свои префиксы /24 разбить каждый на 4 префикса более мелких с 26 маской. Все префиксы /24 будут анонсированы во всех провайдеров. А вот префиксы /26 будут распределены более менее равномерно по ISP1 и ISP2. В случае падения одного из провайдеров трафик пойдет по укрупненному маршруту /24 т.к. /26 станут недоступны для упавшего провайдера.
Профит - резервирование будет работать, балансировка - ручная, да, но эту задачу я еще буду пытаться решать средствами специализированного ната путем управления пулами и acl (на абонентов с реальными адресами правда тут уж никак не повлиять, только путем перекидывания префиксов по провайдерам, но их у нас не много)

Идею почерпнул отсюда: https://habrahabr.ru/post/184350/

Аватара пользователя
Chupaka
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: BGP-балансировка, резервирование

Сообщение Chupaka » 28 апр 2017, 16:28

Вы только учтите, что анонсы мельче /24 не принимаются :) Как минимум все магистралы их фильтруют: и так таблица большая, не надо её мусором всяким заполнять.

Чтобы при отваливании одного ISP трафик шёл через другой, делается что-то вроде

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

/ip route add routing-mark=ISP1 gateway=1.1.1.1
/ip route add routing-mark=ISP1 gateway=2.2.2.2 distance=10
/ip route add routing-mark=ISP2 gateway=2.2.2.2
/ip route add routing-mark=ISP2 gateway=1.1.1.1 distance=10
Local Pref вы на исходящих анонсах отправить не можете, только на входящих. Так что просто можно с ним не загоняться

timonsterrr
Сообщения: 43
Зарегистрирован: 05 мар 2017, 17:33

Re: BGP-балансировка, резервирование

Сообщение timonsterrr » 28 апр 2017, 16:42

Chupaka писал(а):
28 апр 2017, 16:28
Вы только учтите, что анонсы мельче /24 не принимаются :) Как минимум все магистралы их фильтруют: и так таблица большая, не надо её мусором всяким заполнять.

Чтобы при отваливании одного ISP трафик шёл через другой, делается что-то вроде

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

/ip route add routing-mark=ISP1 gateway=1.1.1.1
/ip route add routing-mark=ISP1 gateway=2.2.2.2 distance=10
/ip route add routing-mark=ISP2 gateway=2.2.2.2
/ip route add routing-mark=ISP2 gateway=1.1.1.1 distance=10
Local Pref вы на исходящих анонсах отправить не можете, только на входящих. Так что просто можно с ним не загоняться
да, я уже прочел про анонс префиксов менее 24.....не проканает))) поясните про выше приведенный пример. Не совсем понятно

Аватара пользователя
Chupaka
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: BGP-балансировка, резервирование

Сообщение Chupaka » 28 апр 2017, 17:21

Сорри, правильный пример такой:

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

/ip route add routing-mark=ISP1 gateway=1.1.1.1 check-gateway=ping
/ip route add routing-mark=ISP1 gateway=2.2.2.2 distance=10
/ip route add routing-mark=ISP2 gateway=2.2.2.2 check-gateway=ping
/ip route add routing-mark=ISP2 gateway=1.1.1.1 distance=10
Как только шлюз 1.1.1.1 перестаёт пинговаться - первый и последний маршруты становятся неактивными, поэтому трафик в обеих таблицах пойдёт на 2.2.2.2

Ответить