Два провайдера, две белых подсети и куча обычных подсеток

Обсуждение ПО и его настройки
Legion.Leonhart
Сообщения: 5
Зарегистрирован: 07 сен 2020, 16:18

Помогите советом, как лучше реализовать.
Есть два прова с белыми адресами, допустим ISP1 1.1.1.2/30 и ISP2 2.2.2.2/30, каждый из которых в свою очередь мне даёт белую подсеть 11.11.11.0/26 и 22.22.22.0/26 ну ко всему этому есть кучка локальных подсетей, которым тоже нужен инет. Все локальные подсети, включая две белых подсети реализованы VLANами, два внешних интерфейса в WAN листе, все локалки в LAN листе.
Задачка - как лучше сделать так, чтобы локальные подсети (кроме белых) пользовались инетом за NAT, а белые просто форвардились на своих провайдеров, но в случае проблем со своим провом, могли тоже сидеть за NAT на другом провайдере?

Ну с выходом в инет из обычных локальных подсетей всё в принципе понятно, включаем NAT
/ip firewall nat
add action=masquerade chain=srcnat out-interface-list=WAN
Включаем маркирование, на примере первого прова
/ip firewall mangle
add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=fromISP1 passthrough=yes
add action=mark-routing chain=output connection-mark=fromISP1 new-routing-mark=toISP1 passthrough=no
add action=mark-connection chain=forward in-interface=ISP1 new-connection-mark=ISP1forward passthrough=no
add action=mark-routing chain=prerouting connection-mark=ISP1forward in-interface-list=LAN new-routing-mark=toISP1 passthrough=yes
ну и маршрутизация, рекурсивная для того чтобы локальные подседки в основном сидели на первом провайдере и лезли на второго только при отвале первого
/ip route
add distance=1 gateway=1.1.1.1 routing-mark=toISP1
add distance=1 gateway=2.2.2.1 routing-mark=toISP2
add check-gateway=ping distance=1 gateway=8.8.8.8
add distance=2 gateway=8.8.4.4
add distance=1 dst-address=8.8.4.4/32 gateway=2.2.2.1 scope=10
add distance=1 dst-address=8.8.8.8/32 gateway=1.1.1.1 scope=10

но как понятно, возникает проблема с белыми адресами, ибо они тоже попадают под правило NAT. собственно как лучше сделать так, чтобы NAT для белых адресов был лишь в случае отвала их провайдера?


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

Legion.Leonhart писал(а): 07 сен 2020, 20:09 но как понятно, возникает проблема с белыми адресами, ибо они тоже попадают под правило NAT. собственно как лучше сделать так, чтобы NAT для белых адресов был лишь в случае отвала их провайдера?
Исключить их в правиле NAT'а на "своём" канале, на "чужом" не исключать (само собой сделать два правила, вместо одного).
Дальше все как обычно при настройке двух каналов.


Telegram: @thexvo
Legion.Leonhart
Сообщения: 5
Зарегистрирован: 07 сен 2020, 16:18

На самом деле так и сделано, но всё ещё есть задача как обьяснить микротику какую белую сеть через какого провайдера пускать. Если я делаю MANGLE правила типа
add action=mark-routing chain=prerouting in-interface=vlan-ISP1local new-routing-mark=toISP1 passthrough=no
add action=mark-routing chain=prerouting in-interface=vlan-ISP2local new-routing-mark=toISP2 passthrough=no
то интернет вроде работает и ходит по правильным провам, но остальные локалки в такой схеме не могут общаться с белыми подсетками, дак ещё и NATa не будет при падении прова...


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

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

Ну а соединения помечать не все выходящие из нужного vlan'а, а только те, которые при этом уходят наружу (так как out-interface ещё неизвестен, то адрес-листом оперировать).


Telegram: @thexvo
Legion.Leonhart
Сообщения: 5
Зарегистрирован: 07 сен 2020, 16:18

Не совсем догоняю последний абзац, Что должно быть в адрес листе?


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

Legion.Leonhart писал(а): 08 сен 2020, 10:32 Не совсем догоняю последний абзац, Что должно быть в адрес листе?
Например список всех заведомо "внутренних" адресов: 192.168.0.0/16 и т.д. + ваши белые подсети.
И использовать его с отрицанием (!).


Telegram: @thexvo
Legion.Leonhart
Сообщения: 5
Зарегистрирован: 07 сен 2020, 16:18

Я правильно понял, что все локальные подсетки и белые добавляю в лист LocalRout и добавляю в MANGLE маркировку для каждого прова типа
add action=mark-connection chain=prerouting dst-address-list=!LocalRout in-interface=vlan-ISP1local new-connection-mark=ISP1forward passthrough=yes
и меняю одно правило с примера выше с
add action=mark-routing chain=prerouting connection-mark=ISP1forward in-interface-list=LAN new-routing-mark=toISP1 passthrough=yes
на
add action=mark-routing chain=prerouting connection-mark=ISP1forward new-routing-mark=toISP1 passthrough=yes
и следующее правило тогда не нужно?
add action=mark-routing chain=prerouting in-interface=vlan-ISP1local new-routing-mark=toISP1 passthrough=no


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

Legion.Leonhart писал(а): 08 сен 2020, 17:25 Я правильно понял, что все локальные подсетки и белые добавляю в лист LocalRout и добавляю в MANGLE маркировку для каждого прова типа
add action=mark-connection chain=prerouting dst-address-list=!LocalRout in-interface=vlan-ISP1local new-connection-mark=ISP1forward passthrough=yes
Да.
Legion.Leonhart писал(а): 08 сен 2020, 17:25 и меняю одно правило с примера выше с
add action=mark-routing chain=prerouting connection-mark=ISP1forward in-interface-list=LAN new-routing-mark=toISP1 passthrough=yes
на
add action=mark-routing chain=prerouting connection-mark=ISP1forward new-routing-mark=toISP1 passthrough=yes
Нет, тут надо оставить, как было.
Legion.Leonhart писал(а): 08 сен 2020, 17:25 и следующее правило тогда не нужно?
add action=mark-routing chain=prerouting in-interface=vlan-ISP1local new-routing-mark=toISP1 passthrough=no
Да.

В итоге у вас будут в цепочке prerouting
1) два правила, маркирующие соединения из белых подесетей (обязательно верхними и с passthrough=yes).
2) дальше два правила, которые маркируют входящие соединения для каждого из провайдеров.
3) потом два правила, которые маркируют уже роутинг.

Для 2 и 3 можно поставить passthrough=no и их порядок не важен.

4) Плюс в цепочке output ещё два правила, которые так же маркируют роутинг на основе соединений (но уже без доп условий). Тоже можно passthrough=no.

Если надо будет добавить PCC балансировку для всех остальных "серых" подсетей, то достаточно добавить блок PCC между 1 и 2 и тоже с passthrough=yes.


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

Да, и ещё желательно в правилах, которые помечают соединения, всегда добавлять условие: connection-mark=no-mark


Telegram: @thexvo
Legion.Leonhart
Сообщения: 5
Зарегистрирован: 07 сен 2020, 16:18

xvo писал(а): 08 сен 2020, 17:54 Да, и ещё желательно в правилах, которые помечают соединения, всегда добавлять условие: connection-mark=no-mark
Да, это отличное замечание.
4) Плюс в цепочке output ещё два правила, которые так же маркируют роутинг на основе соединений (но уже без доп условий). Тоже можно passthrough=no.
Речь про эти правила?
add action=mark-routing chain=output connection-mark=fromISP1 new-routing-mark=toISP1 passthrough=no

Или ещё какие-то?


Ответить