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

RIP, OSFP, BGP, MPLS/VPLS
c0v0x
Сообщения: 9
Зарегистрирован: 24 янв 2020, 17:57

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

Сообщение c0v0x »

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

Chupaka писал(а):
28 янв 2020, 16:54
Эх, идея правильная, реализация, к сожалению, в случае с ByFly не сработает из-за "особенностей" RouterOS :(
К L2TP это тоже относится?

Аватара пользователя
Chupaka
Сообщения: 2653
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

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

c0v0x
Сообщения: 9
Зарегистрирован: 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
Сообщения: 2653
Зарегистрирован: 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
Сообщения: 9
Зарегистрирован: 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
Сообщения: 2653
Зарегистрирован: 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
Сообщения: 9
Зарегистрирован: 24 янв 2020, 17:57

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

Сообщение c0v0x »

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

c0v0x
Сообщения: 9
Зарегистрирован: 24 янв 2020, 17:57

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

Сообщение c0v0x »

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

Аватара пользователя
Chupaka
Сообщения: 2653
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

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

Сообщение Chupaka »

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

c0v0x
Сообщения: 9
Зарегистрирован: 24 янв 2020, 17:57

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

Сообщение c0v0x »

Подскажите, пожалуйста, как нужно правильно регламентировать исходящие соединения? Может какие-то примеры есть?