Load Balancing на динамических гейтвеях

Обсуждение оборудования и его настройки
VTX
Сообщения: 16
Зарегистрирован: 17 авг 2022, 19:26

Доброго времени суток.
Итак - я снова с вопросом. Имеется 2 провайдера и нужно сделать load balancing. Тема, казалось, бы уже избитая и обсосанная до невозможности, но есть в моем случае 1 нюанс - оба правайдера работают только через DHCP. Т е, часть инструкции, которая гуляет по инету выполнить не представляется возможным. Нельзя ни чек гейтвея выставить ни роутинг тейбл поменять. Всё, что нормально можно сделать - это маркировка пакетов/маршрутизации. Дальше - затык.
Вопрос - это вообще реально? Или нужно только мастырить ещё 2 промежуточных узла на каждого провайдера (ещё 1 NAT)?


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Конечно реально.
Скрипт вешаете на dhcp-клиентов, который при смене адреса/гейтвея подновляет маршруты.

Скрипт стандартный, из примеров с микротиковской вики.


Telegram: @thexvo
VTX
Сообщения: 16
Зарегистрирован: 17 авг 2022, 19:26

https://wiki.mikrotik.com/wiki/Manual:PCC
Что-то я тут скриптов не увидел...

И ещё
add action=mark-routing chain=prerouting connection-mark=ether1_conn in-interface=bridge passthrough=yes
Оно потом упорно мне выдает Connection mark - main (по имени дефолтной VRFки), хотя перед этим сделан mark connections и там этот марк четко прописан. Чего ему для счастья не хватает?


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

VTX писал(а): 21 авг 2022, 20:49 https://wiki.mikrotik.com/wiki/Manual:PCC
Что-то я тут скриптов не увидел...
https://wiki.mikrotik.com/wiki/Manual:I ... t#Examples
VTX писал(а): 21 авг 2022, 20:49 И ещё
add action=mark-routing chain=prerouting connection-mark=ether1_conn in-interface=bridge passthrough=yes
Оно потом упорно мне выдает Connection mark - main (по имени дефолтной VRFки), хотя перед этим сделан mark connections и там этот марк четко прописан. Чего ему для счастья не хватает?
Условие на connection-mark вижу.
Какую ставить routing-mark - не вижу.

И да, если 7ка, то таблицу надо предварительно создавать, автоматом не создастся.


Telegram: @thexvo
VTX
Сообщения: 16
Зарегистрирован: 17 авг 2022, 19:26

xvo писал(а): 21 авг 2022, 21:20 Условие на connection-mark вижу.
Какую ставить routing-mark - не вижу.
Вот полностью:

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

/ip firewall mangle
add action=mark-connection chain=input in-interface=ether1 new-connection-mark=ether1_conn
add action=mark-connection chain=input in-interface=lte1 new-connection-mark=lte_conn
add action=mark-routing chain=output connection-mark=ether1_conn passthrough=yes
add action=mark-routing chain=output connection-mark=lte_conn passthrough=yes
add action=mark-connection chain=prerouting dst-address-type=!local in-interface=bridge new-connection-mark=ether1_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting dst-address-type=!local in-interface=bridge new-connection-mark=lte_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/1
add action=mark-routing chain=prerouting connection-mark=ether1_conn in-interface=bridge passthrough=yes
add action=mark-routing chain=prerouting connection-mark=lte_conn in-interface=bridge passthrough=yes
В скриптах метки совпадать должны?
 ether1
/ip dhcp-client
add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ether1 script="{\r\
\n :local rmark \"ether1_conn\"\r\
\n :local count [/ip route print count-only where comment=\"ether1_conn\"]\r\
\n :if (\$bound=1) do={\r\
\n :if (\$count = 0) do={\r\
\n /ip route add gateway=\$\"gateway-address\" comment=\"ether1_conn\" routing-mark=\$rmark\r\
\n } else={\r\
\n :if (\$count = 1) do={\r\
\n :local test [/ip route find where comment=\"ether1_conn\"]\r\
\n :if ([/ip route get \$test gateway] != \$\"gateway-address\") do={\r\
\n /ip route set \$test gateway=\$\"gateway-address\"\r\
\n }\r\
\n } else={\r\
\n :error \"Multiple routes found\"\r\
\n }\r\
\n }\r\
\n } else={\r\
\n /ip route remove [find comment=\"ether1_conn\"]\r\
\n }\r\
\n}\r\
\n"
 lte1
/ip dhcp-client
add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=lte1 script="{\r\
\n :local rmark \"lte_conn\"\r\
\n :local count [/ip route print count-only where comment=\"lte_conn\"]\r\
\n :if (\$bound=1) do={\r\
\n :if (\$count = 0) do={\r\
\n /ip route add gateway=\$\"gateway-address\" comment=\"lte_conn\" routing-mark=\$rmark\r\
\n } else={\r\
\n :if (\$count = 1) do={\r\
\n :local test [/ip route find where comment=\"lte_conn\"]\r\
\n :if ([/ip route get \$test gateway] != \$\"gateway-address\") do={\r\
\n /ip route set \$test gateway=\$\"gateway-address\"\r\
\n }\r\
\n } else={\r\
\n :error \"Multiple routes found\"\r\
\n }\r\
\n }\r\
\n } else={\r\
\n /ip route remove [find comment=\"lte_conn\"]\r\
\n }\r\
\n}\r\
\n"


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

VTX писал(а): 21 авг 2022, 23:04Вот полностью:
Вот я и говорю.
Вы все проходящие соединения размечать размечаете, а дальше с ними ничего не делаете.
И только соединения самого роутера (input/output) распихиваете по разным таблицам.
Все остальные так и остаются в основной.
Последние два правила почему ничего не делают?


Telegram: @thexvo
VTX
Сообщения: 16
Зарегистрирован: 17 авг 2022, 19:26

xvo писал(а): 22 авг 2022, 00:43 распихиваете по разным таблицам.
Каким таблицам? Если вы про VRF, то их 2 - main и вторую я создал lteT. И тут вроде как ни одна не упомянута...
Вообще, это обязательно для LB - распихивать интерфейсы по разным VRFам? Или можно обойтись одним (main)?
xvo писал(а): 22 авг 2022, 00:43 Последние два правила почему ничего не делают?
Из инструкции брал - их не густо, если речь идет о последней версии ROS. Как я понимаю, они (эти 2 правила) не полные и, походу, система закончила их за меня, предложив их раскидать на оба VRFа.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

VRF у вас должна быть одна.
У вас таблиц маршрутизации должно быть три: main и по одной на каждого провайдера.


Telegram: @thexvo
VTX
Сообщения: 16
Зарегистрирован: 17 авг 2022, 19:26

Хорошо, а что делать с гейтвеями? В инструкции правила ссылаются на реальные адреса:
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=ISP1
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=ISP2
и
/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping
Я так понимаю, что тут мне как-то должен помочь скрипт, но каким образом?
И ещё одна проблема - я не могу поставить скрипт на DHCP-клиент интерфейса lte1 - он создается динамически.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Скрипт должен создавать «кастомные» маршруты и менять их при смене адреса/гейтвея.

Естественно его надо адаптировать под свою ситуацию.

Как быть с lte - не могу сказать.
Там динамически создантся сам dhcp-клиент?


Telegram: @thexvo
Ответить