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

RIP, OSFP, BGP, MPLS/VPLS
joker
Сообщения: 45
Зарегистрирован: 29 апр 2019, 16:22

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

Сообщение joker »

Chupaka писал(а): 13 ноя 2019, 15:58 А вы не хотите просто per-connection-classifier=both-addresses-and-ports сменить на per-connection-classifier=src-address? Если не хотите - то сделайте два набора правил:
1) порты 80/tcp,443/tcp - per-connection-classifier=src-address
2) всё остальное - per-connection-classifier=both-addresses-and-ports

Проблема возникает потому, что несколько соединений даже к одному IP могут пойти через разные каналы.
Сделал по вашей рекомендации.
Гляньте своим профессиональным глазом, так правильно будет?
И где правильно поставить passthrough=yes или no

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

/ip firewall mangle
add action=mark-connection chain=input comment="Input Mark connection" in-interface=ether1-wan1 new-connection-mark=ISP3-WAN1-connection passthrough=yes
add action=mark-connection chain=input in-interface=ether2-wan2 new-connection-mark=ISP3-WAN2-connection passthrough=yes
add action=mark-connection chain=input in-interface=pppoe-out1_ByFly new-connection-mark=ISP3-WAN3-connection passthrough=yes

add action=mark-connection chain=prerouting comment="Per Connection Classifier HTTPS HTTP" connection-state=new disabled=yes dst-port=80,443 new-connection-mark=ISP1-WAN1-80-443 passthrough=yes per-connection-classifier=src-address:3/0 protocol=\tcp
add action=mark-connection chain=prerouting connection-state=new disabled=yes dst-port=80,443 new-connection-mark=ISP2-WAN2-80-443 passthrough=yes per-connection-classifier=src-address:3/1 protocol=tcp
add action=mark-connection chain=prerouting connection-state=new disabled=yes dst-port=80,443 new-connection-mark=ISP3-WAN3-80-443 passthrough=yes per-connection-classifier=src-address:3/2 protocol=tcp
add action=mark-routing chain=prerouting connection-mark=ISP1-WAN1-80-443 disabled=yes new-routing-mark=80_443-ISP1-WAN1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP2-WAN2-80-443 disabled=yes new-routing-mark=80_443-ISP2-WAN2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP3-WAN3-80-443 disabled=yes new-routing-mark=80_443-ISP3-WAN3 passthrough=yes

add action=mark-connection chain=prerouting comment="Per Connection Classifier" connection-state=new new-connection-mark=ISP3-WAN1-connection passthrough=yes per-connection-classifier=both-addresses-and-ports:3/0
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=ISP3-WAN2-connection passthrough=yes per-connection-classifier=both-addresses-and-ports:3/1
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=ISP3-WAN3-connection passthrough=yes per-connection-classifier=both-addresses-and-ports:3/2
add action=mark-routing chain=prerouting connection-mark=ISP3-WAN1-connection new-routing-mark=ISP1-WAN1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP3-WAN2-connection new-routing-mark=ISP2-WAN2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP3-WAN3-connection new-routing-mark=ISP3-WAN3 passthrough=yes

add action=mark-routing chain=output comment="Output Mark Routing" connection-mark=ISP3-WAN1-connection new-routing-mark=ISP1-WAN1 passthrough=yes
add action=mark-routing chain=output connection-mark=ISP3-WAN2-connection new-routing-mark=ISP2-WAN2 passthrough=yes
add action=mark-routing chain=output connection-mark=ISP3-WAN3-connection new-routing-mark=ISP3-WAN3 passthrough=yes

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

/ip route
add distance=1 gateway=pppoe-out1_ByFly routing-mark=ISP3-WAN3
add distance=1 gateway=82.1.1.125 routing-mark=ISP1-WAN1
add distance=1 gateway=82.2.2.117 routing-mark=ISP2-WAN2
add comment=lan-out-80_443-ISP1-WAN1 disabled=yes distance=1 gateway=82.1.1.125 routing-mark=80_443-ISP1-WAN1
add disabled=yes distance=1 gateway=82.2.2.117 routing-mark=80_443-ISP2-WAN2
add disabled=yes distance=1 gateway=pppoe-out1_ByFly routing-mark=80_443-ISP3-WAN3
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka »

В три правила comment="Per Connection Classifier" и дальше добавьте connection-mark=none, чтобы они не перемаркировывали то, что вы в "Per Connection Classifier HTTPS HTTP" уже намаркировали.
joker писал(а): 14 ноя 2019, 11:42 И где правильно поставить passthrough=yes или no
Ну, если дальнейшая обработка пакета в данной цепочке не требуется после срабатывания заданного правила - тогда =no, если дальше что-то ещё должно с пакетом произойти (навесить, например, routing mark вдобавок к только что накинутой connection mark) - тогда =yes :)
joker
Сообщения: 45
Зарегистрирован: 29 апр 2019, 16:22

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

Сообщение joker »

Chupaka писал(а): 14 ноя 2019, 14:51 В три правила comment="Per Connection Classifier" и дальше добавьте connection-mark=none, чтобы они не перемаркировывали то, что вы в "Per Connection Classifier HTTPS HTTP" уже намаркировали.
Если я сделаю в 3-х правилах под комментарием "Per Connection Classifier" action=mark-connection new-connection-mark=no-mark , то следующие 3 правила action=mark-routing не будут иметь смысла. Маркированных коннекшинов не будет и в роутинг не чего будет загонять.
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka »

А вы так не делайте :) Вы сделайте так, как я написал: connection-mark=no-mark, а не new-connection-mark=no-mark. Т.е. не снимать метку, а НЕ обрабатывать коннекшены, на которых уже есть метка. Ну и routing-mark оставить просто ISP2-WAN2, не надо создавать никаких 80_443-ISP2-WAN2
c0v0x
Сообщения: 10
Зарегистрирован: 24 янв 2020, 17:57

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

Сообщение c0v0x »

Chupaka, подскажите, правильно ли я понимаю, что если в данном примере у одного из провайдеров случатся проблемы (шлюз доступен, но трафик дальше него не идёт), то Тик всё равно будет продолжать слать трафик на этого провайдера? Как тогда можно решить проблему с отказоустойчивостью в PCC?
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 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
Сообщения: 3879
Зарегистрирован: 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
Сообщения: 3879
Зарегистрирован: 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
Сообщения: 3879
Зарегистрирован: 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
Сообщения: 3879
Зарегистрирован: 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
Сообщения: 3879
Зарегистрирован: 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
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

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

Сообщение Chupaka »

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

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

Сообщение c0v0x »

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

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

Сообщение Chupaka »

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