====== Mikrotik: балансировка двух WAN используя PCC ======
Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
[[https://курсы-по-ит.рф/lp-mikrotik-mtcna?utm_source=wiki-rtza&utm_medium=cpc&utm_campaign=4| Узнать подробности]]
Взято отсюда: https://aacable.wordpress.com/2011/07/27/mikrotik-dual-wan-load-balancing-using-pcc-method-complete-script-by-zaib/
Подробные пояснения: http://wiki.mikrotik.com/wiki/Manual:PCC и http://wiki.mikrotik.com/wiki/How_PCC_works_%28beginner%29
Еще полезная статейка: https://habr.com/post/313342/
===== Начальные условия =====
* 2 канала WAN от разных провайдеров, с разными скоростями
* Провайдер1 WAN1 (192.168.1.1) - 10 Мбит
* Провайдер2 WAN2 (192.168.2.1) - 20 Мбит
===== Необходимо реализовать =====
* Основной канал WAN2 и он должен использоваться интенсивнее (2/3 всего объема трафика)
* Балансировку нагрузки между каналами
* Роутер должен отвечать на запросы (пришедшие с любого провайдера) именно с того интерфейса, откуда пришел запрос
Настройка "both addresses and ports" может не всегда верно работать с банк-клиентами и некоторыми форумами, т.к. реализует наиболее случайное распределение. В этом случае лучше использовать "src-address" - тогда каждый компьютер будет получать на время работы один и тот же маршрут
/ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local
add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=WAN1
add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=WAN2
/ip firewall mangle
add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_conn
add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_conn
add chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1
add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2
add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes
add chain=prerouting connection-mark=WAN1_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN1
add chain=prerouting connection-mark=WAN2_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN2
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_WAN1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_WAN2 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=ping
/ip firewall nat
add chain=srcnat out-interface=WAN1 action=masquerade
add chain=srcnat out-interface=WAN2 action=masquerade
Если каналы неравны (как у меня), то нужно изменить
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes
на
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/2 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes
===== Определенный порт через определенного провайдера =====
Спасибо за подсказку maxim.naidenov:
;;; Winbox
chain=prerouting action=mark-routing new-routing-mark=to_WAN1 passthrough=no protocol=tcp dst-address-type=!local in-interface=bridge-local dst-port=8291 connection-mark=no-mark
;;; Wargaming, RU9
chain=prerouting action=mark-routing new-routing-mark=to_WAN2 passthrough=no dst-address=xxx.xxx.xxx.0/24 dst-address-type=!local in-interface=bridge-local connection-mark=no-mark
===== Балансировка каналов и IPSEC =====
При эксплуатации IPSEC и балансировке каналов выяснился интересный факт: при установке IPSEC не получается обменяться всеми ключами. IPSEC вроде бы как и поднимается, но работать не работает. Если посмотреть IP -> IPsec -> Installed SAs - можно увидеть что счетчик "Current Bytes" для одного из ключей равен 0, т.е. обмен ключами все-таки не прошел. Для правильной работы необходимо добавить еще два правила:
> /ip firewall mangle
> add chain=output action=mark-routing new-routing-mark=ISP1_conn passthrough=no connection-mark=ISP1_conn
> add chain=output action=mark-routing new-routing-mark=ISP2_conn passthrough=no connection-mark=ISP2_conn
При этом в таблице маршрутизации должны быть маршруты с соответствующими Routing Mark
Было (неверно):
> add chain=output action=mark-connection new-connection-mark=ISP1_conn passthrough=no out-interface=WAN1
> add chain=output action=mark-connection new-connection-mark=ISP2_conn passthrough=no out-interface=WAN2
{{tag>mikrotik PCC балансировка}}