Displaying items by tag: mikrotik - UniXoiD
дробовики.
заявка на кредит Тинькофф

Встала задача настроить прозрачный прокси SQUID + разобраться с перенаправлением трафика на mikrotik.

 Я собирал из исходников v4.9 вот с такими опциями: ./configure --enable-ssl --enable-ssl-crtd --with-openssl --disable-arch-native --prefix=/usr --localstatedir=/var --sysconfdir=/etc/squid --libexecdir=/usr/lib/squid --datadir=/usr/share/squid --with-default-user=proxy --with-logdir=/var/log/squid --with-pidfile=/var/run/squid.pid

Вот конфиг SQUIDA:

acl localnet src 192.168.26.0/25
acl localnet src 192.168.41.0/25
acl localnet src 192.168.88.0/25
acl localnet src 192.168.77.0/25
acl localnet src 192.168.33.0/24

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/cache/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

cache deny all
http_reply_access allow all

acl white_dst dstdom_regex "/etc/squid/lists/white_dst"
acl white_name ssl::server_name "/etc/squid/lists/white_name"
acl white_dns dstdomain "/etc/squid/lists/white_name"
acl white_url url_regex "/etc/squid/lists/white_url"

acl white any-of white_dst white_name white_dns white_url

acl foreignProtocol squid_error ERR_PROTOCOL_UNKNOWN ERR_TOO_BIG
acl unsup_http_ver squid_error ERR_UNSUP_HTTPVERSION

on_unsupported_protocol tunnel foreignProtocol
on_unsupported_protocol tunnel unsup_http_ver

http_port 3128
http_port 3129 intercept
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key
sslproxy_cert_error allow all
always_direct allow all

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3

ssl_bump peek step1 all
ssl_bump splice white
ssl_bump stare step2 all !white
ssl_bump bump step3 all !white

sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 16MB
visible_hostname server2

Вот настройки MikroTik (в таблице mangle):

 mikrot squid 1

mikrot squid 2

mikrot squid 3

И на последок правила iptables для редиректа с портов 80, 443 на порты squid:

iptables -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
iptables -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130

Доброго всем времени суток! Сегодня я покажу настройку VLAN на роутере Mikrotik hap AC2  (это ядро (голова) сети) и роутере Mikrotik hap AC (вместо него может быть управляемый свитч). Данная настройка снижает нагрузку на процессор за счёт перекладывания обработки трафика с CPU на switch chip (галочка Hardware Offload). Настройка будет выполнена в WinBox, а также через терминал, также вы можете посмотреть видео на YouTube. На данный момент на обоих роутерах стоит последняя прошивка с длительной поддержкой: 6.44.6 (long-term).

firmware version ac2firmware version ac

Настройка первого hap AC2 (ядро (голова) сети):

1) Добавляем сетевой мост

2) Включаем VLAN Filtering для сетевого моста

3) Добавляем VLAN'ы

4) Добавляем адреса для интерфейсов

5) Добавляем диапазон (пул) адресов для DHCP-серверов

6) Добавляем DHCP-сервера и сети

7) Добавляем порты в бридж

8) Добавляем VLAN'ы

9) Настройка Wi-Fi для работы с VLAN

Настройка второго hap AC (slave - подчинённый) делается также, кроме пунктов указанных ниже:

10) Добавляем адреса для интерфейсов

11) Добавляем VLAN'ы

 

Начну пожалуй с первого (ядра сети - hap AC2).

1) Идём во вкладку Bridge и создаём сетевой мост для VLAN'ов:

bridge ac2

bridge general ac2

2) Здесь я дам скриншот, который должен быть в конце статьи, т.к. если возникнет какая-то ошибка, то могут быть проблемы с подключением к WinBox и терминалу, поэтому настоятельно рекомендую включать VLAN filtering, только после окончательной настройки.

bridge VLAN ac2

ТЕРМИНАЛ

/interface bridge
add name=bridge-VLANs vlan-filtering=yes

3) Далее идём в Interfaces -> VLAN и создаём VLAN'ы:

interfaces VLAN ac2

interfaces VLAN VLAN ac2

 И остальные по аналогии с этим!

ТЕРМИНАЛ

/interface vlan
add interface=bridge-VLANs name=vlan33 vlan-id=33

4) Далее создадим адреса для VLAN'ов и ethernet порта (у меня вместо порта - bonding(агрегация двух портов - для увеличения пропускной способности)). Идём IP -> Addresses

ip addresses ac2

ip addresses address ac2

И остальные по аналогии с этим!

ip addresses address port ac2

ТЕРМИНАЛ

/ip address
add address=192.168.33.1/25 interface=vlan33 network=192.168.33.0
add address=192.168.26.1/25 interface=bonding41-26 network=192.168.26.0

5) Добавим диапазон адресов для DHCP-сервера.

Идём IP -> Addresses.

ip pool ac2

ip pool 2 ac2

И остальные по аналогии с этим!

ip pool 3 ac2

ТЕРМИНАЛ

 /ip pool
add name=vlan33 ranges=192.168.33.10-192.168.33.100
add name=bridge26 ranges=192.168.26.50-192.168.26.100

6) Добавим DHCP-сервера и сети для VLAN'ов и ethernet порта (bonding41-26).

Идём в IP -> DHCP Server. Вкладка DHCP.

ip dhcp server ac2

И остальные по аналогии с этим!

ip dhcp server 2 ac2

Далее вкладка Networks.

 ip networks ac2

ip networks 2 ac2

И остальные по аналогии с этим!

ip networks 3 ac2

ТЕРМИНАЛ

/ip dhcp-server
add address-pool=vlan33 disabled=no interface=vlan33 name=dhcp-vlan33
add address-pool=bridge26 disabled=no interface=bridge-VLANs name=dhcp-lan26
/ip dhcp-server network
add address=192.168.33.0/25 dns-server=192.168.33.1 gateway=192.168.33.1 netmask=25
add address=192.168.26.0/25 dns-server=192.168.88.10, 192.168.26.1 gateway=192.168.26.1 netmask=25 wins-server=192.168.88.10

7) Далее возвращаемся в Bridge вкладка Ports. В моих примерах vlan33 это Wi-Fi (2.4GHz и 5GHz), поэтому я выбираю wlan3 и wlan4 (соответственно).

bridge ports ac2

bridge ports 2 ac2

bridge ports 3 ac2

И остальные по аналогии с этим!

bridge ports 4 ac2

bridge ports 5 ac2

ТЕРМИНАЛ

/interface bridge port
add bridge=bridge-VLANs interface=vlan33 pvid=33
add bridge=bridge-VLANs interface=bonding41-26 pvid=1

8) Далее идём в Bridge -> VLANs. В столбце Сurrent Tagged и Current Untagged у вас появятся интерфейсы, а также динамический VLAN ID 1, только после включения VLAN Filtering. Так что не удивляйтесь и делайте дальше!

bridge VLANs ac2

bridge VLANs 2 ac2

И остальные по аналогии с этим!

ТЕРМИНАЛ

/interface bridge vlan
add bridge=bridge-VLANs tagged=bridge-VLANs, bonding41-26 wlan4 vlan-ids=33

 

9) Так как я добавлял VLAN для беспроводного интерфейса, то расскажу что и как с ним делать на вкладке Wireless -> WiFi Interfaces.

wireless wifi interfaces

 vlan33 - это wlan3 и wlan4 (wi-fi 2.4GHz и wi-fi 5GHz, соответственно).

wireless wifi interfaces 2

Теперь настройка второго hap AC (slave - подчинённый) делается также, кроме двух пунктов:

10) Далее создадим адреса для VLAN'ов и ethernet порта (у меня вместо порта - bonding(агрегация двух портов - для увеличения пропускной способности)). Идём IP -> Addresses

ip addresses ac

ip addresses address ac

И остальные по аналогии с этим!

ip addresses address port ac

ТЕРМИНАЛ

/ip address
add address=192.168.33.2/25 interface=bridge-VLANs network=192.168.33.0
add address=192.168.26.2/25 interface=bridge-VLANs network=192.168.26.0

11) Далее идём в Bridge -> VLANs. В столбце Сurrent Tagged и Current Untagged у вас появятся интерфейсы, а также динамический VLAN ID 1, только после включения VLAN Filtering. Так что не удивляйтесь и делайте дальше!

bridge VLANs ac

bridge VLANs 2 ac

И остальные по аналогии с этим!

 ТЕРМИНАЛ

/interface bridge vlan
add bridge=bridge-VLANs tagged=bonding26-41, wlan3, wlan4 vlan-ids=33

На этом всё! Если будут вопросы - задавайте в комментариях или обращайтесь за настройкой сюда IT03!

Среда, 10 апреля 2019 00:00

Mikrotik. Failover. Load Balancing

Mikrotik. Failover. Load Balancing

Когда у меня встала необходимость разобраться, как сделать failover или load balancing, имея два и более каналов в мир, я нашел множество статей и инструкций, в которых описывались рабочие конфигурации. Но почти нигде не нашел разъяснения, как все работает, и описания отличий разных вариантов. Хочу исправить эту несправедливость и собрать простейшие варианты построения failover и load balancing конфигураций в одной статье.

Итак, у нас есть роутер, который соединяет нашу локальную сеть и два канала в интернет (основной ISP1 и резервный ISP2).

Давайте рассмотрим что же мы можем сделать:

Сразу предупрежу: несмотря на то, что в этой статье буду все описывать для mikrotik, не буду касаться темы скриптов

Failover
image
У нас появился резервный канал, в который можно направить трафик при отказе основного. Но как сделать, чтобы mikrotik понял, что канал упал?

Простейшее резервирование каналов


Простейший failover можно настроить, используя приоритет маршрута (distance у mikrotik/cisco, metric в linux/windows), а так же механизм проверки доступности шлюза — check-gateway.

В приведенной ниже конфигурации весь интернет трафик по умолчанию ходит через 10.100.1.254 (ISP1). Но как только адрес 10.100.1.254 станет недоступным (а маршрут через него неактивным) — трафик пойдет через 10.200.1.254 (ISP2).

конфигурация: простейший failover

check-gateway=ping для mikrotik обрабатывается так:

Обеспечение failover с более глубоким анализом канала


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

Я знаю два варианта решения этой инженерной задачи. Первый и самый распространенный — использовать скрипты, но так как в этой статье мы скрипты не трогаем, остановимся подробнее на втором. Он подразумевает не совсем корректное использование параметра scope, но поможет нам прощупать канал провайдера глубже, чем до шлюза.
Принцип прост:
Вместо традиционного указания default gateway=шлюз провайдера, мы скажем роутеру что default gateway это какой-то из всегда_доступных_узлов (например 8.8.8.8 или 8.8.4.4) и он в свою очередь доступен через шлюз провайдера.

конфигурация: failover с более глубоким анализом канала


Теперь разберем, что происходит чуть подробнее:
Хитрость в том, что шлюз провайдера не знает о том, что 8.8.8.8 или 8.8.4.4 — это роутер и направит трафик по обычному пути.
Наш mikrotik считает, что по умолчанию весь интернет трафик нужно отправлять на 8.8.8.8, который напрямую не виден, но через 10.100.1.254 доступен. А если пинг на 8.8.8.8 пропадает (напомню что путь к нему у нас жестко указан через шлюз от ISP1) то mikrotik начнет слать весь интернет трафик на 8.8.4.4, а точнее на рекурсивно определенный 10.200.1.254 (ISP2).

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

Load Balancing


Теперь давайте рассмотрим другую схему:

image

В ней второй второй канал уже не резервный, а равноценный. Почему бы не использовать оба канала одновременно, повысив таким образом пропускную способность?

Начинаем настраивать Load Balancing


Первое правило Load Balancing — следить за соединениями: на пришедшее извне соединение отвечать с того же адреса, на который оно пришло. Для исходящих соединений — отправлять пакеты только через тот адрес, с которым установилось соединение.

Второе, что тоже важно понимать — нужно разделять понятия входящего и исходящего трафика. Дело в том, что для исходящего трафика роутер может решать, по какому пути он пойдет, а входящий трафик для него как «трафик Шредингера». Пока его нет, наш mikrotik не знает, через какой интерфейс он придет, а когда пришел — менять интерфейс уже поздно.

Третье — балансировка каналов не является резервированием. Это две отдельные функции.

Кстати почему при разделе трафика мы оперируем соединениями, а не пакетами?

Готовимся принять «трафик Шредингера»


Итак, при любом варианте балансировки канала нам нужно сначала подготовиться к принятию входящего трафика и научить mikrotik отвечать на входящие соединения в тот же канал, из которого они пришли. С помощью маркировки соединений и последующей маркировки маршрутов для них мы, по сути, делаем несколько таблиц маршрутизации, отдельных для каждого внешнего адреса.

начальная конфигурация для load balancing с двумя внешними 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


Таким образом mikrotik будет проводить каждый пакет помеченного соединения по соответствующей таблице маршрутизации и внешние адреса (10.100.1.1, 10.200.1.1) будут доступны извне без путаницы в каналах и маршрутах.

Делим исходящий трафик


Для распределения исходящего трафика по интерфейсам, нам всего-то нужно повесить соответствующую марку маршрута на соединение. Сложность в том, что нужно решить на какое соединение вешать метку ISP1, а на какое ISP2.

Существует несколько вариантов разделения соединений по группам:

1) Делим исходящий трафик, прикручивая марку намертво


Правила, балансирующие трафик мы можем прописать жестко:
Например мы хотим настроить важные для нас протоколы HTTP(80 port), HTTPS (443 port), POP (110 port), SMTP (25 port) через 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 
2) Делим исходящий трафик, выбирая каждое Н-ое соединение

Можем делить соединения по-порядку. Первые налево, вторые — направо. Все просто.

конфигурация с балансировкой канала по Н-ному соединению:
# Настроим сети провайдеров:
/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 

3) Делим исходящий трафик, используя PCC (per connection classifier)


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 

Делим исходящий трафик, используя ECMP (equal cost multipath routing)


На мой взгляд самый простой и вкусный вариант разделения траффика:

конфигурация с балансировкой канала по 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


Mikrotik сам поделит трафик по шлюзам, используя round-robin алгоритм.

Кстати, в версии 6.Х RouterOS mikrotik поломал check-gateway в ECMP, так что использовать конструкцию
/ip route add gateway=10.100.1.254,10.200.1.254 check-gateway=ping можно и логично, но абсолютно бесполезно.
Для пометки неживых маршрутов в ECMP нужно создать дополнительные маршруты, которые используют каждый из gateway по-отдельности. С включенным check-gateway разумеется. Помечая маршрут неактивным, mikrotik делает это для всех.

И последнее немаловажное замечание про скорость каналов


Возьмем 2 неравнозначных канала, например, 100 мбит и 50 мбит. Сбалансируем их через Nth, PCC или ECMP. Какую суммарную пропускную способность получим?

На самом деле — где-то около 100 мбит (самый слабый канал Х раз).
Происходит это потому, что mikrotik понятия не имеет о пропускной способности каналов, он ее не измеряет. Он просто делит трафик на относительно равные группы.

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

Например

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

/ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254,10.100.1.254,10.200.1.254



В PCC тоже можно сделать неравные группы:

/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:3/0
/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:3/1
/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:3/2



Спасибо за внимание.

Удачи в настройках безотказных систем маршрутизации.

О сайте

Вы попали на сайт о UNIX подобных операционных системах. Здесь вы сможете получить навыки работы с UNIX подобными операционными системами, а также быть в курсе новостей в мире UNIX.

Контакты

  • E-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
  • E-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Gentoo

Mikrotik

Android