Не могу настроить рекурсивную маршрутизацию

Раздел для тех, кто начинает знакомиться с MikroTik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
alexns
Сообщения: 12
Зарегистрирован: 25 сен 2020, 07:48

Добрый день!
Есть два интернета со статическими ip. Решил настроить рекурсивную маршрутизацию для переключения каналов. Перечитал кучу статей, сделал настройки. Но не работает. Причину понять не могу. Прошу помочь.

В роуте настроил так:
в качестве Шлюз 1,2 провайдера вставлял IP адреса.

Два маршрута для промаркированого трафика
add distance=1 gateway="Шлюз 1 провайдера" routing-mark="ISP 1"
add distance=1 gateway="Шлюз 2 провайдера" routing-mark="ISP 2"

Маршрут по умолчанию
add distance=1 gateway="Шлюз 1 провайдера"
add distance=2 gateway="Шлюз 2 провайдера"

И настроил рекурсивную маршрутизацию , выбрал для проверки работоспособности каналов IP 8.8.4.4 и 208.67.222.222

add check-gateway=ping distance=1 gateway=8.8.4.4 scope=10
add check-gateway=ping distance=2 gateway=208.67.222.222 scope=10

add distance=1 dst-address=8.8.4.4/32 gateway="Шлюз 1 провайдера" scope=10
add distance=1 dst-address=208.67.222.222/32 gateway="Шлюз 2 провайдера" scope=10

Проверяю схему, отключаю оптику, на втором провайдере, и ни чего не происходит, хотя должно по сути сделать это канал unreachable и выключить маршруты
add check-gateway=ping distance=2 gateway=208.67.222.222 scope=10 и
add distance=1 gateway="Шлюз 2 провайдера" routing-mark="ISP 2"

Если ставлю проверку пинга в одно из этих правил, то все отрабатывает, маршрут выключает, но я так понимаю он напрямую пингует шлюз, а он не доступен.
add check-gateway=ping distance=2 distance=1 dst-address=208.67.222.222/32 gateway="Шлюз 2 провайдера" scope=10
или add check-gateway=ping distance=1 gateway="Шлюз 2 провайдера" routing-mark="ISP 2"

Что делаю не так?

еще по ходу возник вопрос а будет ли работать такая схема, если прописать два шлюза... что бы трафик разбивался на два канала, с проверкой удаленного ip
add check-gateway=ping distance=1 gateway=208.67.222.222,8.8.4.4 scope=10


yarvelov
Сообщения: 92
Зарегистрирован: 15 июл 2018, 02:08

viewtopic.php?p=74185#p74185

Тут все что вам нужно, что бы работало резервирование.

2 адреса для проверки мне не понятно зачем.
Прямые дефолтные маршруты в этом случае совсем лишние.

Ну или например так:
https://youtu.be/X4jQDPIJ4tU?t=978


Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Нет полной информации. При рекурсивной маршрутизации очень важно правильно промаркировать трафик.

Предположим, что мы имеем два соединения с провайдерами
ISP1 имеет шлюз 10.201.10.254 и выдает нам адрес 10.201.10.1 через ether4
ISP1 имеет шлюз 172.27.31.1 и выдает нам адрес 172.27.29.27 через ether2
Сначала маркируем входящие соединения на интерфейсах и метим маршруты на выходе:

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

/ip firewall mangle
add action=mark-connection chain=input in-interface=ether4 \
    new-connection-mark=Input/ISP1
add action=mark-routing chain=output connection-mark=Input/ISP1 \
    new-routing-mark=ISP1 passthrough=no
add action=mark-connection chain=input in-interface=ether2 \
    new-connection-mark=Input/ISP2
add action=mark-routing chain=output connection-mark=Input/ISP2 \
    new-routing-mark=ISP2 passthrough=no

Теперь правилами маршрутизации ограничиваем маркированные маршруты своими таблицами

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

/ip route rule
add action=lookup-only-in-table routing-mark=ISP1 table=ISP1
add action=lookup-only-in-table routing-mark=ISP2 table=ISP2
Далее задаем маршруты с учетом применения параметра scope=10, разной дистанции для разных провайдеров и отдельного маршрута для маркированного трафика. В целом это уже обеспечит переключение каналов при обрыве.

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

/ip route
add distance=1 gateway=10.201.10.254 routing-mark=ISP1
add distance=1 gateway=172.27.31.1 routing-mark=ISP2
add distance=1 dst-address=8.8.4.4/32 gateway=172.27.31.1 scope=10
add distance=1 dst-address=8.8.8.8/32 gateway=10.201.10.254 scope=10
add check-gateway=ping distance=1 gateway=8.8.8.8 target-scope=30
add check-gateway=ping distance=2 gateway=8.8.4.4 target-scope=30
Но хотелось бы, чтобы ответы отправлялись через те интерфейсы, с которых пришли. Составляем список BOGON

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

/ip firewall address-list
add list="BOGONS" address=0.0.0.0/8
add list="BOGONS" address=10.0.0.0/8
add list="BOGONS" address=100.64.0.0/10
add list="BOGONS" address=127.0.0.0/8
add list="BOGONS" address=169.254.0.0/16
add list="BOGONS" address=172.16.0.0/12
add list="BOGONS" address=192.0.0.0/24
add list="BOGONS" address=192.0.2.0/24
add list="BOGONS" address=192.168.0.0/16
add list="BOGONS" address=198.18.0.0/15
add list="BOGONS" address=198.51.100.0/24
add list="BOGONS" address=203.0.113.0/24
add list="BOGONS" address=224.0.0.0/3
Маркируем на выходе все маршруты, отданные не локальными сетями

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

/ip firewall mangle
add action=mark-routing chain=output dst-address-list=!BOGONS \
    new-routing-mark=ISP1 src-address=10.201.10.1
add action=mark-routing chain=output dst-address-list=!BOGONS \
    new-routing-mark=ISP2 src-address=172.27.29.27
Теперь очередь маркировки соединений на входящих интерфейсах, и затем маршрутов по этим меткам, но теперь в цепочке prerouting, это важно!!!

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

/ip firewall mangle
add action=mark-connection chain=prerouting in-interface=ether4 \
    new-connection-mark=Forward/ISP1
add action=mark-routing chain=prerouting connection-mark=Forward/ISP1 \
    in-interface=!ether4 new-routing-mark=ISP1 passthrough=no
add action=mark-connection chain=prerouting in-interface=ether2 \
    new-connection-mark=Forward/ISP2
add action=mark-routing chain=prerouting connection-mark=Forward/ISP2 \
    in-interface=!ether2 new-routing-mark=ISP2 passthrough=no

Теперь роутер знает что откуда и куда. На этом настройку можно и закончить.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
yarvelov
Сообщения: 92
Зарегистрирован: 15 июл 2018, 02:08

podarok66 писал(а): 02 окт 2020, 20:17 Нет полной информации. При рекурсивной маршрутизации очень важно правильно промаркировать трафик.

Предположим, что мы имеем два соединения с провайдерами
ISP1 имеет шлюз 10.201.10.254 и выдает нам адрес 10.201.10.1 через ether4
ISP1 имеет шлюз 172.27.31.1 и выдает нам адрес 172.27.29.27 через ether2
Сначала маркируем входящие соединения на интерфейсах и метим маршруты на выходе:

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

/ip firewall mangle
add action=mark-connection chain=input in-interface=ether4 \
    new-connection-mark=Input/ISP1
add action=mark-routing chain=output connection-mark=Input/ISP1 \
    new-routing-mark=ISP1 passthrough=no
add action=mark-connection chain=input in-interface=ether2 \
    new-connection-mark=Input/ISP2
add action=mark-routing chain=output connection-mark=Input/ISP2 \
    new-routing-mark=ISP2 passthrough=no

Теперь правилами маршрутизации ограничиваем маркированные маршруты своими таблицами

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

/ip route rule
add action=lookup-only-in-table routing-mark=ISP1 table=ISP1
add action=lookup-only-in-table routing-mark=ISP2 table=ISP2
Далее задаем маршруты с учетом применения параметра scope=10, разной дистанции для разных провайдеров и отдельного маршрута для маркированного трафика. В целом это уже обеспечит переключение каналов при обрыве.

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

/ip route
add distance=1 gateway=10.201.10.254 routing-mark=ISP1
add distance=1 gateway=172.27.31.1 routing-mark=ISP2
add distance=1 dst-address=8.8.4.4/32 gateway=172.27.31.1 scope=10
add distance=1 dst-address=8.8.8.8/32 gateway=10.201.10.254 scope=10
add check-gateway=ping distance=1 gateway=8.8.8.8 target-scope=30
add check-gateway=ping distance=2 gateway=8.8.4.4 target-scope=30
Разве эта тема с маркировкой маршрутов критична для простого резервирования?
Это больше похоже на настройку dual wan для параллельной работы двух каналов.


Аватара пользователя
podarok66
Модератор
Сообщения: 4360
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Это работает, без оговорок и исключений в виде банк-клентов, баз данных и тому подобной трихомудии. Да, тут немного больше маркировать, да схема кажется избыточной. Но пашет на ура. И если надо вывести кого-то через определённого провайдера, тоже не сложно осуществить. Это задел для будущих хотелок начинающему админу :-)


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
alexns
Сообщения: 12
Зарегистрирован: 25 сен 2020, 07:48

yarvelov писал(а): 02 окт 2020, 14:05 viewtopic.php?p=74185#p74185

Тут все что вам нужно, что бы работало резервирование.

2 адреса для проверки мне не понятно зачем.
Прямые дефолтные маршруты в этом случае совсем лишние.

Ну или например так:
https://youtu.be/X4jQDPIJ4tU?t=978
Спасибо, тему прочитал, у меня вроде так все и настроено, прямые дефолтные маршруты отключал.
Видео посмотрел, у него там вообще через какието обманные маршруты сделано.. тоже не заработало так..


alexns
Сообщения: 12
Зарегистрирован: 25 сен 2020, 07:48

podarok66 писал(а): 02 окт 2020, 20:17 Нет полной информации. При рекурсивной маршрутизации очень важно правильно промаркировать трафик.

Предположим, что мы имеем два соединения с провайдерами
ISP1 имеет шлюз 10.201.10.254 и выдает нам адрес 10.201.10.1 через ether4
ISP1 имеет шлюз 172.27.31.1 и выдает нам адрес 172.27.29.27 через ether2
Сначала маркируем входящие соединения на интерфейсах и метим маршруты на выходе:

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

/ip firewall mangle
add action=mark-connection chain=input in-interface=ether4 \
    new-connection-mark=Input/ISP1
add action=mark-routing chain=output connection-mark=Input/ISP1 \
    new-routing-mark=ISP1 passthrough=no
add action=mark-connection chain=input in-interface=ether2 \
    new-connection-mark=Input/ISP2
add action=mark-routing chain=output connection-mark=Input/ISP2 \
    new-routing-mark=ISP2 passthrough=no

Теперь правилами маршрутизации ограничиваем маркированные маршруты своими таблицами

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

/ip route rule
add action=lookup-only-in-table routing-mark=ISP1 table=ISP1
add action=lookup-only-in-table routing-mark=ISP2 table=ISP2
Далее задаем маршруты с учетом применения параметра scope=10, разной дистанции для разных провайдеров и отдельного маршрута для маркированного трафика. В целом это уже обеспечит переключение каналов при обрыве.

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

/ip route
add distance=1 gateway=10.201.10.254 routing-mark=ISP1
add distance=1 gateway=172.27.31.1 routing-mark=ISP2
add distance=1 dst-address=8.8.4.4/32 gateway=172.27.31.1 scope=10
add distance=1 dst-address=8.8.8.8/32 gateway=10.201.10.254 scope=10
add check-gateway=ping distance=1 gateway=8.8.8.8 target-scope=30
add check-gateway=ping distance=2 gateway=8.8.4.4 target-scope=30
Но хотелось бы, чтобы ответы отправлялись через те интерфейсы, с которых пришли. Составляем список BOGON

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

/ip firewall address-list
add list="BOGONS" address=0.0.0.0/8
add list="BOGONS" address=10.0.0.0/8
add list="BOGONS" address=100.64.0.0/10
add list="BOGONS" address=127.0.0.0/8
add list="BOGONS" address=169.254.0.0/16
add list="BOGONS" address=172.16.0.0/12
add list="BOGONS" address=192.0.0.0/24
add list="BOGONS" address=192.0.2.0/24
add list="BOGONS" address=192.168.0.0/16
add list="BOGONS" address=198.18.0.0/15
add list="BOGONS" address=198.51.100.0/24
add list="BOGONS" address=203.0.113.0/24
add list="BOGONS" address=224.0.0.0/3
Маркируем на выходе все маршруты, отданные не локальными сетями

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

/ip firewall mangle
add action=mark-routing chain=output dst-address-list=!BOGONS \
    new-routing-mark=ISP1 src-address=10.201.10.1
add action=mark-routing chain=output dst-address-list=!BOGONS \
    new-routing-mark=ISP2 src-address=172.27.29.27
Теперь очередь маркировки соединений на входящих интерфейсах, и затем маршрутов по этим меткам, но теперь в цепочке prerouting, это важно!!!

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

/ip firewall mangle
add action=mark-connection chain=prerouting in-interface=ether4 \
    new-connection-mark=Forward/ISP1
add action=mark-routing chain=prerouting connection-mark=Forward/ISP1 \
    in-interface=!ether4 new-routing-mark=ISP1 passthrough=no
add action=mark-connection chain=prerouting in-interface=ether2 \
    new-connection-mark=Forward/ISP2
add action=mark-routing chain=prerouting connection-mark=Forward/ISP2 \
    in-interface=!ether2 new-routing-mark=ISP2 passthrough=no

Теперь роутер знает что откуда и куда. На этом настройку можно и закончить.
Не понятно почему важно правильно промаркировать трафик, вроде некоторые примеры показаны вообще без маркировки и работают.
Но в любом случаем у меня все маркировано:
И направлены часть пользователей через одного провайдера, остальные через другого. !Other- все внутренние подсети

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

add action=mark-connection chain=prerouting connection-mark=no-mark in-interface=ether-1 new-connection-mark="ISP 1 -> Input" passthrough=no
add action=mark-routing chain=prerouting connection-mark="ISP 1 -> Input" in-interface-list=!WAN new-routing-mark="ISP 1" passthrough=no

add action=mark-connection chain=prerouting connection-mark=no-mark in-interface=ether-2 new-connection-mark="ISP 2 -> Input" passthrough=no
add action=mark-routing chain=prerouting connection-mark="ISP 2 -> Input" in-interface-list=!WAN new-routing-mark="ISP 2" passthrough=no

add action=mark-routing chain=output connection-mark="ISP 1 -> Input" new-routing-mark="ISP 1" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 2 -> Input" new-routing-mark="ISP 2" passthrough=no

add action=mark-routing chain=prerouting dst-address-list=!Other new-routing-mark="ISP 2" passthrough=no src-address=192.168.50.2
add action=mark-routing chain=prerouting dst-address-list=!Other new-routing-mark="ISP 1" passthrough=no src-address=192.168.50.0/24

Только в правилах стоить просто lookup

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

add src-address=белый ip 1 провайдера/32 table="ISP 1"
add src-address=белый ip 2 провайдера/32 table="ISP 2"
И все равно check-gateway=ping не отрабатывает, и при отключении какого то провайдера, те пользователи которые должны идти через него просто перестают работать.. Хотя по логике, если в firewall если я запрещаю пинги на внешний ip, маршрут должен отключаться..


yarvelov
Сообщения: 92
Зарегистрирован: 15 июл 2018, 02:08

Так когда вы отключаете маршрут до этого адреса в routes, с тика он остается доступен?
Если да, то косяк в правиле блокирующем пинг до этого адреса для второго провайдера.


alexns
Сообщения: 12
Зарегистрирован: 25 сен 2020, 07:48

yarvelov писал(а): 05 окт 2020, 10:33 Так когда вы отключаете маршрут до этого адреса в routes, с тика он остается доступен?
Если да, то косяк в правиле блокирующем пинг до этого адреса для второго провайдера.
В файрволе я блокирую пинг с этого интерфейса до проверяемого адреса.

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

add action=drop chain=output  dst-address=208.67.222.222 out-interface=ether-1 protocol=icmp
И я так понимаю должен выключиться этот маршрут

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

add check-gateway=ping distance=2 gateway=208.67.222.222 scope=10
И которые с ним связаны

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

add distance=1 gateway="Шлюз 2 провайдера" routing-mark="ISP 2"
add distance=1 dst-address=208.67.222.222/32 gateway="Шлюз 2 провайдера" scope=10


yarvelov
Сообщения: 92
Зарегистрирован: 15 июл 2018, 02:08

ну уменьшите количество условий хотя бы так: add action=drop chain=output dst-address=208.67.222.222 out-interface=ether-1
и проверьте, прямо руками из терминала, остается связь или нет.


Ответить