PCC на 3 провайдера

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

Re: PCC на 3 провайдера

Сообщение Chupaka »

Да, всё верно. Для проверки ситуаций вроде "пакеты пропадают внутри провайдера" можно использовать дополнительные скрипты или https://wiki.mikrotik.com/wiki/Advanced ... _Scripting
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Посмотрите, пожалуйста, правильно ли я применил рекурсивные маршруты к данному примеру?

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

add dst-address=77.88.8.1 gateway=82.1.1.125 scope=10
add dst-address=77.88.8.2 gateway=82.2.2.117 scope=10
add dst-address=77.88.8.3 gateway=pppoe-out1_ByFly scope=10

add distance=1 gateway=77.88.8.1 routing-mark=ISP1-WAN1 check-gateway=ping
add distance=2 gateway=77.88.8.2 routing-mark=ISP1-WAN1 check-gateway=ping
add distance=3 gateway=77.88.8.3 routing-mark=ISP1-WAN1 check-gateway=ping

add distance=1 gateway=77.88.8.2 routing-mark=ISP1-WAN2 check-gateway=ping
add distance=2 gateway=77.88.8.3 routing-mark=ISP1-WAN2 check-gateway=ping
add distance=3 gateway=77.88.8.1 routing-mark=ISP1-WAN2 check-gateway=ping

add distance=1 gateway=77.88.8.3 routing-mark=ISP1-WAN3 check-gateway=ping
add distance=2 gateway=77.88.8.1 routing-mark=ISP1-WAN3 check-gateway=ping
add distance=3 gateway=77.88.8.2 routing-mark=ISP1-WAN3 check-gateway=ping
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

Эх, идея правильная, реализация, к сожалению, в случае с ByFly не сработает из-за "особенностей" RouterOS :( Там надо сделать так: создать PPP Profile (скопировать текущий), указать ему в Remote Address 77.88.8.3, навесить на подключение pppoe-out1_ByFly и убрать маршрут "add dst-address=77.88.8.3 gateway=pppoe-out1_ByFly scope=10"
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Ясно, спасибо. Из Вашего опыта - одного узла на линк в рекурсивном маршруте достаточно для определения "мёртвого" провайдера? И вообще, что лучше - использовать рекурсивные маршруты с несколькими узлами на линк или использовать дополнительные скрипты?
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

Для определения "мёртвого" - определённо достаточно. Больше одного надо для определения "живого", когда пингуемый узел недоступен по своей собственной причине, и провайдер не виноват :) Вы поработайте в таком режиме, если что-то не понравится - тогда и будете доделывать, согласно новым требованиям.
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Chupaka писал(а): 28 янв 2020, 18:37Вы поработайте в таком режиме, если что-то не понравится - тогда и будете доделывать, согласно новым требованиям.
Спасибо, буду пробовать.

Chupaka писал(а): 28 янв 2020, 16:54Эх, идея правильная, реализация, к сожалению, в случае с ByFly не сработает из-за "особенностей" RouterOS :(
К L2TP это тоже относится?
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

c0v0x писал(а): 29 янв 2020, 17:36 К L2TP это тоже относится?
Да, к любому PPP. Не работает там, где gateway=не-IP-адрес
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

В моём случае 3-го провайдера пока не подключили, поэтому тренируюсь на 2-х имеющихся. Проблема заключается в том, что проверить работоспособность на практике могу только несколько часов в неделю. Вроде PCC работает, но "меня терзают смутные сомнения"... Посмотрите, пожалуйста, конфиг:

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

/ip address
add address=192.168.11.1/24 comment="Local Area" interface=LAN-Bridge network=192.168.11.0
add address=87.*.*.19/28 comment="ISP1" interface=ether6-ISP1 network=87.*.*.16
add address=178.*.*.216/26 comment="ISP2" interface=ether7-ISP2 network=178.*.*.192

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

/ip firewall mangle
add action=mark-connection chain=prerouting comment=ISP1 in-interface=ether6-ISP1 new-connection-mark=from-ISP1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=from-ISP1 new-routing-mark=to-ISP1 passthrough=yes
add action=mark-routing chain=output connection-mark=from-ISP1 new-routing-mark=to-ISP1 passthrough=yes
add action=mark-routing chain=output new-routing-mark=to-ISP1 passthrough=yes src-address=87.*.*.19
add action=mark-connection chain=prerouting comment=ISP2 in-interface=ether7-ISP2 new-connection-mark=from-ISP2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=from-ISP2 new-routing-mark=to-ISP2 passthrough=yes
add action=mark-routing chain=output connection-mark=from-ISP2 new-routing-mark=to-ISP2 passthrough=yes
add action=mark-routing chain=output new-routing-mark=to-ISP2 passthrough=yes src-address=178.*.*.216
add action=mark-connection chain=prerouting comment="PCC 2/0" connection-state=new dst-address-type=!local new-connection-mark=ISP1-conn passthrough=yes \
    per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting comment="PCC 2/1" connection-state=new dst-address-type=!local new-connection-mark=ISP2-conn passthrough=yes \
    per-connection-classifier=both-addresses-and-ports:2/1
add action=mark-routing chain=prerouting comment=PCC connection-mark=ISP1-conn new-routing-mark=ISP1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP2-conn new-routing-mark=ISP2 passthrough=yes

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

/ip route rule
add src-address=87.*.*.19/32 table=to-ISP1
add src-address=178.*.*.216/32 table=to-ISP2
add dst-address=192.168.0.0/16 table=main
add dst-address=172.16.0.0/12 table=main
add dst-address=10.0.0.0/8 table=main
add routing-mark=ISP1 table=to-ISP1
add routing-mark=ISP2 table=to-ISP2

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

/ip route
add distance=1 gateway=172.29.9.9 routing-mark=ISP1
add distance=2 gateway=172.28.8.8 routing-mark=ISP1
add distance=1 gateway=172.28.8.8 routing-mark=ISP2
add distance=2 gateway=172.29.9.9 routing-mark=ISP2
add distance=1 dst-address=1.0.0.1/32 gateway=178.*.*.193 scope=10
add distance=1 dst-address=77.88.8.1/32 gateway=87.*.*.17 scope=10
add distance=1 dst-address=77.88.8.2/32 gateway=87.*.*.17 scope=10
add distance=1 dst-address=77.88.8.3/32 gateway=178.*.*.193 scope=10
add check-gateway=ping distance=1 dst-address=172.28.8.8/32 gateway=77.88.8.3 scope=10
add check-gateway=ping distance=1 dst-address=172.28.8.8/32 gateway=1.0.0.1 scope=10
add check-gateway=ping distance=1 dst-address=172.29.9.9/32 gateway=77.88.8.1 scope=10
add check-gateway=ping distance=1 dst-address=172.29.9.9/32 gateway=77.88.8.2 scope=10
Вот в таком виде, если с Тика сделать ping до любого внешнего узла, получаю в ответ "no route to host". Проблема решается добавлением следующих маршрутов:

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

/ip route
add check-gateway=ping distance=1 gateway=87.*.*.17
add check-gateway=ping distance=2 gateway=178.*.*.193
Так и должно быть? Или у меня где-то ошибка с маркировкой в mangle?
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

c0v0x писал(а): 10 фев 2020, 18:03 Вот в таком виде, если с Тика сделать ping до любого внешнего узла, получаю в ответ "no route to host". Проблема решается добавлением следующих маршрутов:

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

/ip route
add check-gateway=ping distance=1 gateway=87.*.*.17
add check-gateway=ping distance=2 gateway=178.*.*.193
Так и должно быть? Или у меня где-то ошибка с маркировкой в mangle?
Так должно быть. Особенность маршрутизации локальных пакетов (например, пинг с роутера): сначала происходит route lookup в таблице main (а в ней у вас сейчас нет маршрутов, поэтому no route to host), а затем в Mangle Output делается routing adjustment (по свеженавешенной routing mark) - и пакет уходит уже в новом направлении.
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Chupaka писал(а): 28 янв 2020, 12:45 Да, всё верно. Для проверки ситуаций вроде "пакеты пропадают внутри провайдера" можно использовать дополнительные скрипты или https://wiki.mikrotik.com/wiki/Advanced ... _Scripting
Кстати, недавно убрали эту статью из Wiki, почему-то...

Chupaka писал(а): 14 ноя 2019, 19:52 А вы так не делайте :) Вы сделайте так, как я написал: connection-mark=no-mark, а не new-connection-mark=no-mark. Т.е. не снимать метку, а НЕ обрабатывать коннекшены, на которых уже есть метка. Ну и routing-mark оставить просто ISP2-WAN2, не надо создавать никаких 80_443-ISP2-WAN2
Применил Ваши рекомендации другому участнику под себя. Посмотрите, пожалуйста, всё ли правильно?

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

/ip firewall mangle
add action=mark-connection chain=prerouting comment=ISP1 in-interface=ether6-ISP1 new-connection-mark=from-ISP1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=from-ISP1 new-routing-mark=to-ISP1 passthrough=yes
add action=mark-routing chain=output connection-mark=from-ISP1 new-routing-mark=to-ISP1 passthrough=yes
add action=mark-routing chain=output new-routing-mark=to-ISP1 passthrough=yes src-address=87.*.*.19

add action=mark-connection chain=prerouting comment=ISP2 in-interface=ether7-ISP2 new-connection-mark=from-ISP2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=from-ISP2 new-routing-mark=to-ISP2 passthrough=yes
add action=mark-routing chain=output connection-mark=from-ISP2 new-routing-mark=to-ISP2 passthrough=yes
add action=mark-routing chain=output new-routing-mark=to-ISP2 passthrough=yes src-address=178.*.*.216

add action=mark-connection chain=prerouting comment="PCC HTTP HTTPS 2/0" connection-state=new dst-address-type=!local dst-port=80,443 new-connection-mark=\
    ISP1-conn passthrough=yes per-connection-classifier=src-address:2/0 protocol=tcp
add action=mark-connection chain=prerouting comment="PCC HTTP HTTPS 2/1" connection-state=new dst-address-type=!local dst-port=80,443 new-connection-mark=\
    ISP2-conn passthrough=yes per-connection-classifier=src-address:2/1 protocol=tcp
add action=mark-connection chain=prerouting comment="PCC 2/0" connection-mark=no-mark connection-state=new dst-address-type=!local new-connection-mark=\
    ISP1-conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting comment="PCC 2/1" connection-mark=no-mark connection-state=new dst-address-type=!local new-connection-mark=\
    ISP2-conn passthrough=yes per-connection-classifier=both-addresses-and-ports:2/1

add action=mark-routing chain=prerouting comment=PCC connection-mark=ISP1-conn new-routing-mark=ISP1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP2-conn new-routing-mark=ISP2 passthrough=yes
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

c0v0x писал(а): 11 фев 2020, 13:03 Кстати, недавно убрали эту статью из Wiki, почему-то...
Какашки они потому что... Забрали доступ для не-сотрудников к редактированию статей, вот я и попросил удалить, пока перенёс на https://forum.mikrotik.com/viewtopic.php?f=23&t=157048, думаю, где лучше оставить на перманентное место дислокации...
c0v0x писал(а): 11 фев 2020, 13:03 Применил Ваши рекомендации другому участнику под себя. Посмотрите, пожалуйста, всё ли правильно?
Тут всё просто: если работает так, как ожидается - значит, всё правильно :) Пока, к сожалению, нет времени вычитывать...
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Chupaka писал(а): 11 фев 2020, 13:37Тут всё просто: если работает так, как ожидается - значит, всё правильно :) Пока, к сожалению, нет времени вычитывать...
Вроде всё работает, как надо :) Жалоб пока не поступало.
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Chupaka, конфигурация, которую я приводил выше, у меня в работе. Сегодня провайдер ISP1 приостанавливал доступ к услугам связи из-за неуплаты. При этом в листе маршрутизации была такая картина:
Изображение
Попытка пингануть из консоли терминала любой узел, заканчивалась таймаутом. Но если я выключал интерфейс ether6-ISP1, или вручную менял дистанцию на маршруте через шлюз 178.*.*.193 (интерфейс ether7-ISP2) с 2 на 1, то этот маршрут становился активным и всё начинало работать. Почему переключение не происходило автоматически?
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

В вашей конфигурации никак не регламентируются исходящие от роутера соединения, поэтому они шли в таблице main - а там нет failover'а. При этом пакеты от клиентов (маркированные как ISP1/2) должны были нормально идти через ISP2, судя по скриншоту.
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

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

Re: PCC на 3 провайдера

Сообщение Chupaka »

Например, так:

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

/ip firewall mangle
add chain=output connection-mark=no-mark action=mark-routing new-routing-mark=ISP1
Это отправит весь непомеченный трафик роутера через таблицу ISP1.
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

Re: PCC на 3 провайдера

Сообщение c0v0x »

Правильно ли я понимаю, что это правило должно быть самым последним в mangle?
Аватара пользователя
Chupaka
Сообщения: 3878
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: PCC на 3 провайдера

Сообщение Chupaka »

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