Jump to content
Калькуляторы

Mikrotik не могу нормально настроить 3 провайдера с балансировкой

Добрый день.

Не могу никак побороть проблему работы 3х провайдеров одновременно.

Имеем, 3 канала (30/90/500) Mbit/s от разных провайдеров.

Статические белые IP, роутер Mikrotik CCR1009

 

До появления 500Mbit/s всё работало и было настроено ECMP load balancing with masquerade. https://wiki.mikrotik.com/wiki/ECMP_loa ... masquerade

А именно Промаркированы input и output для 2х провайдеров.

Исходя из инструкции WIKI, для каждого канала для своего routing_mark и общий, где я казала 1:3 шлюзы что бы распаралелить нагрузку. / ip route add dst-address=0.0.0.0/0 gateway=1.1.1.1,1.1.1.1,1.1.1.1,2.2.2.2 check-gateway=ping

 

Добавляю 3й провайдер, прописываю аналогично 2м в Mangle правила, добавляю маршрут с маркировкой. Всё работает, но если добавить в эту конструкцию шлюз 500Mbit/s / ip route add dst-address=0.0.0.0/0 gateway=1.1.1.1,1.1.1.1,2.2.2.2,3.3.3.3,3.3.3.3,3.3.3.3,3.3.3.3 check-gateway=ping тоже всё работает, исходящие соеденения паралелятся по разным маршрутам, но вот все внутренние ресурсы сети (сайты, приложения, сервисы) перестают быть доступны из мира. Подскажите куда копать?

 

p.s пробывал настраивать роутер https://wiki.mikrotik.com/wiki/Manual:PCC

то же самое, всё работает, но доступ из мира на внутренние ресурсы, или очень долго заходит или не заходит вовсе.

 

пример проброса портов у меня

;;; ftp

chain=dstnat action=dst-nat to-addresses=192.168.101.85 to-ports=21 protocol=tcp dst-address=!192.168.101.0/24

dst-address-type=local dst-port=21 log=no log-prefix=""

Share this post


Link to post
Share on other sites

sensor, у Вас, скорее всего, перемаркировываются маршруты. Посмотрите в "connections".

Маркировку делать надо по соединениям, для новых еще не маркированых соединений - критерий "connection state = new" и "connection mark = no-mark". Затем маркировать маршруты для пакетов принадлежащие этим соединениям.

Промаркированы input и output для 2х провайдеров

Если у вас внутренние ресурсы проброшены через NAT (проброшены порты), то маркировать нужно не input и output, а prerouting и output. Prerouting для входящих извне.

Edited by nkusnetsov

Share this post


Link to post
Share on other sites

Вот мой MANGLE я делал всё по вики или инструкциям в сети.

 

0 chain=input action=mark-connection new-connection-mark=gic_conn passthrough=yes in-interface=gic log=no log-prefix=">

 

1 chain=input action=mark-connection new-connection-mark=datagroup_conn passthrough=yes in-interface=datagroup log=no

log-prefix=""

 

2 chain=input action=mark-connection new-connection-mark=triolan_conn passthrough=yes in-interface=triolan log=no

log-prefix=""

 

3 chain=output action=mark-routing new-routing-mark=to_gic passthrough=yes connection-mark=gic_conn log=no

log-prefix=""

 

4 chain=output action=mark-routing new-routing-mark=to_datagroup passthrough=yes connection-mark=datagroup_conn log=no

log-prefix=""

 

5 chain=output action=mark-routing new-routing-mark=to_triolan passthrough=yes connection-mark=triolan_conn log=no

log-prefix=""

 

6 chain=prerouting action=accept dst-address=1.1.1.0/23 in-interface=NLT_BRIDGE log=no log-prefix=""

 

7 chain=prerouting action=accept dst-address=2.2.2.2/30 in-interface=NLT_BRIDGE log=no log-prefix=""

 

8 chain=prerouting action=accept dst-address=3.3.3.3/24 in-interface=NLT_BRIDGE log=no log-prefix=""

 

9 chain=prerouting action=accept dst-address=192.168.101.0/24 in-interface=NLT_BRIDGE log=no log-prefix=""

 

10 chain=prerouting action=mark-connection new-connection-mark=datagroup_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/0 log=no log-prefix=""

 

11 chain=prerouting action=mark-connection new-connection-mark=gic_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/1 log=no log-prefix=""

 

12 chain=prerouting action=mark-connection new-connection-mark=gic_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/2 log=no log-prefix=""

 

13 chain=prerouting action=mark-connection new-connection-mark=triolan_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/3 log=no log-prefix=""

 

14 chain=prerouting action=mark-connection new-connection-mark=triolan_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/4 log=no log-prefix=""

 

15 chain=prerouting action=mark-connection new-connection-mark=triolan_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/5 log=no log-prefix=""

 

16 chain=prerouting action=mark-connection new-connection-mark=triolan_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/6 log=no log-prefix=""

 

17 chain=prerouting action=mark-routing new-routing-mark=to_gic passthrough=yes connection-mark=gic_conn

in-interface=NLT_BRIDGE log=no log-prefix=""

 

18 chain=prerouting action=mark-routing new-routing-mark=to_datagroup passthrough=yes connection-mark=datagroup_conn

in-interface=NLT_BRIDGE log=no log-prefix=""

 

19 chain=prerouting action=mark-routing new-routing-mark=to_triolan passthrough=yes connection-mark=triolan_conn

in-interface=NLT_BRIDGE log=no log-prefix=""

 

 

РОУТЫ Я прописал так

/ip routeA

add dst-address=0.0.0.0/0 gateway=1.1.1.1 routing-mark=to_gic check-gateway=ping

add dst-address=0.0.0.0/0 gateway=2.2.2.2 routing-mark=to_datagroup check-gateway=ping

add dst-address=0.0.0.0/0 gateway=3.3.3.3 routing-mark=to_triolan check-gateway=ping

 

add dst-address=0.0.0.0/0 gateway=1.1.1.1 distance=1 check-gateway=ping

add dst-address=0.0.0.0/0 gateway=2.2.2.2 distance=2 check-gateway=ping

add dst-address=0.0.0.0/0 gateway=3.3.3.3 distance=3 check-gateway=ping

 

на этих настройках у меня всё работае, но доступ из мира к локальным ресурсам проимходит очень долго, к примеру сайт может открыватся 15 секунд.

Edited by sensor

Share this post


Link to post
Share on other sites

sensor, покажите NAT (srcnat+dstnat) тоже пожалуйста.

А если добавите forward - будет вообще замечательно.

Edited by nkusnetsov

Share this post


Link to post
Share on other sites

0 ;;; NAT

chain=srcnat action=masquerade src-address=192.168.101.0/24 log=no

log-prefix=""

 

1 ;;; mai

chain=dstnat action=dst-nat to-addresses=192.168.101.24 protocol=tcp

dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=25,111,143,587 log=no log-prefix=""

 

2 ;;; ftp

chain=dstnat action=dst-nat to-addresses=192.168.101.85 to-ports=21

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=21 log=no log-prefix=""

 

3 chain=dstnat action=dst-nat to-addresses=192.168.101.85

to-ports=45450-45500 protocol=tcp dst-address=!192.168.101.0/24

dst-address-type=local dst-port=45450-45500 log=no log-prefix=""

 

4 ;;; http/https

chain=dstnat action=dst-nat to-addresses=192.168.101.29 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=80 log=no log-prefix=""

 

5 chain=dstnat action=dst-nat to-addresses=192.168.101.29 to-ports=443

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=443 log=no log-prefix=""

 

6 ;;; redmine_old

chain=dstnat action=dst-nat to-addresses=192.168.101.113 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=12000 log=no log-prefix=""

 

7 XI chain=dstnat action=dst-nat to-addresses=192.168.101.113 to-ports=80

protocol=tcp dst-address-type=local dst-port=12000 log=no log-prefix=""

 

8 ;;; IIS_for_VOVA

chain=dstnat action=dst-nat to-addresses=192.168.101.29 to-ports=8890

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=8890 log=no log-prefix=""

 

9 ;;; NIK_UBUNTU_SERVER

chain=dstnat action=dst-nat to-addresses=192.168.101.140 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=9000 log=no log-prefix=""

 

10 ;;; RTMP

chain=dstnat action=dst-nat to-addresses=192.168.101.244 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=8899 log=no log-prefix=""

 

11 chain=dstnat action=dst-nat to-addresses=192.168.101.154 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=7999 log=no log-prefix=""

 

12 ;;; Andrey_Kursenko_project

chain=dstnat action=dst-nat to-addresses=192.168.101.20 to-ports=8080

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=8080 log=no log-prefix=""

 

13 chain=dstnat action=dst-nat to-addresses=192.168.101.20 to-ports=8888

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=8888 log=no log-prefix=""

 

14 ;;; redmine_new

chain=dstnat action=dst-nat to-addresses=192.168.101.178 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=13000 log=no log-prefix=""

 

15 XI chain=dstnat action=dst-nat to-addresses=192.168.101.178 to-ports=80

protocol=tcp dst-address-type=local dst-port=13000 log=no log-prefix=""

 

16 ;;; iBroker

chain=dstnat action=dst-nat to-addresses=192.168.101.221 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=14000 log=no log-prefix=""

 

17 chain=dstnat action=dst-nat to-addresses=192.168.101.221 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=16000 log=no log-prefix=""

 

18 ;;; tfb

chain=dstnat action=dst-nat to-addresses=192.168.101.184 to-ports=80

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=20000 log=no log-prefix=""

 

19 chain=dstnat action=dst-nat to-addresses=192.168.101.184 to-ports=443

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=20001 log=no log-prefix=""

 

20 ;;; FTP_EM

chain=dstnat action=dst-nat to-addresses=192.168.101.29 to-ports=7000

protocol=tcp dst-address=!192.168.101.0/24 dst-address-type=local

dst-port=7000 log=no log-prefix=""

 

21 ;;; RUST_SERVER

chain=dstnat action=dst-nat to-addresses=192.168.101.15 protocol=tcp

dst-address=!192.168.101.0/24 dst-address-type=local dst-port=28025

log=no log-prefix=""

 

22 chain=dstnat action=dst-nat to-addresses=192.168.101.15 protocol=udp

dst-address=!192.168.101.0/24 dst-address-type=local dst-port=28025

log=no log-prefix=""

 

23 chain=dstnat action=dst-nat to-addresses=192.168.101.15 protocol=tcp

dst-address=!192.168.101.0/24 dst-address-type=local dst-port=28026

log=no log-prefix=""

Share this post


Link to post
Share on other sites

sensor, у Вас лишний раз перемаркировываются соединения. Например, пришедшее извне через интерфейс GIC соединение, помеченное на входе получит маркировку "gic_conn". Ответный пакет из локалки попадет в mangle, и правила с 10по16 перемаркируют уже имеющееся соединение, новой меткой.

Edited by nkusnetsov

Share this post


Link to post
Share on other sites

В написании я руководствовался офф. WIKI https://wiki.mikrotik.com/wiki/Manual:PCC

Мне нравиться вариант, который написан https://habrahabr.ru/post/313342/

но я пока не понимаю как в это действие, вложить балансировку по каналам.

Share this post


Link to post
Share on other sites

sensor, балансировать вы можете только соединения инициированные из локалки, либо инициированные самим роутером. Соединения пришедшие извне должны быть обработаны тем интерфейсом, на который они пришли.

Поскольку у вас балансировка per-connection, то можно её сделать и через ECMP. Оно тоже per-connection. WiKi. Достаточно в ECMP маршруте указать один провайдерский gateway один раз, а более производительный несколько раз - пропорционально пропускной способности.

Еще одна хорошая статья на хабре. Там есть про обработку входящих.

 

sensor, попробуйте модифицировать правила mangle 10-16 примерно так:

10 chain=prerouting action=mark-connection connection-mark=no-mark new-connection-mark=datagroup_conn passthrough=yes dst-address-type=!local

in-interface=NLT_BRIDGE per-connection-classifier=both-addresses-and-ports:7/0 log=no log-prefix=""

Edited by nkusnetsov

Share this post


Link to post
Share on other sites

Финалочка, я конечно опираясь на разные статьй немного не так всё делал.

Спасибо за помошь всем кто откликнулся.

 

Может будет интересно, вот финальный результат маркировок.

Всё проверил, из мира доступ ко всем ресурсам есть, PPTP и L2TP работают.

 

/ip firewall mangle

add action=accept chain=prerouting dst-address=1.1.1.0/23 in-interface=NLT_BRIDGE

add action=accept chain=prerouting dst-address=2.2.2.0/30 in-interface=NLT_BRIDGE

add action=accept chain=prerouting dst-address=3.3.3.0/24 in-interface=NLT_BRIDGE

add action=accept chain=prerouting dst-address=192.168.101.0/24 in-interface=NLT_BRIDGE

add action=mark-connection chain=prerouting in-interface=gic new-connection-mark=gic_conn passthrough=yes

add action=mark-connection chain=prerouting in-interface=datagroup new-connection-mark=datagroup_conn passthrough=yes

add action=mark-connection chain=prerouting in-interface=triolan new-connection-mark=triolan_conn passthrough=yes

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=datagroup_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/0

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=gic_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/1

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=gic_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/2

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=triolan_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/3

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=triolan_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/4

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=triolan_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/5

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=triolan_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/6

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=triolan_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/7

add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-connection-mark=triolan_conn passthrough=yes per-connection-classifier=both-addresses-and-ports:9/8

add action=mark-routing chain=prerouting connection-mark=gic_conn in-interface=NLT_BRIDGE new-routing-mark=to_gic passthrough=yes

add action=mark-routing chain=prerouting connection-mark=datagroup_conn in-interface=NLT_BRIDGE new-routing-mark=to_datagroup passthrough=yes

add action=mark-routing chain=prerouting connection-mark=triolan_conn in-interface=NLT_BRIDGE new-routing-mark=to_triolan passthrough=yes

add action=mark-routing chain=output connection-mark=gic_conn new-routing-mark=to_gic passthrough=yes

add action=mark-routing chain=output connection-mark=datagroup_conn new-routing-mark=to_datagroup passthrough=yes

add action=mark-routing chain=output connection-mark=triolan_conn new-routing-mark=to_triolan passthrough=yes

Edited by sensor

Share this post


Link to post
Share on other sites

что бы не плодить темы, такой вопрос. некторые пользователи сети жалуются, что из-за разных внешних IP адресов они не могут нормлаьно работать с внешними сервисами. Есть необходимость привязки конкретного пользователя к одному WAN адресу.

В начале я попробывал через Route Rules IP привязал к конкретной таблице - работает. но доступ к данному пользователю из сети пропадает.

Попробывал прописать так

add action=mark-routing chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=NLT_BRIDGE new-routing-mark=to_triolan passthrough=no src-address=192.168.101.10

Вроде работает, но как-то криво. Хотя доступ из сети уже к этому пользоват есть.

Share this post


Link to post
Share on other sites

sensor, вполне нормально, не криво. Если пользователей группа, то можно создать из их адресов address-list, и в приведенном правиле ссылаться не на "src-address", а на "src-address-list"

Share this post


Link to post
Share on other sites

sensor, вполне нормально, не криво. Если пользователей группа, то можно создать из их адресов address-list, и в приведенном правиле ссылаться не на "src-address", а на "src-address-list"

спасибо так и сделал:) удобно.

Share this post


Link to post
Share on other sites

Добрый день! Может кто помочь настроить настроить в маршрутизаторе микротик CCR1036-12G-4S второй канал от вышестоящего провайдера с балансировкой.

На данный момент работает в тесте с одним входящим каналом и подключенным к нему билингом. не могу запустить в работу т.к. одного канала не хватает.

 

P.S.  вознаграждение гарантирую.

Share this post


Link to post
Share on other sites

10 часов назад, a.polev сказал:

P.S.  вознаграждение гарантирую.

 

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

Share this post


Link to post
Share on other sites

11 часов назад, Saab95 сказал:

 

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

Не совсем то что мне надо, если я конечно всё правильно понял, У меня один НАТ с двумя входящими каналами. Нат управляется сервером с карбон блилинг 5 версии. Первый канал работает. т.е. все абоненты могут работать через первый канал, но его не хватает. Нужно что бы часть абонентов работали через второй канал. с автоматической балансировкой или ручной пока не сильно принципиально.

Share this post


Link to post
Share on other sites

4 часа назад, a.polev сказал:

Не совсем то что мне надо, если я конечно всё правильно понял

Скорее всего не правильно поняли. Вот делаете так.

 

/ip address
add address=91.33.21.3/28 interface=ether1 - внешний адрес первого провайдера 
add address=91.33.21.4/28 interface=ether2 - внешний адрес второго провайдера

/ip firewall address-list
add address=10.0.0.0/8 list=Local-IP - ваша служебная серая сеть в которой адресуете свое оборудование (коммутаторы и т.п.)
add address=91.33.21.3 list=Local-IP - адрес одного провайдера
add address=91.33.21.4 list=Local-IP - адрес второго провайдера
add address=10.100.10.0-10.200.255.255 list=Local-ABON - адреса абонентов

Разделяем абонентов на 2 группы ровно пополам

/ip firewall mangle
add action=add-src-to-address-list address-list=NAT_2 address-list-timeout=1h chain=prerouting comment=NAT2 dst-address-list=!Local-IP per-connection-classifier=src-address:2/0 src-address-list=Local-ABON
add action=add-src-to-address-list address-list=NAT_3 address-list-timeout=1h chain=prerouting comment=NAT3 dst-address-list=!Local-IP per-connection-classifier=src-address:2/1 src-address-list=Local-ABON

/ip firewall nat
add action=src-nat chain=srcnat comment=NAT2 dst-address-list=!Local-IP src-address-list=NAT_2 to-addresses=91.33.21.3 - внешний адрес первого провайдера
add action=src-nat chain=srcnat comment=NAT3 dst-address-list=!Local-IP src-address-list=NAT_3 to-addresses=91.33.21.4 - внешний адрес второго провайдера

 

Тут у вас используется 2 ната по SRC адресам двух провайдеров. Балансировка по абонентам автоматическая - сколько идет запросов с IP абонентов, столько они и делятся пополам.

 

Карбон 5 использует какую-то свою плохую схему управлением оборудованием. Нормальная схема это когда биллинг только изменяет скорости, блокирует/разблокирует абонентов. Никаких других действий биллинг осуществлять не должен, в том числе не должен создавать разрешающие/запрещающие фильтры для абонентов, тогда и никаких проблем с балансировкой не будет.

 

Самое правильное это использование нескольких микротиков. Первый микротик только ограничивает скорость и блокирует доступ в интернет, а второй микротик делает НАТ - тогда биллинг к нему никакого отношения не имеет и можно городить любые схемы. А самая правильная схема это такая - когда для каждого внешнего канала используется свой отдельный микротик, тогда достаточно маршрутами управлять, например разбить их на две группы, первую отправлять через один микротик, вторую через второй. Так же сделать проверки на доступность, если один микротик отключить, все через оставшийся пойдут.

Share this post


Link to post
Share on other sites

В 13.02.2018 в 16:22, Saab95 сказал:

Скорее всего не правильно поняли. Вот делаете так.

Да так, понятней. И походу даже работает.

 

Share this post


Link to post
Share on other sites

Работает отлично, но как всегда бывает у всего хорошего есть побочный косяк. Абоненты которые используют банк клиент Сбербанк Бизнес онлайн (может и ещё какие) при смене внешнего IP приложение перезапрашивает аунтификацию. То есть клиент открывает в банке новую вкладку, срабатывает балансир. меняет внешний адрес (канал). Банк видит это и блокирует. 

Какой выход из этой ситуации??? Поделить всех в ручную в адрес листе и ли привязывать избранных абонентов к определённым каналам?

Share this post


Link to post
Share on other sites

В 21.02.2018 в 17:14, a.polev сказал:

при смене внешнего IP приложение перезапрашивает аунтификацию

В данном случае у абонентов IP адрес не меняется. Во многих местах используется такая схема и нет жалоб. У вас точно никакие другие фильтры/манглы не вмешиваются в работу оборудования?

Share this post


Link to post
Share on other sites

В 13.02.2018 в 11:22, Saab95 сказал:

Скорее всего не правильно поняли. Вот делаете так.

 


/ip address
add address=91.33.21.3/28 interface=ether1 - внешний адрес первого провайдера 
add address=91.33.21.4/28 interface=ether2 - внешний адрес второго провайдера

/ip firewall address-list
add address=10.0.0.0/8 list=Local-IP - ваша служебная серая сеть в которой адресуете свое оборудование (коммутаторы и т.п.)
add address=91.33.21.3 list=Local-IP - адрес одного провайдера
add address=91.33.21.4 list=Local-IP - адрес второго провайдера
add address=10.100.10.0-10.200.255.255 list=Local-ABON - адреса абонентов

Разделяем абонентов на 2 группы ровно пополам

/ip firewall mangle
add action=add-src-to-address-list address-list=NAT_2 address-list-timeout=1h chain=prerouting comment=NAT2 dst-address-list=!Local-IP per-connection-classifier=src-address:2/0 src-address-list=Local-ABON
add action=add-src-to-address-list address-list=NAT_3 address-list-timeout=1h chain=prerouting comment=NAT3 dst-address-list=!Local-IP per-connection-classifier=src-address:2/1 src-address-list=Local-ABON

/ip firewall nat
add action=src-nat chain=srcnat comment=NAT2 dst-address-list=!Local-IP src-address-list=NAT_2 to-addresses=91.33.21.3 - внешний адрес первого провайдера
add action=src-nat chain=srcnat comment=NAT3 dst-address-list=!Local-IP src-address-list=NAT_3 to-addresses=91.33.21.4 - внешний адрес второго провайдера

 

Тут у вас используется 2 ната по SRC адресам двух провайдеров. Балансировка по абонентам автоматическая - сколько идет запросов с IP абонентов, столько они и делятся пополам.

 

Карбон 5 использует какую-то свою плохую схему управлением оборудованием. Нормальная схема это когда биллинг только изменяет скорости, блокирует/разблокирует абонентов. Никаких других действий биллинг осуществлять не должен, в том числе не должен создавать разрешающие/запрещающие фильтры для абонентов, тогда и никаких проблем с балансировкой не будет.

 

Самое правильное это использование нескольких микротиков. Первый микротик только ограничивает скорость и блокирует доступ в интернет, а второй микротик делает НАТ - тогда биллинг к нему никакого отношения не имеет и можно городить любые схемы. А самая правильная схема это такая - когда для каждого внешнего канала используется свой отдельный микротик, тогда достаточно маршрутами управлять, например разбить их на две группы, первую отправлять через один микротик, вторую через второй. Так же сделать проверки на доступность, если один микротик отключить, все через оставшийся пойдут.

Возникло пару вопросов.

1. Можно же будет разделить 67-33 если каналы неравноценные. Как с PCC для первого канала 3/0 и 3/1 и для второго канала 3/2.

2. Если один из каналов упадёт, получается часть пользователей останется без интернета. Возможно ли автоматически переключить их на рабочий канал? При использование src-nat я так понимаю это сделать нельзя, и тогда нужно использовать masquerade? (почему-то суппорт микротика не рекомендовал мне использовать masquerade).

3. Если поднять BGP с двумя соединениями (https://wiki.mikrotik.com/wiki/Manual:Simple_BGP_Multihoming), как можно сделать балансировку? и возможно ли сделать не только 50/50 (https://www.timigate.com/2018/01/dual-isp-ebgp-setup-with-load-balancing.html)?

 

Share this post


Link to post
Share on other sites

Конечно можно как угодно делить, там же каждое правило просто разделение на одну часть от общего количества. Просто в примере 2 провайдера и деление пополам, так делают, когда есть свои белые адреса и натят всех абонентов например через 16 IP, разделив всех на 16 групп.

 

Если у вас сломался один провайдер, просто изменяете в правиле ната IP адрес, и эта группа так же идет через оставшегося в работе провайдера.

 

Если у вас будет BGP, то желательно получать сеть /23, тогда можете делить абонентов на группы и таким образом управлять трафиком. Часто бывает, что одну подсеть /24 нельзя нормально отбалансировать, т.к. изменение весов просто перекидывает входящий трафик с одного канала на другой.

Share this post


Link to post
Share on other sites

5 минут назад, Saab95 сказал:

Конечно можно как угодно делить, там же каждое правило просто разделение на одну часть от общего количества. Просто в примере 2 провайдера и деление пополам, так делают, когда есть свои белые адреса и натят всех абонентов например через 16 IP, разделив всех на 16 групп.

 

Если у вас сломался один провайдер, просто изменяете в правиле ната IP адрес, и эта группа так же идет через оставшегося в работе провайдера.

 

Если у вас будет BGP, то желательно получать сеть /23, тогда можете делить абонентов на группы и таким образом управлять трафиком. Часто бывает, что одну подсеть /24 нельзя нормально отбалансировать, т.к. изменение весов просто перекидывает входящий трафик с одного канала на другой.

Здравствуйте.

 

Большое спасибо за помощь.

"Если у вас сломался один провайдер, просто изменяете в правиле ната IP адрес, и эта группа так же идет через оставшегося в работе провайдера."

 

А как можно изменять правила ната автоматически? есть ли какое-то решение или скрипт?

 

/23 навряд ли дадут, будет /24. Но большинство пользователей под NAT. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.