Това е вид продължение на горната тема. Неудобството на предния начин е, че отказоустойчивостта с втория интернет доставчик не е плавна, а има едно време за реакция. Бяхме го дефинирали 10 секунди. Можеше и да се намали но все пак има едно време на превключване между двата доставчика. Другото неудобство е, че се ползва само единия доставчик а другия стои резервен. И сега да вземем за пример, ако се натовари линията нищо не можем да направим защото втората през другия доставчик не е активна. Именно за такива случаи се ползва друга технология наречена Load Balancing. Така се постига балансиране на трафика между двата доставчика. Отново има няколко варианта за изпълнение на задачата и ще се постараем по-надолу да ги развием.

Темата не е проста и затова ще се наложи малко теория. 1. Имаме два доставчика на Интернет. 2. Приемаме, че имаме WEB сървър във вътрешната мрежа. Същото се отнася и за клиентски компютър. 3. Примерно отвън се обръщат към WEB сървъра през ISP1, то отговора също трябва да се върне през ISP1. В противен случай може да се приеме от доставчика като опит за хакване, защото ще се промени заглавието на TCP пакета. 4. Същата логика е и за наш клиентски компютър от вътрешната мрежа. Ако се обърне към някакъв ресурс в Интернет през ISP2 то и отговора трябва да се върне през ISP2. 5. Извода е, че балансирането трябва да се извършва не на ниво пакет, а на ниво връзка. 6. Тъй като връзките са различни и трафикът, който пренасят, варира, дори равномерното балансиране на каналите между връзките няма да постигне равномерно балансиране на натоварването. Това трябва да се разбере от самото начало. 7. Вторият проблем се отнася до протоколите на приложно ниво, които могат да създават множество връзки в рамките на една сесия. Ако връзките са небрежно балансирани, в рамките на една сесия могат да се създадат връзки с различни изходни адреси. В някои случаи това не е критично, но в други може да причини значителни неудобства, особено ако другият край е обвързан с IP адрес. Това е особено важно за финансови приложения, като например онлайн банкиране. В най-добрия случай това ще доведе до постоянно повторно удостоверяване в личния ви акаунт; в най-лошия случай може да доведе до блокиране на достъпа. 8. Възможно е да има проблеми и с IPsec, тунели, VPN и др., т.е. с всичко, което е чувствително към IP адреса на противоположния възел. За да избегнете това, трябва да свържете балансирането с друг параметър - адреса на източника - и да насочите всички връзки на един възел в текущия период от време през един и същ канал. 9. Следващото предизвикателство е пренасочването на портове и собствените услуги на рутера . Винаги трябва да изпращаме отговор до интерфейса, от който е произлязла заявката, и следователно да изключваме такива връзки от балансирането на натоварването. Това се решава с допълнително маркиране и винаги трябва да се прави първо.
Няколко правила преди да сме започнали с балансировката. Първото правило на балансирането на натоварването е да се наблюдават връзките: отговаряйте на входяща връзка от същия адрес, на който е била изпратена. За изходящи връзки изпращайте пакети само през адреса, с който е установена връзката. Второ, важно е също да се разбере, че трябва да се прави разлика между входящ и изходящ трафик. Въпросът е, че рутерът може да реши кой път да поеме за изходящия трафик, но входящият трафик е като „трафик на Шрьодингер“ за него. Докато не бъде открит, нашият Mikrotik не знае през кой интерфейс идва и щом е там, е твърде късно да се промени интерфейсът. Трето, балансирането на каналите не е излишък. Това са две отделни функции. Между другото, защо използваме връзки вместо пакети, когато разделяме трафика? Прочетете как работи TCP протоколът. Накратко, работата на TCP протокола не е само да изпрати пакет до получателя, но и да наблюдава как е получен. Това се прави чрез установяване на връзка, в рамките на която се предават самите пакети данни, заедно с всякаква необходима служебна информация. Ако работите с пакети и забравите за връзките, тогава са възможни ситуации, при които отдалечен хост, след като е установил връзка с един адрес, просто ще изхвърли някои от пакетите, идващи от втория, „неправилен“ адрес.
Така че, с всяка опция за балансиране на каналите, първо трябва да се подготвим за входящия трафик и да научим Mikrotik да отговаря на входящите връзки по същия канал, от който са дошли. Чрез маркиране на връзки и след това маркиране на маршрути за тях, ние по същество създаваме множество таблици за маршрутизиране, отделни за всеки външен адрес. Първоначална конфигурация за балансиране на натоварването с два външни IP адреса
# Настроим сети провайдеров: /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 # Настроим локальный интерфейс /ip address add address=10.1.1.1/24 interface=LAN # скроем за NAT все что выходит из локальной сети /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #Пометим каждое соединение пришедшее снаружи и адресованное нашему роутеру: /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #что бы отвечать через те же интерфейсы, откуда пришли запросы, поставим соответствующую роутинг-марку на каждое соединение. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #добавим default gateway в каждую из промаркированных таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping
# Настройка на IP адреси към доставчиците на Интернет: /ip address add address=10.0.0.2/24 interface=ether1 /ip address add address=172.16.0.2/24 interface=ether2 # Настройка на IP адреси към вътрешната мрежа: /ip address add address=192.168.0.1/24 interface=ether3 # Ще скрием всичко, което излиза от локалната мрежа, зад NAT: /ip firewall nat add src-address=192.168.0.0/24 action=masquerade chain=srcnat #Нека маркираме всяка връзка, която идва отвън и е адресирана към нашия рутер: /ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ether2 new-connection-mark=cin_ISP2 #За да отговорим през същите интерфейси, от които са дошли заявките, ще зададем съответния маркер за маршрутизиране на всяка връзка. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #Да добавим шлюз по подразбиране към всяка от маркираните таблици за маршрутизиране: /ip route add distance=1 gateway=10.0.0.1 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=rout_ISP2 check-gateway=ping
По този начин, mikrotik ще маршрутизира всеки пакет от маркираната връзка през съответната таблица за маршрутизиране и външните адреси (10.0.0.2, 172.16.0.2) ще бъдат достъпни отвън без объркване в каналите и маршрутите.
За да разпределим изходящия трафик между интерфейсите, просто трябва да присвоим съответния маркер за маршрут на връзката. Сложната част е да се реши коя връзка да бъде маркирана като ISP1 и коя като ISP2. Има няколко опции за разделяне на връзките на групи:
Можем стриктно да дефинираме правилата, които балансират трафика: Например, искаме да конфигурираме протоколите, които са важни за нас: HTTP (порт 80), HTTPS (порт 443), POP (порт 110), SMTP (порт 25) през ISP1 и да изпращаме целия останал трафик през втория доставчик. Конфигурация с балансиране на каналите според строго определени правила.
# Настроим сети провайдеров: /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 # Настроим локальный интерфейс /ip add address=10.1.1.1/24 interface=LAN # скроем за NAT все что выходит из локальной сети /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #Пометим каждое соединение пришедшее снаружи и адресованное нашему роутеру: /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #что бы отвечать через те же интерфейсы, откуда пришли запросы, поставим соответствующую роутинг-марку на каждое соединение. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #добавим default gateway в каждую из промаркированных таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #failover через второго провайдера для каждого из шлюзов /ip route add distance=2 gateway=10.200.1.254 routing-mark=rout_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=rout_ISP2 # отправим трафик идущий к портам 80,443,110,25 на ISP1 /ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark="lan_out_ISP1" passthrough=no dst-port=80,443,110,25 protocol=tcp #а весь остальной трафик на ISP2: /ip firewall add chain=prerouting action=mark-routing new-routing-mark="lan_out_ISP2" passthrough=no #добавим default gateway в каждую из промаркированных для LAN трафика таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=lan_out_ISP2 check-gateway=ping #failover через второго провайдера для каждого из шлюзов /ip route add distance=2 gateway=10.200.1.254 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=lan_out_ISP2
# Настройка на IP адреси към доставчиците на Интернет: /ip address add address=10.0.0.2/24 interface=ether1 /ip address add address=172.16.0.2/24 interface=ether2 # Настройка на IP адреси към вътрешната мрежа: /ip address add address=192.168.0.1/24 interface=ether3 # Ще скрием всичко, което излиза от локалната мрежа, зад NAT: /ip firewall nat add src-address=192.168.0.0/24 action=masquerade chain=srcnat #Нека маркираме всяка връзка, която идва отвън и е адресирана към нашия рутер: /ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ether2 new-connection-mark=cin_ISP2 #За да отговорим през същите интерфейси, от които са дошли заявките, ще зададем съответния маркер за маршрутизиране на всяка връзка. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #Да добавим шлюз по подразбиране към всяка от маркираните таблици за маршрутизиране: /ip route add distance=1 gateway=10.0.0.1 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=rout_ISP2 check-gateway=ping #превключване при срив чрез втори доставчик за всеки от шлюзовете: /ip route add distance=2 gateway=172.16.0.1 routing-mark=rout_ISP1 /ip route add distance=2 gateway=10.0.0.1 routing-mark=rout_ISP2 # Изпращане на трафик към портове 80, 443, 110, 25 към ISP1: /ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark="lan_out_ISP1" passthrough=no dst-port=80,443,110,25 protocol=tcp #И целият останал трафик на ISP2: /ip firewall add chain=prerouting action=mark-routing new-routing-mark="lan_out_ISP2" passthrough=no #Нека добавим шлюз по подразбиране към всяка от таблиците за маршрутизация, маркирани за LAN трафик: /ip route add distance=1 gateway=10.0.0.1 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=lan_out_ISP2 check-gateway=ping #Превключване при срив чрез втори доставчик за всеки от шлюзовете: /ip route add distance=2 gateway=172.16.0.1 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.0.0.1 routing-mark=lan_out_ISP2
Можем да разделим връзките по ред. Първите отиват наляво, вторите надясно. Просто е. Конфигурация с балансиране на каналите чрез N-тата връзка:
# Настроим сети провайдеров: /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 # Настроим локальный интерфейс /ip address add address=10.1.1.1/24 interface=LAN # скроем за NAT все что выходит из локальной сети /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #Пометим каждое соединение пришедшее снаружи и адресованное нашему роутеру: /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #что бы отвечать через те же интерфейсы, откуда пришли запросы, поставим соответствующую роутинг-марку на каждое соединение. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #добавим default gateway в каждую из промаркированных для внешних адресов таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #из каждых двух соединений первое пометим на отсылку через ISP1 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 nth=2,1 #а второе на отсылку через ISP2 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 nth=2,2 #добавим default gateway в каждую из промаркированных для LAN трафика таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=lan_out_ISP2 check-gateway=ping #failover через второго провайдера для каждого из шлюзов /ip route add distance=2 gateway=10.200.1.254 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=lan_out_ISP2
# Настройка на IP адреси към доставчиците на Интернет: /ip address add address=10.0.0.2/24 interface=ether1 /ip address add address=172.16.0.2/24 interface=ether2 # Настройка на IP адреси към вътрешната мрежа: /ip address add address=192.168.0.1/24 interface=ether3 # Ще скрием всичко, което излиза от локалната мрежа, зад NAT: /ip firewall nat add src-address=192.168.0.0/24 action=masquerade chain=srcnat #Нека маркираме всяка връзка, която идва отвън и е адресирана към нашия рутер: /ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ether2 new-connection-mark=cin_ISP2 #За да отговорим през същите интерфейси, от които са дошли заявките, ще зададем съответния маркер за маршрутизиране на всяка връзка. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #Да добавим шлюз по подразбиране към всяка от маркираните таблици за маршрутизиране: /ip route add distance=1 gateway=10.0.0.1 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=rout_ISP2 check-gateway=ping #На всеки две връзки, маркираме първата като изпратена през ISP1: /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 nth=2,1 #А вторият се изпраща чрез ISP2: /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 nth=2,2 #Нека добавим шлюз по подразбиране към всяка от таблиците за маршрутизация, маркирани за LAN трафик: /ip route add distance=1 gateway=10.0.0.1 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=lan_out_ISP2 check-gateway=ping #Превключване при срив чрез втори доставчик за всеки от шлюзовете: /ip route add distance=2 gateway=172.16.0.1 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.0.0.1 routing-mark=lan_out_ISP2
PCC подхожда към разделянето на трафика по малко по-сложен начин. Той разделя трафика на групи въз основа на данните от TCP заглавията (src-address, dst-address, src-port, dst-port). Конфигурация с балансиране на PPC каналите:
# Настроим сети провайдеров: /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 # Настроим локальный интерфейс /ip address add address=10.1.1.1/24 interface=LAN # скроем за NAT все что выходит из локальной сети /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #Пометим каждое соединение пришедшее снаружи и адресованное нашему роутеру: /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #что бы отвечать через те же интерфейсы, откуда пришли запросы, поставим соответствующую роутинг-марку на каждое соединение. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #добавим default gateway в каждую из промаркированных таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #failover через второго провайдера для каждого из шлюзов /ip route add distance=2 gateway=10.200.1.254 routing-mark=rout_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=rout_ISP2 #используя PPC разделим трафик на две группы по исх. адресу и порту /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:2/0 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 per-connection-classifier=src-address-and-port:2/1 #добавим default gateway в каждую из промаркированных для LAN трафика таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=lan_out_ISP2 check-gateway=ping #failover через второго провайдера для каждого из шлюзов /ip route add distance=2 gateway=10.200.1.254 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=lan_out_ISP2
# Настройка на IP адреси към доставчиците на Интернет: /ip address add address=10.0.0.2/24 interface=ether1 /ip address add address=172.16.0.2/24 interface=ether2 # Настройка на IP адреси към вътрешната мрежа: /ip address add address=192.168.0.1/24 interface=ether3 # Ще скрием всичко, което излиза от локалната мрежа, зад NAT: /ip firewall nat add src-address=192.168.0.0/24 action=masquerade chain=srcnat #Нека маркираме всяка връзка, която идва отвън и е адресирана към нашия рутер: /ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ether2 new-connection-mark=cin_ISP2 #За да отговорим през същите интерфейси, от които са дошли заявките, ще зададем съответния маркер за маршрутизиране на всяка връзка. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #Да добавим шлюз по подразбиране към всяка от маркираните таблици за маршрутизиране: /ip route add distance=1 gateway=10.0.0.1 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=rout_ISP2 check-gateway=ping #Pезервиране чрез втори доставчик за всеки шлюз: /ip route add distance=2 gateway=172.16.0.1 routing-mark=rout_ISP1 /ip route add distance=2 gateway=10.0.0.1 routing-mark=rout_ISP2 #Използвайки PPC, ще разделим трафика на две групи въз основа на адреса на източника и порта: /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:2/0 /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 per-connection-classifier=src-address-and-port:2/1 #Нека добавим шлюз по подразбиране към всяка от таблиците за маршрутизация, маркирани за LAN трафик: /ip route add distance=1 gateway=10.0.0.1 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=lan_out_ISP2 check-gateway=ping #Резервиране чрез втори доставчик за всеки шлюз: /ip route add distance=2 gateway=172.16.0.1 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.0.0.1 routing-mark=lan_out_ISP2
Според мен най-простият и ефективен вариант за разделяне на трафика е конфигурация с балансиране на каналите, използваща ECMP.
# Настроим сети провайдеров: /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 # Настроим локальный интерфейс /ip address add address=10.1.1.1/24 interface=LAN # скроем за NAT все что выходит из локальной сети /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #Пометим каждое соединение пришедшее снаружи и адресованное нашему роутеру: /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #что бы отвечать через те же интерфейсы, откуда пришли запросы, поставим соответствующую роутинг-марку на каждое соединение. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #добавим default gateway в каждую из промаркированных таблиц маршрутизации: /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #промаркируем весь траффик из локальной сети /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=mixed #используем ECMP для балансировки траффика из локальной сети /ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254,10.200.1.254 routing-mark=mixed
# Настройка на IP адреси към доставчиците на Интернет: /ip address add address=10.0.0.2/24 interface=ether1 /ip address add address=172.16.0.2/24 interface=ether2 # Настройка на IP адреси към вътрешната мрежа: /ip address add address=192.168.0.1/24 interface=ether3 # Ще скрием всичко, което излиза от локалната мрежа, зад NAT: /ip firewall nat add src-address=192.168.0.0/24 action=masquerade chain=srcnat #Нека маркираме всяка връзка, която идва отвън и е адресирана към нашия рутер: /ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ether2 new-connection-mark=cin_ISP2 #За да отговорим през същите интерфейси, от които са дошли заявките, ще зададем съответния маркер за маршрутизиране на всяка връзка. /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no #Да добавим шлюз по подразбиране към всяка от маркираните таблици за маршрутизиране: /ip route add distance=1 gateway=10.0.0.1 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=172.16.0.1 routing-mark=rout_ISP2 check-gateway=ping #Mаркиране на целия трафик от локалната мрежа: /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=mixed #Използване на ECMP за балансиране на натоварването на трафика от локалната мрежа: /ip route add dst-address=0.0.0.0/0 gateway=10.0.0.1 ,172.16.0.1 routing-mark=mixed
Mikrotik автоматично ще разделя трафика между шлюзовете, използвайки алгоритъм за кръгово преброяване. Между другото, във версия 6.X на RouterOS, Mikrotik наруши check-gateway в ECMP, така че използването на конструкцията /ip route add gateway=10.0.0.1,172.16.0.1 check-gateway=ping е логично, но напълно безполезно. За да маркирате неработещи маршрути в ECMP, трябва да създадете допълнителни маршрути, които използват всеки шлюз поотделно. Разбира се, с активиран check-gateway. Като маркира маршрут като неработещ, Mikrotik прави това за всички маршрути.
Да вземем два неравностойни канала, да речем 100 Mbps и 50 Mbps. Балансираме ги, използвайки Nth, PCC или ECMP. Какъв е общият пропускателен капацитет? Отговора е някъде около 100 Mbps (най-слабият канал x пъти). Това се случва, защото Mikrotik няма представа за пропускателния капацитет на канала; той не го измерва. Той просто разделя трафика на относително равни групи. Това може да се преодолее чрез правилно проектиране на групите изходящ трафик, като се вземе предвид пропускателният капацитет на канала. Например, в ECMP това може да се постигне чрез многократно задаване на по-бързия шлюз, като по този начин се увеличи честотата му на използване.
/ip route add dst-address=0.0.0.0/0 gateway=10.0.0.1,10.10.0.0.1,172.16.0.1
В PCC можете също да създавате неравностойни групи:
/ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:3/0 /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:3/1 /ip firewall mangle add src-address=192.168.0.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 per-connection-classifier=src-address-and-port:3/2
Благодаря за вниманието. Успех в настройването на безпроблемни системи за маршрутизация.