Разное

Mikrotik mangle: Mangle — RouterOS — MikroTik Documentation

Содержание

Перевод WiKi руководства MikroTik по Mangle































































СвойствоОписание

action

( название действия ;

по умолчанию: accept)

Действие, которое необходимо предпринять, если пакет соответствует правилу:

  • accept — принять пакет. Пакет не передается следующему правилу межсетевого экрана.
  • add-dst-to-address-list — добавить адрес назначения в список адресов, заданный address-listпараметром
  • add-src-to-address-list — добавить адрес источника в список адресов, заданный address-listпараметром
  • change-dscp — изменить значение поля точки кода дифференцированных услуг (DSCP), заданное параметром new-dscp
  • change-mss — изменить значение поля Maximum Segment Size пакета на значение, указанное в параметре new-mss
  • change-ttl — изменить значение поля Time to Live пакета на значение, указанное параметром new-ttl
  • clear-df — очистить флаг «Не фрагментировать»
  • fasttrack-connection — показывает счетчики fasttrack, полезные для статистики
  • jump — перейти к пользовательской цепочке, заданной значением jump-targetпараметра
  • log — добавить в системный журнал сообщение, содержащее следующие данные: in-interface, out-interface, src-mac, protocol, src-ip: port-> dst-ip: port и длину пакета. После совпадения пакета он передается следующему правилу в списке, как иpassthrough
  • mark-connection — поставить отметку, указанную параметром new-connection-mark, на все соединение, которое соответствует правилу
  • mark-packet — поставить отметку, указанную параметром new-packet-mark, на пакете, который соответствует правилу
  • mark-routing — поставить на пакет отметку, указанную параметром new-routing-mark. Этот вид меток используется только для целей маршрутизации политик.
  • passthrough — если пакет соответствует правилу, увеличьте счетчик и перейдите к следующему правилу (полезно для статистики).
  • return — передать управление обратно в цепочку, откуда произошел прыжок
  • route — принудительно отправляет пакеты на определенный IP-адрес шлюза, игнорируя обычное решение о маршрутизации (только для цепочки предварительной маршрутизации)
  • set-priority — установить приоритет, указанный параметром new-priority для пакетов, отправленных по каналу, способному передавать приоритет (VLAN или беспроводной интерфейс с поддержкой WMM). 
  • sniff-pc — отправить пакет на удаленный сервер RouterOS CALEA.
  • sniff-tzsp — отправить пакет в удаленную систему, совместимую с TZSP (например, Wireshark). Установка дистанционного мишень с sniff-targetи sniff-target-portпараметры (Wireshark рекомендует порт 37008)
  • strip-ipv4-options — удаляет поля параметров IPv4 из заголовка IP, действие фактически не удаляет параметры IPv4, а заменяет все октеты параметров на NOP, дальнейшее сопоставление с ipv4-options = any все равно будет соответствовать пакету.

address-list

( строка ; По умолчанию:)

Имя используемого списка адресов. Применимо, если действие есть add-dst-to-address-list или add-src-to-address-list

address-list-timeout

(none-dynamic |

none-static |

time;

по умолчанию:

none-dynamic)

Временной интервал, по истечении которого адрес будет удален из списка адресов, заданного address-list параметром. Используется вместе с add-dst-to-address-list или add-src-to-address-list действиями

  • Значение non-dynamic ( 00:00:00) оставит адрес в списке адресов до перезагрузки
  • Значение none-static навсегда оставит адрес в списке адресов навсегда и будет включено в экспорт при резервном копировании конфигурации.

chain 

( имя ; По умолчанию:)

Указывает, в какую цепочку будет добавлено правило. Если входные данные не соответствуют имени уже определенной цепочки, будет создана новая цепочка.

comment 

( строка ; По умолчанию:)

Описательный комментарий к правилу.

connection-bytes

( целое-целое ; по умолчанию:)

Соответствует пакетам только в том случае, если заданное количество байтов было передано через конкретное соединение. 0 — означает бесконечность, например connection-bytes=2000000-0 означает, что правило соответствует, если более 2 МБ (загрузка и загрузка) было передано через соответствующее соединение

connection-limit

( целое число, сетевая маска ;

По умолчанию 🙂

Сопоставляет соединения по адресу или блоку адресов после достижения заданного значения.

connection-mark 

( без метки | строка ;

По умолчанию:)

Соответствует пакетам, помеченным через средство mangle с определенной меткой соединения. Если установлен no-mark , правило будет соответствовать любому немаркированному соединению.

connection-nat-state

( srcnat | dstnat ;

По умолчанию 🙂

Может соответствовать соединениям, которые являются srcnatted, dstnatted или обоими. Обратите внимание, что connection-state = related connections connection-nat-state определяется направлением первого пакета. и если для отслеживания соединения необходимо использовать dst-nat для доставки этого соединения на те же хосты, что и основное соединение, оно будет в connection-nat-state = dstnat, даже если правила dst-nat отсутствуют.

connection-rate

( целое число 0..4294967295 ;

по умолчанию 🙂

Скорость соединения — это средство сопоставления брандмауэра, которое позволяет перехватывать трафик на основе текущей скорости соединения.

connection-state

estabilished |

invalid | new |

related;

по умолчанию:)

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

  • estabilished — пакет, принадлежащий существующему соединению
  • invalid — пакет, состояние которого не определено при отслеживании соединения (обычно — отдельные неупорядоченные пакеты, пакеты с неправильной последовательностью / номером подтверждения или в случае чрезмерного использования ресурсов на маршрутизаторе), по этой причине недопустимый пакет не будет участвовать в NAT (как это делают только пакеты connection-state = new) и по-прежнему будет содержать исходный IP-адрес источника при маршрутизации. Мы настоятельно рекомендуем отбросить все пакеты connection-state = invalid в цепях пересылки и ввода брандмауэра.
  • new — пакет начал новое соединение или иным образом связан с соединением, которое не видел пакетов в обоих направлениях
  • related — пакет, который относится к существующему соединению, но не является его частью, например, ошибки ICMP или пакет, который начинает соединение для передачи данных FTP
  • untracked — пакет, который был настроен на обход отслеживания соединений в таблицах RAW межсетевого экрана.

connection-type

( ftp | h423 | irc |

pptp | quake3 | sip |

tftp ; по умолчанию 🙂

Сопоставляет пакеты от связанных подключений на основе информации от их помощников по отслеживанию подключений. Соответствующий помощник по подключению должен быть включен в / ip firewall service-port

content 

( строка ;

По умолчанию:)

Соответствовать пакетам, содержащим указанный текст

dscp 

( целое число: 0..63 ;

по умолчанию 🙂

Соответствует полю IP-заголовка DSCP.

dst-adress

( IP / маска сети |

диапазон IP ;

По умолчанию:)

Соответствует пакетам, в которых пункт назначения равен указанному IP или попадает в указанный диапазон IP.

dst-address-list

( имя ; По умолчанию:)

Сопоставляет адрес назначения пакета с заданным пользователем списком адресов

dst-address-type 

( unicast | local |

broadcast | multicast ;

По умолчанию:)

Соответствует типу адреса назначения:

  • unicast — IP-адрес, используемый для передачи точка-точка
  • local — если одному из интерфейсов роутера назначен dst-адрес
  • broadcast — пакет отправляется на все устройства в подсети
  • multicast — пакет пересылается определенной группе устройств

dst-limit 

( integer [/ time],

integer, dst-address|

dst-port |

src-address [/ time] ;

по умолчанию:)

Сопоставляет пакеты до тех пор, пока не будет превышен заданный предел количества пакетов в секунду. В отличие от сопоставителя пределов , каждый IP-адрес / порт назначения имеет собственное ограничение. Параметры записываются в следующем формате: count[/time],burst,mode[/expire].

  • count — максимальная средняя скорость пакетов, измеренная в пакетах за timeинтервал
  • time — указывает временной интервал, в котором измеряется скорость передачи пакетов (необязательно)
  • burst — количество пакетов, которые не учитываются по скорости передачи пакетов
  • mode — классификатор ограничения скорости пакетов
  • expire — указывает интервал, по истечении которого записанный IP-адрес / порт будет удален (необязательно)

dst-port 

( целое [-integer]: 0..65535 ;

по умолчанию 🙂

Список номеров портов назначения или диапазонов номеров портов

fragment 

( да | нет ; по умолчанию:)

Соответствует фрагментированным пакетам. Первый (начальный) фрагмент не в счет. Если включено отслеживание соединений, фрагментов не будет, так как система автоматически собирает каждый пакет

hotspot 

( auth |

from-client |

http | local-dst |

to-client ;

По умолчанию:)

Сопоставляет пакеты, полученные от клиентов HotSpot, с различными сопоставителями HotSpot.

  • auth — соответствует аутентифицированным клиентским пакетам HotSpot
  • from-client — соответствует пакетам, приходящим от клиента HotSpot
  • http — соответствует HTTP-запросам, отправленным на сервер HotSpot
  • local-dst — соответствует пакетам, предназначенным для сервера HotSpot
  • to-client — соответствует пакетам, которые отправляются клиенту HotSpot

icmp-options

 ( целое: целое ;

по умолчанию:)

Соответствует полям ICMP «тип: код»

in-bridge-port 

( имя ; По умолчанию:)

Фактический интерфейс: пакет вошел в маршрутизатор, если входящий интерфейс является мостом.

in-interface

( имя ; По умолчанию:)

Интерфейс пакет попал в роутер

ingress-priority

(входящий приоритет)

( целое число: 0..63 ;

по умолчанию 🙂

Соответствует входящему приоритету пакета. Приоритет может быть получен из бита VLAN, WMM или MPLS EXP.

ipsec-policy 

( in | out, ipsec | none;

по умолчанию 🙂

Соответствует политике, используемой IpSec. Значение записывается в следующем формате: direction, policy. Направление используется для выбора соответствия политике, используемой для декапсуляции, или политике, которая будет использоваться для инкапсуляции.

  • in — действует в цепочках PREROUTING, INPUT и FORWARD
  • out — действует в цепочках POSTROUTING, OUTPUT и FORWARD
  • ipsec — соответствует, если пакет подлежит обработке IpSec;
  • none — соответствует пакету, который не подлежит обработке IpSec (например, транспортный пакет IpSec).

Например, если маршрутизатор получает пакет Gre, инкапсулированный в Ipsec, то правило ipsec-policy=in,ipsecбудет соответствовать пакету Gre, но правило ipsec-policy=in,noneбудет соответствовать пакету ESP.

ipv4-options 

( любой |

свободная маршрутизация-источник |

маршрут без записи |

предупреждение об отсутствии маршрутизатора |

маршрутизация без источника |

без отметки времени |

нет | маршрут записи | предупреждение маршрутизатора |

строгая маршрутизация от источника |

отметка времени ;

По умолчанию:)

Соответствует параметрам заголовка IPv4.

  • any — сопоставить пакет хотя бы с одним из вариантов ipv4
  • Free-source-routing — сопоставление пакетов с опцией свободной маршрутизации от источника. Эта опция используется для маршрутизации интернет-дейтаграммы на основе информации, предоставленной источником.
  • no-record-route — сопоставление пакетов без опции записи маршрута. Эта опция используется для маршрутизации интернет-дейтаграммы на основе информации, предоставленной источником.
  • no-router-alert — сопоставлять пакеты без опции изменения маршрутизатора
  • no-source-routing — соответствие пакетов без опции маршрутизации от источника
  • no-timestamp — сопоставлять пакеты без опции timestamp
  • record-route — сопоставить пакеты с опцией записи маршрута
  • router-alert — сопоставляет пакеты с опцией изменения маршрутизатора
  • strict-source-routing — сопоставление пакетов с опцией строгой маршрутизации от источника
  • timestamp — сопоставить пакеты с отметкой времени
jump-target ( имя ; По умолчанию:)Имя целевой цепочки, к которой нужно перейти. Применимо, только еслиaction=jump

Layer7-protocol 

( имя ; По умолчанию 🙂

Имя фильтра Layer7 определено в меню протокола Layer7 .

limit 

( целое,

время,

целое ;

по умолчанию:)

Сопоставляет пакеты до тех пор, пока не будет превышен заданный предел количества пакетов в секунду. Параметры записываются в следующем формате: count[/time],burst.

  • count — максимальная средняя скорость пакетов, измеренная в пакетах за timeинтервал
  • time — указывает интервал времени, в котором измеряется скорость передачи пакетов (необязательно, будет использоваться 1 с, если не указано)
  • burst — количество пакетов, которые не учитываются по скорости передачи пакетов

log-prefix 

( строка ; По умолчанию:)

Добавляет указанный текст в начало каждого сообщения журнала. Применимо, еслиaction=log
new-connection-mark ( строка ; По умолчанию:) 

new-dscp 

( целое число: 0..63 ;

по умолчанию 🙂

Устанавливает новое значение DSCP для пакета.

new-mss

( целое ; по умолчанию 🙂

Устанавливает новый MSS для пакета. Параметр clip-to-pmtu динамически устанавливает размер MSS в соответствии с MTU пути.

new-packet-mark

( строка ; По умолчанию:)

 

new-priority 

( integer |

from-dscp |

from-dscp-high-3-bits |

from-ingress ;

По умолчанию 🙂

Устанавливает новый приоритет для пакета. Это может быть приоритет VLAN, WMM, DSCP или MPLS EXP. Это свойство также можно использовать для установки внутреннего приоритета.

new-routing-mark 

( строка ; По умолчанию:)

 

new-ttl 

( декремент |

инкремент |

набор: целое число;

по умолчанию:)

 

nth 

( целое; целое ;

по умолчанию:)

Соответствует каждому n-му пакету. 

out-bridge-port 

( имя ; По умолчанию:)

Фактический интерфейс: пакет покидает маршрутизатор, если исходящий интерфейс является мостом.

out-interface

(; По умолчанию: )

Интерфейс, пакет покидает маршрутизатор

packet-mark 

( без метки |

строка ;

по умолчанию:)

Соответствует пакетам, помеченным с помощью средства mangle с определенной меткой пакета. Если установлен no-mark , правило будет соответствовать любому немаркированному пакету.

packet-size 

( целое [-integer]: 0..65535 ;

по умолчанию 🙂

Соответствует пакетам указанного размера или диапазона размеров в байтах.

passthrough

( да | нет ; по умолчанию: да )

разрешать ли пакету проходить дальше (например, сквозное действие) в брандмауэр или нет (свойство допустимо только для некоторых действий).

per-connection-classifier ( ValuesToHash: знаменатель /

остаток ; по умолчанию 🙂

Устройство сопоставления PCC позволяет разделить трафик на равные потоки с возможностью хранить пакеты с определенным набором параметров в одном конкретном потоке.

port

( integer [-integer]: 0..65535 ; по умолчанию 🙂

Соответствует, если какой-либо порт (исходный или целевой) соответствует указанному списку портов или диапазонам портов. Применимо, только если protocolTCP или UDP

protocol 

( имя или идентификатор протокола ; по умолчанию: tcp )

Соответствует конкретному IP-протоколу, указанному по имени или номеру протокола
psd ( целое, время, целое, целое ; По умолчанию:)Попытки обнаружить сканирование TCP и UDP. Параметры имеют следующий форматWeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight

  • WeightThreshold — общий вес последних пакетов TCP / UDP с разными портами назначения, приходящих с одного и того же хоста, который будет рассматриваться как последовательность сканирования портов.
  • DelayThreshold — задержка для пакетов с разными портами назначения, приходящих с одного и того же хоста, должна рассматриваться как возможная подпоследовательность сканирования портов
  • LowPortWeight — вес пакетов с привилегированным (<1024) портом назначения
  • HighPortWeight — вес пакета с непривилегированным портом назначения

random 

( целое число: 1..99 ;

по умолчанию 🙂

Соответствует пакетам случайным образом с заданной вероятностью.

routing-mark

( строка ; По умолчанию:)

Соответствует пакетам, отмеченным функцией mangle, с определенной меткой маршрутизации

priority 

( целое число: 0..63 ;

по умолчанию 🙂

Соответствует приоритету пакета после установки нового приоритета. Приоритет может быть получен из VLAN, WMM, DSCP, бита MPLS EXP или из внутреннего приоритета, который был установлен с помощью действия set-priority.

src-ardess

( IP / маска сети, диапазон IP ;

по умолчанию 🙂

Соответствует пакетам, в которых источник равен указанному IP или попадает в указанный диапазон IP.

src-address-list

( имя ; По умолчанию:)

Сопоставляет адрес источника пакета со списком адресов, заданным пользователем

src-address-type 

( unicast | local | broadcast | multicast ; По умолчанию:)

Соответствует типу адреса источника:

  • unicast — IP-адрес, используемый для передачи точка-точка
  • local — если адрес назначен одному из интерфейсов роутера
  • broadcast — пакет отправляется на все устройства в подсети
  • multicast — пакет пересылается определенной группе устройств

src-port

 ( integer [-integer]: 0..65535 ; по умолчанию 🙂

Список исходных портов и диапазоны исходных портов. Применимо, только если протокол TCP или UDP.

src-mac-address 

( MAC-адрес ; по умолчанию:)

Соответствует исходному MAC-адресу пакета

tcp-flags 

( ack | cwr | ece | fin | psh | rst | syn | urg ; по умолчанию 🙂

Соответствует указанным флагам TCP

  • ack — подтверждение данных
  • cwr — окно перегрузки уменьшено
  • ece — флаг ECN-echo (явное уведомление о перегрузке)
  • fin — закрыть соединение
  • psh — функция push
  • rst — разорвать соединение
  • syn — новое соединение
  • urg — срочные данные

tcp-mss 

( integer [-integer]: 0..65535 ; по умолчанию 🙂

Соответствует значению TCP MSS IP-пакета

time

( время-время, сб | пт | чт | ср | вт | пн | вс ; по умолчанию:)

Позволяет создать фильтр на основе времени и даты прибытия пакетов или, для локально сгенерированных пакетов, времени и даты отправления

tls-host 

( строка ; По умолчанию 🙂

Позволяет сопоставить трафик на основе имени хоста TLS. Принимает синтаксис GLOB для сопоставления с подстановочными знаками. Обратите внимание, что средство сопоставления не сможет сопоставить имя хоста, если кадр подтверждения TLS фрагментирован на несколько сегментов (пакетов) TCP.

ttl 

( равно |

больше-чем |

меньше-чем |

не-равно:

целое число (0..255) ; по умолчанию 🙂

Соответствует значению TTL пакетов.

Курс MikroTik Certified Traffic Control Engineer в Екатеринбурге

MikroTik Certified Traffic Control Engineer — это углубленный тренинг 2-го уровня обучения MikroTik по управлению трафиком.

Курс адресован сетевым инженерам, администрирующим сети с приоритезацией (QoS) между разными типами трафика , а также защищающих свою сеть при помощи межсетевого экрана (firewall). 

Содержание курса

Диаграмма движение пакетов (Packet flow diagram)
Почему понимание движения пакетов важно и необходимо?
Полный обзор всех пунктов диаграммы и их объяснение
Простые примеры движения пакетов к самому роутеру или через роутер, включая случай, когда пакет идет через bridge
— Лабораторная работа
Более сложные примеры работы диаграммы
— Лабораторная работа


Firewall filter/nat/mangle


Сервис Connection tracking

Таблица Filter + лабораторная работа

— цепочки (chains): встроенные и пользовательские

— все действия (actions)

-примеры со сложными условиями в правилах фаервола

Таблица NAT + лабораторная работа

— цепочки (chains): встроенные и пользовательские

— все действия (actions)

— примеры со сложными условиями в правилах для NAT

— NAT helpers для работы с протоколами, имеющими проблемы с NAT

Таблица Mangle + лабораторная работа

— цепочки (chains): встроенные и пользовательские

— все действия (actions)

— примеры со сложными условиями в правилах для Mangle с использованием закладок «advanced», «extra» + лабораторная работа

uPNP для динамического DST-NAT

Quality of Service (приоритизация трафика)

HTB: реализация QoS с использованием очередей

— HTB: общая информация

— HTB: реализация древовидной структуры (/queue tree)

— HTB: дерево очередей + лабораторная работа

— HTB: двойное ограничение + лабораторная работа

— HTB: параметр priority + лабораторная работа

Технология Burst + лабораторная работа

Типы очередей

— FIFO + лабораторная работа

— SFQ + лабораторная работа

— RED + лабораторная работа

— PCQ + лабораторная работа

— Размер очереди (queue size) + лабораторная работа

Простые очереди + лабораторная работа

Взаимодействие простых очередей и дерева очередей

DNS client/cache

Базовая конфигурация + лабораторная работа

Статические DNS-записи + лабораторная работа

DHCP client/relay/server

Работа протокола DHCP

Идентификация DHCP-клиента + лабораторная работа

Конфигурация DHCP-сервера + лабораторная работа

— Закладка DHCP networks

— DHCP опции (встроенные и пользовательские)

— IP Pool

— дополнительные возможности DHCP сервера

DHCP relay и его конфигурация + лабораторная работ

Web Proxy

Базовая конфигурация

Списки доступа

— Access list + лабораторная работа

— Прямой доступ (Direct Access list) + лабораторная работа

— Доступ к кэш + лабораторная работа

Регулярные выражения (regexp) + лабораторная работа

Mikrotik. Два провайдера. Балансировка. — Абонентское обслуживание компьютеров и серверов

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

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

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

Failover

У нас появился резервный канал, в который можно направить трафик при отказе основного. Но как сделать, чтобы 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

# Настроим сети провайдеров:
/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
###Обеспечение резервирования каналов традиционным способом###
# укажем 2 default gateway с разными приоритетами
/ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254 distance=1 check-gateway=ping
/ip route add dst-address=0.0.0.0/0 gateway=10.200.1.254 distance=2 check-gateway=ping

check-gateway=ping для mikrotik обрабатывается так:Периодически (каждые 10 секунд) шлюз проверяется отсылкой на него ICMP пакета (ping). Потерянным пакет считается, если он не вернулся в течении 10 секунд. После двух потерянных пакетов шлюз считается недоступным. После получения ответа от шлюза он становится доступным и счетчик потерянных пакетов сбрасывается.

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

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

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

Принцип прост:

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

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

# Настроим сети провайдеров:
/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
###Обеспечение failover c более глубоким анализом канала###
#с помощью параметра scope укажем рекурсивные пути к узлам 8.8.8.8 и 8.8.4.4
/ip route add dst-address=8.8.8.8 gateway=10.100.1.254 scope=10
/ip route add dst-address=8.8.4.4 gateway=10.200.1.254 scope=10
# укажем 2 default gateway через узлы путь к которым указан рекурсивно
/ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 distance=1 check-gateway=ping
/ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 distance=2 check-gateway=ping

Теперь разберем, что происходит чуть подробнее:

Хитрость в том, что шлюз провайдера не знает о том, что 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

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

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

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

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

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

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

Кстати почему при разделе трафика мы оперируем соединениями, а не пакетами?Почитайте, как работает TCP протокол. Если коротко — задача TCP протокола не только швырнуть пакетом в получателя, но и проконтролировать, как тот его принял. Делается это с помощью установки соединения, в рамках которого, собственно, и передаются пакеты данных — вместе со служебной информацией. Если оперировать пакетами и забыть про соединения, то возможны ситуации, когда удаленный хост, установив соединение с одним адресом, просто отбросит часть пакетов пришедшую со второго — «неправильного» адреса.

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

Итак, при любом варианте балансировки канала нам нужно сначала подготовиться к принятию входящего трафика и научить 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

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

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

Резервирование интернет-канала на маршрутизаторах Mikrotik. VoxLink.

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

 

Исходные данные:
Интерфейс основного провайдера — pppoe-isp1 (PPPoE-клиент)
Интерфейс резервного провайдера — ether2-isp2

 

Настройка

 

Повышение distance маршрутов по умолчанию

Для начала нужно повысить distance маршрутов по умолчанию, автоматически добавляемых подключениями к провайдерам. Это делается для того, чтобы скрипт мог обнаружить и применить изменения маршрутов по умолчанию, и чтобы автоматически добавляемые маршруты не мешали резервированию.
PPPoE-подключение основного провайдера (distance 11):

/interface pppoe-client
add add-default-route=yes default-route-distance=11 disabled=no interface=ether1-isp1 keepalive-timeout=disabled name=pppoe-isp1 password=secret_password user=user1 allow=mschap2

DHCP-клиент на интерфейсе резервного провайдера (distance 12):

/ip dhcp-client
add default-route-distance=12 disabled=no interface=ether2-isp2 use-peer-dns=no

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

 

Маркировка трафика

Нужно заставить маршрутизатор отправлять все пакеты соединения через тот интерфейс, через который пришел первый пакет соединения. Для этого добавляем правила в таблицу mangle (комментарии «ISP1 mark conn», «ISP2 mark conn»):

/ip firewall mangle
add comment=»ISP1 mark conn» action=mark-connection chain=prerouting connection-state=new in-interface=pppoe-isp1 new-connection-mark=from-ISP1
add comment=»ISP2 mark conn» action=mark-connection chain=prerouting connection-state=new in-interface=ether2-isp2 new-connection-mark=from-ISP2
add action=mark-routing chain=prerouting connection-mark=from-ISP1 new-routing-mark=to-ISP1
add action=mark-routing chain=prerouting connection-mark=from-ISP2 new-routing-mark=to-ISP2
 
add action=mark-routing chain=output connection-mark=from-ISP1 new-routing-mark=to-ISP1
add action=mark-routing chain=output connection-mark=from-ISP2 new-routing-mark=to-ISP2
add action=mark-routing chain=output comment=»ISP1 mangle» new-routing-mark=to-ISP1 src-address=1.1.1.10
add action=mark-routing chain=output comment=»ISP2 mangle» new-routing-mark=to-ISP2 src-address=2.2.2.20

Для правил в цепочке output, проставляющих routing mark в зависимости от IP-адреса отправителя, проставляем комментарии «ISP1 mangle» и «ISP2 mangle», чтобы скрипт мог находить их. IP-адреса в src-address можно указать любые, т.к. скрипт заменит их при первом выполнении (здесь и далее будет использоваться 1.1.1.10 вместо IP-адреса основного провайдера, 2.2.2.20 вместо IP-адреса резервного провайдера).

 

Правила NAT

Добавляем NAT-правила для провайдеров (здесь используются комментарии «ISP1 NAT» и «ISP2 NAT»):

/ip firewall nat
add action=src-nat chain=srcnat comment=»ISP1 NAT» out-interface=pppoe-isp1 to-addresses=1.1.1.10
add action=src-nat chain=srcnat comment=»ISP2 NAT» out-interface=ether2-isp2 to-addresses=2.2.2.20

 

Маршруты и правила маршрутизации

Добавляем маршруты и правила маршрутизации.

/ip route
# Отдельные таблицы маршрутов для провайдеров, в каждую таблицу будет входить только маршрут по умолчанию
# (комментарии «ISP1 route» и «ISP2 route», 1.1.1.1 и 2.2.2.1 — шлюзы по умолчанию):
add comment=»ISP1 route» distance=1 gateway=1.1.1.1 routing-mark=ISP1
add comment=»ISP2 route» distance=1 gateway=2.2.2.1 routing-mark=ISP2
 
# Маршруты по умолчанию основной и резервный с distance 1 и 2 соответственно (комментарии «GW1» и «GW2»).
add comment=GW1 distance=1 gateway=1.1.1.1
add comment=GW2 distance=2 gateway=2.2.2.1
/ip route rule
 
# Правила маршрутизации для отправки пакетов с внешнего IP-адреса через соответствующий маршрут (комментарии «ISP1 rule» и «ISP2 rule»).
# Пакеты GRE-туннелей не будут уходить через правильный интерфейс без этих правил.
add comment=»ISP1 rule» src-address=1.1.1.10/32 table=ISP1
add comment=»ISP2 rule» src-address=2.2.2.20/32 table=ISP2
 
# Правила для маршрутизации пакетов, адресованных в локальные сети, через таблицу main.
# Благодаря этим правилам, в таблицах маршрутов ISP1 и ISP2 достаточно указать только маршруты по умолчанию.
add dst-address=192.168.0.0/16 table=main
add dst-address=10.0.0.0/8 table=main
add dst-address=172.16.0.0/12 table=main
 
# Правила для маршрутизации пакетов с метками провайдеров через правильную таблицу маршрутов.
add routing-mark=to-ISP1 table=ISP1
add routing-mark=to-ISP2 table=ISP2

 

Запрет отправки исходящих пакетов с неправильным IP-адресом отправителя через интерфейсы провайдеров

Правила, описанные в этом разделе нужны для решения проблемы, возникающей при потере линка на интерфейсе одного из провайдеров. В этом случае трафик с фиксированным адресом отправителя (такой как GRE), уходящий через интерфейс провайдера, на котором потерян линк, начнёт уходить через интерфейс другого провайдера, проходя при этом NAT. Это создаст проблему — после восстановления линка трафик продолжит натироваться, т.к. информация о NAT будет добавлена в запись о соединении в таблице соединений, из-за чего соединение не будет функционировать до удаления его записи из таблицы соединений.

 

Сперва нужно создать списки адресов с адресами, с которых разрешено отправлять исходящие пакеты через каждый из интерфейсов провайдеров (комментарии «ISP1 src IP» и «ISP2 src IP»).

Списки адресов нужны на тот случай, если на интерфейсе провайдера будет более одного IP-адреса — скрипт будет изменять только IP-адрес в записи с соответствующим комментарием, остальные IP-адреса интерфейса нужно добавлять в список адресов без комментария или с другими комментариями.

/ip firewall address-list
add address=1.1.1.10 comment=»ISP1 src IP» list=ISP1_src_IPs
add address=2.2.2.20 comment=»ISP2 src IP» list=ISP2_src_IPs

 

Теперь нужно добавить правила, сбрасывающие исходящий трафик на интерфейсах провайдеров с IP-адресов, отличных от разрешённых (комментарии «ISP1 restrict output» и «ISP2 restrict output»).

/ip firewall filter
add action=drop chain=output comment=»ISP1 restrict output» out-interface=pppoe-isp1 src-address-list=!ISP1_src_IPs
add action=drop chain=output comment=»ISP2 restrict output» out-interface=ether2-isp2 src-address-list=!ISP2_src_IPs

 

Скрипт для переключения провайдеров

Добавляем скрипт в system scripts через консоль или GUI, в данном примере имя скрипта — «upd_route_rules». Для скрипта должны быть включены политики read, write и test.
В переменной Iface1 нужно указать имя интерфейса основного провайдера, в переменной Iface2 — имя интерфейса резервного провайдера. Если потом понадобится поменять состав интерфейсов провайдеров или их приоритеты, нужно отключить периодическое выполнение скрипта (описано в конце статьи), указать для переменных Iface1 и Iface2 новые значения и выполнить скрипт, остальные изменения будут внесены автоматически (после этого нужно снова включить периодическое выполнение скрипта).
В массиве PingTargets можно указать свой список IP-адресов для тестирования доступности провайдера.

:local Iface1 «pppoe-isp1»
:local Iface2 «ether2-isp2»
:local Iface1Disabled true
:local Iface2Disabled true
:local GW1 «»
:local GW2 «»
:local IP1 «»
:local IP2 «»
:local IP1changed false
:local IP2changed false
 
:do {
:set Iface1Disabled [/interface get [/interface find name=$Iface1] disabled]
} on-error={}
:do {
:set Iface2Disabled [/interface get [/interface find name=$Iface2] disabled]
} on-error={}
 
:foreach i in=[/ip route find gateway-status~»reachable .* $Iface1$» and dst-address=»0.0.0.0/0″] do={
:if ([/ip route get $i comment] = «») do={:set GW1 [/ip route get $i gateway]}
}
 
:foreach i in=[/ip route find gateway-status~»reachable .* $Iface2$» and dst-address=»0.0.0.0/0″] do={
:if ([/ip route get $i comment] = «») do={:set GW2 [/ip route get $i gateway]}
}
 
#:put $GW1
#:put $GW2
:local h
:local hID
 
:if («$GW1» != «») do={
:do {
:foreach i in=[/ip route find comment=»ISP1 route»] do={
:if ($GW1 != [/ip route get $i gateway]) do={ /ip route set $i gateway=$GW1; :put «updated ISP1 route»; /log info «updated ISP1 route» }
}
} on-error={}
:do {
:set h [/ip route find comment=»GW1″]
:if ($GW1 != [/ip route get $h gateway]) do={ /ip route set $h gateway=$GW1; /log info «updated GW1» }
} on-error={}
}
 
:if («$GW2» != «») do={
:do {
:foreach i in=[/ip route find comment=»ISP2 route»] do={
:if ($GW2 != [/ip route get $i gateway]) do={ /ip route set $i gateway=$GW2; :put «updated ISP2 route»; /log info «updated ISP2 route» }
}
} on-error={}
:do {
:set h [/ip route find comment=»GW2″]
:if ($GW2 != [/ip route get $h gateway]) do={ /ip route set $h gateway=$GW2; /log info «updated GW2» }
} on-error={}
}
 
:foreach i in=[/ip address find interface=$Iface1] do={
:if ([/ip address get $i comment] ~ «secondary» or [/ip address get $i disabled]) do={} else={:set IP1 [/ip address get $i address]}
}
 
:foreach i in=[/ip address find interface=$Iface2] do={
:if ([/ip address get $i comment] ~ «secondary» or [/ip address get $i disabled]) do={} else={:set IP2 [/ip address get $i address]}
}
 
#:put $IP1
#:put $IP2
:local pos «»
:local curIP «»
:local curIFACE «»
:local curSAIP
 
:if («$IP1» != «») do={
:set pos [:find «$IP1» «/»]
:if ($pos >= 0) do={ :set IP1 [:pick «$IP1» 0 $pos] }
:do {
:set h [/ip route rule find comment=»ISP1 rule»]
:set curIP [/ip route rule get $h src-address]
:set pos [:find «$curIP» «/»]
:if ($pos >= 0) do={ :set curIP [:pick «$curIP» 0 $pos] }
:if («$IP1» != «$curIP») do={ /ip route rule set $h src-address=$IP1; :put «updated ISP1 rule»; /log info «updated ISP1 rule»; :set IP1changed true }
} on-error={}
 
:do {
:set h [/ip firewall mangle find comment=»ISP1 mangle»]
:set curIP [/ip firewall mangle get $h src-address]
:set pos [:find «$curIP» «/»]
:if ($pos >= 0) do={ :set curIP [:pick «$curIP» 0 $pos] }
:if («$IP1» != «$curIP») do={ /ip firewall mangle set $h src-address=$IP1; :put «updated ISP1 mangle»; /log info «updated ISP1 mangle»; :set IP1changed true }
} on-error={}
 
:do {
:set h [/ip firewall nat find comment=»ISP1 NAT»]
:set curIP [/ip firewall nat get $h to-addresses]
:if («$IP1» != «$curIP») do={ /ip firewall nat set $h to-addresses=$IP1; :put «updated ISP1 NAT»; /log info «updated ISP1 NAT»; :set IP1changed true }
:set curIFACE [/ip firewall nat get $h out-interface]
:if («$Iface1» != «$curIFACE») do={ /ip firewall nat set $h out-interface=$Iface1; :put «updated ISP1 NAT interface»; /log info «updated ISP1 NAT interface» }
} on-error={}
 
:do {
:foreach h in=[/ip ipsec policy find comment=»ISP1 IPSec policy»] do={
:set curSAIP [/ip ipsec policy get $h sa-src-address]
:set curIP [/ip ipsec policy get $h src-address]
:set pos [:find «$curIP» «/»]
:if ($pos >= 0) do={ :set curIP [:pick «$curIP» 0 $pos] }
:if («$IP1» != «$curSAIP» || «$IP1» != «$curIP») do={ /ip ipsec policy set $h sa-src-address=$IP1 src-address=»$IP1/32″; :put «updated ISP1 IPSec policy»; /log info «ISP1 IPSec policy» }
}
} on-error={}
 
:do {
:foreach h in=[/interface gre find comment=»ISP1 GRE»] do={

:set curIP [/interface gre get $h local-address]
:if («$IP1» != «$curIP») do={ /interface gre set $h local-address=$IP1; :put «updated ISP1 GRE»; /log info «updated ISP1 GRE» }
}
} on-error={}
 
:do {
:set h [/ip firewall address-list find comment=»ISP1 src IP»]
:set curIP [/ip firewall address-list get $h address]
:if («$IP1» != «$curIP») do={ /ip firewall address-list set $h address=$IP1; :put «updated ISP1 src IP in address list»; /log info «updated ISP1 src IP in address list»; :set IP1changed true }
} on-error={}
 
:do {
:set h [/ip firewall filter find comment=»ISP1 restrict output»]
:set curIFACE [/ip firewall filter get $h out-interface]
:if («$Iface1» != «$curIFACE») do={ /ip firewall filter set $h out-interface=$Iface1; :put «updated ISP1 restrict output interface»; /log info «updated ISP1 restrict output interface» }
} on-error={}
}
 
:do {
:set h [/ip firewall mangle find comment=»ISP1 mark conn»]
:set curIFACE [/ip firewall mangle get $h in-interface]
:if («$Iface1» != «$curIFACE») do={ /ip firewall mangle set $h in-interface=$Iface1; :put «updated ISP1 mark conn interface»; /log info «updated ISP1 mark conn interface» }
} on-error={}
 
:if («$IP2» != «») do={
:set pos [:find «$IP2» «/»]
:if ($pos >= 0) do={ :set IP2 [:pick «$IP2» 0 $pos] }
:do {
:set h [/ip route rule find comment=»ISP2 rule»]
:set curIP [/ip route rule get $h src-address]
:set pos [:find «$curIP» «/»]
:if ($pos >= 0) do={ :set curIP [:pick «$curIP» 0 $pos] }
:if («$IP2» != «$curIP») do={ /ip route rule set $h src-address=$IP2; :put «updated ISP2 rule»; /log info «updated ISP2 rule»; :set IP2changed true }
} on-error={}
 
:do {
:set h [/ip firewall mangle find comment=»ISP2 mangle»]
:set curIP [/ip firewall mangle get $h src-address]
:set pos [:find «$curIP» «/»]
:if ($pos >= 0) do={ :set curIP [:pick «$curIP» 0 $pos] }
:if («$IP2» != «$curIP») do={ /ip firewall mangle set $h src-address=$IP2; :put «updated ISP2 mangle»; /log info «updated ISP2 mangle»; :set IP2changed true }
} on-error={}
 
:do {
:set h [/ip firewall nat find comment=»ISP2 NAT»]
:set curIP [/ip firewall nat get $h to-addresses]
:if («$IP2» != «$curIP») do={ /ip firewall nat set $h to-addresses=$IP2; :put «updated ISP2 NAT»; /log info «updated ISP2 NAT»; :set IP2changed true }
:set curIFACE [/ip firewall nat get $h out-interface]
:if («$Iface2» != «$curIFACE») do={ /ip firewall nat set $h out-interface=$Iface2; :put «updated ISP2 NAT interface»; /log info «updated ISP2 NAT interface» }
} on-error={}
 
:do {
:foreach h in=[/ip ipsec policy find comment=»ISP2 IPSec policy»] do={
:set curSAIP [/ip ipsec policy get $h sa-src-address]
:set curIP [/ip ipsec policy get $h src-address]
:set pos [:find «$curIP» «/»]
:if ($pos >= 0) do={ :set curIP [:pick «$curIP» 0 $pos] }
:if («$IP2» != «$curSAIP» || «$IP2» != «$curIP») do={ /ip ipsec policy set $h sa-src-address=$IP2 src-address=»$IP2/32″; :put «updated ISP2 IPSec policy»; /log info «ISP2 IPSec policy» }
}
} on-error={}
 
:do {
:foreach h in=[/interface gre find comment=»ISP2 GRE»] do={
:set curIP [/interface gre get $h local-address]
:if («$IP2» != «$curIP») do={ /interface gre set $h local-address=$IP2; :put «updated ISP2 GRE»; /log info «updated ISP2 GRE» }
}
} on-error={}
 
:do {
:set h [/ip firewall address-list find comment=»ISP2 src IP»]
:set curIP [/ip firewall address-list get $h address]
:if («$IP2» != «$curIP») do={ /ip firewall address-list set $h address=$IP2; :put «updated ISP2 src IP in address list»; /log info «updated ISP2 src IP in address list»; :set IP2changed true }
} on-error={}
 
:do {
:set h [/ip firewall filter find comment=»ISP2 restrict output»]
:set curIFACE [/ip firewall filter get $h out-interface]
:if («$Iface2» != «$curIFACE») do={ /ip firewall filter set $h out-interface=$Iface2; :put «updated ISP2 restrict output interface»; /log info «updated ISP2 restrict output interface» }
} on-error={}
}
 
:do {
:set h [/ip firewall mangle find comment=»ISP2 mark conn»]
:set curIFACE [/ip firewall mangle get $h in-interface]
:if («$Iface2» != «$curIFACE») do={ /ip firewall mangle set $h in-interface=$Iface2; :put «updated ISP2 mark conn interface»; /log info «updated ISP2 mark conn interface» }
} on-error={}
 
#:put $IP1
#:put $IP2
#:put $IP1changed
#:put $IP2changed
 
:local PingCount 1
:local PingTargets {77.88.8.8; 8.8.8.8; 94.100.180.200; 208.67.222.222}
:local GW1InetOk false
:local GW2InetOk false
:local GW1Pings 0
:local GW2Pings 0
 
:foreach host in=$PingTargets do={
:if (!$Iface1Disabled) do={
:local res [/ping $host count=$PingCount interface=$Iface1]
:set GW1Pings ($GW1Pings + $res)
}
:if (!$Iface2Disabled) do={
:local res [/ping $host count=$PingCount interface=$Iface2]
:set GW2Pings ($GW2Pings + $res)
}
:delay 1
}
:set GW1InetOk ($GW1Pings >= 1)
:set GW2InetOk ($GW2Pings >= 1)
 
:local GW1h [/ip route find comment=»GW1″]
:local GW2h [/ip route find comment=»GW2″]
:local GW1distance [/ip route get $GW1h distance]
:local GW2distance [/ip route get $GW2h distance]
 
:if ($GW1InetOk && ($GW1distance >= $GW2distance)) do={
/ip route set $GW1h distance=1
/ip route set $GW2h distance=2
/ip firewall connection remove [find dst-address ~ «.*:5060»]
/ip firewall connection remove [find dst-address ~ «.*:4569»]
/ip firewall connection remove [find dst-address ~ «.*:4500»]
/ip firewall connection remove [find dst-address ~ «.*:500»]
/ip firewall connection remove [find dst-address ~ «.*:1701»]
/ip firewall connection remove [find protocol=»ospf»]
:put «Switched to GW1»
/log info «Switched to GW1»
}
 
:if (!$GW1InetOk && $GW2InetOk && ($GW2distance >= $GW1distance)) do={
/ip route set $GW1h distance=2
/ip route set $GW2h distance=1
/ip firewall connection remove [find dst-address ~ «.*:5060»]
/ip firewall connection remove [find dst-address ~ «.*:4569»]
/ip firewall connection remove [find dst-address ~ «.*:4500»]
/ip firewall connection remove [find dst-address ~ «.*:500»]
/ip firewall connection remove [find dst-address ~ «.*:1701»]
/ip firewall connection remove [find protocol=»ospf»]
:put «Switched to GW2»
/log info «Switched to GW2»
}

 

ПРИМЕЧАНИЯ

1) В скрипте также упоминаются комментарии «ISP1 GRE», «ISP2 GRE», «ISP1 IPSec policy» и «ISP2 IPSec policy», эти комментарии нужны для обновления локальных IP-адресов в настройках GRE-туннелей и политик IPSec. Их использование будет описано в одной из последующих статей.

2) Скрипт берёт первый IP-адрес, настроенный на интерфейсе провайдера и не имеющий комментария. Если вы используете более одного IP-адреса на каком-либо интернет-канале, отметьте все кроме одного каким-либо комментарием (например «secondary»).

 

Лучше сделать тестовый запус скрипта (и включить перед этим safe mode):

/system script run upd_route_rules

При запуске скрипт должен актуализировать настройки провайдеров и вывести уведомления о всех изменённых пунктах.

Если скрипт отрабатывает правильно, можно добавлять периодическое выполнение скрипта, например, раз в 45 секунд.

/system scheduler
add interval=45s name=upd_route_rules on-event=upd_route_rules policy=read,write,test start-date=jan/01/1970 start-time=00:00:00  

MIKROTIK НАСТРОЙКА QUEUES TREE ЧАСТЬ ВТОРАЯ

И так, начинаем как всегда с маркировки трафика и адресных листов. Открываем IP->Firewall->Address List. Нажимаем плюсик и заполняем своими данными два поля Name и Address. Кстати, в поле Address лучше сразу указывайте подсеть. Так удобнее и не надо плодить кучу однотипных правил.

Добавили? Едем дальше. Теперь переходим на вкладку Mangle (IP->Firewall->Mangle). Здесь мы создаем два правила для входящего и исходящего трафика. Они будут практически идентичны друг другу. Жмем синий плюсик и заполняем поля для Download трафика:

  • General->Chain-> Forward

  • Advanced->Dst.Address List->Ваше название адресного листа, который мы сделали ранее.

  • Action->Action->mark packet

  • Action->New Packet Mark-> Назовите, как вам будет удобнее.

Теперь переходим к Upload трафику.

  • General->Chain-> Forward

  • Advanced->Src.Address List->Ваше название адресного листа, который мы сделали ранее.

  • Action->Action->mark packet

  • Action->New Packet Mark-> Назовите, как вам будет удобнее.

Для большей наглядности, вот как выглядят правила у меня:

Далее нам необходимо создать два типа очередей, которые будут обрабатывать наш трафик Queues->Queue Types. Здесь ничего сложного нет, поэтому просто приведу картинки, а вы сделайте так же.

Ну и наконец, создаем само дерево очередей для обработки трафика Queues->Queue Tree. Жмем плюсик и добавляем первое глобальное дерево:

  • Name – Любое название

  • Parent – global

  • Queue Type – default

  • Priority – 8

  • Max Limit – указываете ширину Вашего канала.

Жмем ОК. Добавляем следующее правило, но уже используя типы и манглы.

  • Name -> download

  • Parent -> выбираем название, которое сделали шагом выше.

  • Packet Marks -> Выбираем правило для download трафика, которое добавляли в IP->Firewall->Mangle

  • Queue Type -> выбираем тип очереди для download трафика

  • Priority – 8

Все, жмем ОК, правило добавлено. Теперь по аналогии делаем еще одно правило для upload трафика. Вот как выглядит у меня:

На этом, собственно, все. Теперь у Вас все должно работать.

Поделиться в социальных сетях:

MTCTCE — обучение и сертификация MikroTik

Длительность
3 дня

Уровень подготовки
Engineer (расширенный тренинг 2-го уровня)

Для кого предназначен тренинг
Сетевые и системные администраторы и инженеры

Цель
Получение углубленных знаний о возможностях MikroTik RouterOS в области управления трафиком и QoS

Ближайшие тренинги

MTCTCE

Тренинг MTCTCE посвящен подробному разбору схемы движения пакетов внутри RouterOS (Traffic Flow Diagram), потому что это является ключом к пониманию того, как работает firewall, QoS, Policy Based Routing, NAT и многое другое. А простые лабораторные работы помогают закрепить материал на практике.

В данном курсе вы подробно узнаете, по каким цепочкам движется пакет внутри MikroTik, как и в каком месте Traffic Flow Diagram на это движение можно повлиять в своих целях: например, отмаркировать его с помощью routing mark для принятия решения о маршрутизации пакета через другой интерфейс роутера (Policy Routing) или выделить особый тип трафика и отмаркировать его packet mark для дальнейшего участия в приоритезации одного типа трафика над другим. Разбираются все таблицы (Filter, Mangle, NAT) и цепочки (input, output, forward, prerouting, postrouting), все действия (actions), которые можно делать с пакетами, совпавшими с условиями правила.

Вторая часть тренинга посвящена реализации Quality of Service (QoS) в MikroTik RouterOS. Вы научитесь управлять полосой пропускания, ограничивать один тип трафика и давать приоритет другому. Познакомитесь с простыми очередями (Simple Queue) и деревом очередей (Queue Tree), узнаете разницу и способы их применения на практике. Также вы узнаете про типы очередей (PCQ, RED, FIFO, SFQ) и особенности их использования.

Третья часть тренинга посвящена углубленному анализу работы DHCP-сервера, клиента и релэя, различным полезным опциям DHCP, а также работе MikroTik в качестве DNS сервера. Также вы познакомитесь с реализацией WebProxy и научитесь гибко ограничивать доступ пользователей в Интернет.

Курс заканчивается сертификационным экзаменом, после успешной сдачи которого вы получите международный сертификат MTCTCE, а также, независимо от результатов сдачи экзамена, лицензию RouterOS L4 в подарок!

Программа Тренинга

  • Packet Flow Diagram (routing, bridging, NAT)
  • Tables and chains: input, output, forward
  • Firewall rules and actions
  • HTB: simple queue and queue tree
  • DNS cache and static entries
  • DHCP-server, relay, client. DHCP options, IP-pool
  • WebProxy: access lists, regular expressions

MTCTCE Outline (программа MTCTCE)

Ближайшие тренинги MTCTCE

Если вашего города нет в списке, напишите нам и мы сможем договориться о его проведении.

Другие тренинги MikroTik

blog — Mikrotik. Решение мелких проблем

Нравятся мне железки сабжевой конторы! Ну прям песня! Одно НО. Приходится иногда долго рыскать по форумам в поисках идей из серии «Все вроде правильно, но как-то не так. Что делать?». Попробую покидать сюда инфу о мелких проблемках и способах решения.

Итак

1. Интернет подключен, но тормозит.

Есть у меня провайдер в одном филиале, который предоставляет интернет по IPoE (тупо IP-адреса вбиваем и все!). Ну казалось бы, чего тут париться? Но оказалось, что у пользователей хоть интернет и работает но на некоторые страницы (особенно где много картинок) они зайти не могут. Да и фотки не всегда отображаются. Вобщем решение простое: изменить максимальный размер сегмента. Т.е. идем в IP—>Firewall—>Mangle и создаем правила:

1. Chain: Forward, Protocol: (6)TCP, In-Interface:»ethernet1 (туда провод от провайдера приходит)», Action:Change MSS, New-MSS: ставим меньше чем MTU на 40. Т.е. если у Вас MTU 1492, то New-MSS будет 1452..

2. Тоже самое, но интерфейс выбираем уже не в In-Interface, а в Out-Interface

Все!

2. Все тот-же удаленный офис, все тот-же IPoE. Проблема в том, что либо у меня работает интернет в офисе либо работают внутрисетевые ресурсы. А надо, чтобы все и сразу!

В предыдущих постах я писал о настройке маршрутов когда у меня и интернет предоставлялся по PPPoE и VPN работал через PPtP. Тут же есть небольшое отличие. Все настройки маршрутов остаются прежними, меняются только правила NAT. Итак идем в IP—>Firewall—NAT и создаем 2 правила

1. Chain: srcnat, dst-address: !192.168.0.0/24 (НЕ сеть головного офиса), Action: Masquerade

Т.е. все, что отправляется из филиала НЕ в головной офис — маскарадить

2. Chain: srcnat, dst-address: 192.168.0.0/24 (сеть головного офиса), Out-Interface: pptp-out1, Action: Accept

Т.е. все, что отправляется из филиала В головной офис — разрешить передавать через pptp-out1 (наш VPN).

3.Натыкаюсь иногда на вопросы в форумах типа «Поставил WEB-Proxy» и все тормозит.

Была такая проблемка. Решилось все просто: отключил кэширование на прокси. Как выяснилось, памяти и так не много, процессор и так не самый быстрый, поэтому когда народ начинает активно серфить, появляются проблемы…

Mangle — RouterOS — Документация MikroTik

Свойство Описание
действие ( имя действия ; по умолчанию: принять ) Действие, которое нужно предпринять, если пакет соответствует правилу:

  • accept — принять пакет. Пакет не передается следующему правилу межсетевого экрана.
  • add-dst-to-address-list — добавить адрес назначения в список адресов, заданный параметром address-list параметр
  • add-src-to-address-list — добавить исходный адрес в список адресов, указанный в списке адресов параметр
  • change-dscp — изменить значение поля точки кода дифференцированных услуг (DSCP), заданное параметром new-dscp
  • change-mss — изменить значение поля максимального размера сегмента пакета на значение, указанное параметром new-mss
  • change-ttl — изменить значение поля Time to Live пакета на значение, указанное параметром new-ttl
  • clear-df — очистить флаг «Не фрагментировать»
  • fasttrack-connection — показывает счетчики fasttrack, полезно для статистика
  • jump — перейти к пользовательской цепочке, заданной значением jump-target parameter
  • log — добавить в системный журнал сообщение, содержащее следующие данные: in-interface, out-interface, src-mac , протокол, src-ip: port-> dst-ip: порт и длина пакета.После того, как пакет сопоставлен, он передается следующему правилу в списке, аналогично passthrough
  • mark-connection — поместите отметку, указанную параметром new-connection-mark, на все соединение, которое соответствует правилу
  • mark -packet — поставить отметку, указанную параметром new-packet-mark, на пакете, который соответствует правилу
  • mark-routing — поставить отметку, указанную параметром new-routing-mark, на пакете. Этот вид меток используется только для целей маршрутизации политики.
  • passthrough — если пакет соответствует правилу, увеличьте счетчик и перейдите к следующему правилу (полезно для статистики).
  • return — передать управление обратно в цепочку, откуда произошел переход
  • route — принудительно отправляет пакеты на определенный IP-адрес шлюза, игнорируя обычное решение о маршрутизации (только для цепочки предварительной маршрутизации).
  • set-priority — устанавливает приоритет, указанный новым. Параметр приоритета для пакетов, отправляемых по каналу, способному передавать приоритет (VLAN или беспроводной интерфейс с поддержкой WMM). Подробнее>
  • sniff-pc — отправить пакет на удаленный сервер RouterOS CALEA.
  • sniff-tzsp — отправить пакет в удаленную систему, совместимую с TZSP (например, Wireshark).Установить удаленную цель с параметрами sniff-target и sniff-target-port (Wireshark рекомендует порт 37008)
  • strip-ipv4-options — удалить поля параметров IPv4 из заголовка IP, действие фактически не удаляет параметры IPv4, а скорее заменяет все октеты опций на NOP, дальнейшее сопоставление с ipv4-options = any по-прежнему будет соответствовать пакету.
список адресов ( строка ; по умолчанию:) Имя используемого списка адресов.Применимо, если действие add-dst-to-address-list или add-src-to-address-list
тайм-аут списка адресов ( нединамический | нестатический | время ; По умолчанию: не-динамический ) Интервал времени, по истечении которого адрес будет удален из списка адресов, заданного параметром список адресов . Используется вместе с add-dst-to-address-list или add-src-to-address-list Действия

  • Значение нединамического ( 00:00:00 ) оставит адрес в список адресов до перезагрузки
  • Значение нестатического оставит адрес в списке адресов навсегда и будет включено в экспорт / резервное копирование конфигурации
цепочка ( имя ; По умолчанию:) Указывает в какую цепочку будет добавлено правило.Если входные данные не соответствуют имени уже определенной цепочки, будет создана новая цепочка.
комментарий ( строка ; по умолчанию:) Описательный комментарий для правила.
байтов соединения ( целочисленное ; по умолчанию:) Сопоставляет пакеты только в том случае, если заданное количество байтов было передано через конкретное соединение. 0 — означает бесконечность, например байта соединения = 2000000-0 означает, что правило соответствует, если через соответствующее соединение было передано более 2 МБ (загрузка и загрузка)
ограничение числа подключений (целое число , netmask ; По умолчанию:) Сопоставляет соединения для каждого адреса или адресного блока после достижения заданного значения
метка соединения ( no-mark | string ; по умолчанию:) Сопоставляет пакеты, отмеченные с помощью средства mangle с особым знаком подключения.Если установлен no-mark , правило будет соответствовать любому немаркированному соединению.
connection-nat-state ( srcnat | dstnat ; по умолчанию:) Может сопоставлять подключения, которые являются srcnatted, dstnatted или и тем, и другим. Обратите внимание, что connection-state = related connections connection-nat-state определяется направлением первого пакета. и если для отслеживания соединения необходимо использовать dst-nat для доставки этого соединения на те же хосты, что и основное соединение, оно будет в connection-nat-state = dstnat, даже если правила dst-nat отсутствуют.
скорость соединения ( Целое число 0..4294967295 ; по умолчанию:) Скорость соединения — это средство сопоставления межсетевого экрана, которое позволяет захват трафика на основе текущей скорости соединения.
состояние соединения ( установлено | недействительно | новое | связано ; по умолчанию:) Интерпретирует данные аналитики отслеживания соединения для конкретного пакета:

  • установлено — пакет, который принадлежит существующему соединению
  • недействительный — пакет, который не имеет определенного состояния при отслеживании соединения (обычно — пакеты с серьезным нарушением порядка, пакеты с неправильным порядковым номером / номером подтверждения или в случае чрезмерного использования ресурса на маршрутизаторе), по этой причине, недопустимый пакет не будет участвовать в NAT (как это делают только пакеты connection-state = new) и по-прежнему будет содержать исходный IP-адрес источника при маршрутизации.Мы настоятельно рекомендуем отбросить все пакеты с состоянием соединения = недопустимые пакеты в цепях пересылки и ввода брандмауэра
  • новый — пакет начал новое соединение или иным образом связан с соединением, которое не встречало пакетов в обоих направлениях
  • связанный — пакет это связано, но не с частями существующего соединения, такими как ошибки ICMP или пакет, который начинает соединение для передачи данных FTP
  • без отслеживания — пакет, который был настроен для обхода отслеживания соединения в таблицах RAW межсетевого экрана.
тип соединения ( ftp | h423 | irc | pptp | quake3 | sip | tftp ; по умолчанию:) Сопоставляет пакеты от связанных соединений на основе информации от их помощников по отслеживанию соединений. Соответствующий помощник по подключению должен быть включен в: / ip firewall service-port
content ( строка ; по умолчанию:) Сопоставлять пакеты, содержащие указанный текст
dscp (целое число : 0 .0,63 ; По умолчанию:) Соответствует полю IP-заголовка DSCP
dst-address ( IP / маска сети | Диапазон IP-адресов ; По умолчанию:) Соответствует пакетам, в которых пункт назначения совпадает с указанным IP или попадает в указанный IP-адрес. диапазон
dst-address-list ( name ; по умолчанию:) Сопоставляет адрес назначения пакета с определенным пользователем списком адресов
dst-address-type ( unicast | local | broadcast | multicast ; По умолчанию:) Соответствует типу адреса назначения:

  • unicast — IP-адрес, используемый для передачи точка-точка
  • local — если dst-адрес назначен одному из интерфейсов маршрутизатора
  • broadcast — пакет отправлено на все устройства в подсети
  • multicast — пакет пересылается определенной группе устройств
dst-limit ( целое [/ время], в тегер, dst-адрес | dst-порт | src-адрес [/ time] ; По умолчанию:) Сопоставляет пакеты до тех пор, пока не будет превышен заданный предел PPS.В отличие от сопоставителя пределов, каждый IP-адрес назначения / порт назначения имеет собственное ограничение. Параметры записываются в следующем формате: count [/ time], burst, mode [/ expire] .

  • count — максимальная средняя скорость пакетов, измеренная в пакетах за время интервал
  • время — указывает временной интервал, в котором измеряется скорость передачи пакетов (необязательно)
  • burst — количество пакетов, которые не являются с учетом скорости передачи пакетов
  • mode — классификатор для ограничения скорости пакетов
  • expire — указывает интервал, по истечении которого записанный IP-адрес / порт будет удален (необязательно)
dst-port ( целое [-целое]: 0.65535 ; По умолчанию:) Список номеров портов назначения или диапазонов номеров портов
фрагмент ( да | нет ; по умолчанию:) Соответствует фрагментированным пакетам. Первый (начальный) фрагмент не в счет. Если включено отслеживание соединений, фрагментов не будет, так как система автоматически собирает каждый пакет
точка доступа ( auth | from-client | http | local-dst | to-client ; по умолчанию:) Сопоставляет пакеты полученные от клиентов HotSpot против различных совпадений HotSpot.

  • auth — соответствует аутентифицированным клиентским пакетам HotSpot
  • from-client — сопоставляет пакеты, приходящие от клиента HotSpot
  • http — соответствует HTTP-запросам, отправленным на сервер HotSpot
  • local-dst — сопоставляет пакеты, предназначенные для HotSpot server
  • to-client — сопоставляет пакеты, отправляемые клиенту HotSpot
icmp-options ( integer: integer ; по умолчанию:) Соответствует полям ICMP «тип: код»
in-bridge-port (имя , ; по умолчанию:) Фактический интерфейс: пакет вошел в маршрутизатор, если входящий интерфейс является мостом
in-interface ( имя ; по умолчанию:) Интерфейс, пакет поступил в маршрутизатор
ingress-priority (целое число : 0.0,63 ; По умолчанию:) Соответствует входящему приоритету пакета. Приоритет может быть получен из бита VLAN, WMM или MPLS EXP. Подробнее >>
ipsec-policy ( in | out, ipsec | none ; по умолчанию:) Соответствует политике, используемой IpSec. Значение записывается в следующем формате: направление , , политика , . Направление используется для выбора соответствия политике, используемой для декапсуляции, или политике, которая будет использоваться для инкапсуляции.

  • in — действителен в цепочках PREROUTING, INPUT и FORWARD
  • out — действителен в цепочках POSTROUTING, OUTPUT и FORWARD
  • ipsec — соответствует, если пакет подлежит обработке IpSec;
  • нет — соответствует пакету, который не подлежит обработке IpSec (например, транспортный пакет IpSec).

Например, если маршрутизатор получает пакет Gre, инкапсулированный в IPsec, то правило ipsec-policy = in, ipsec будет соответствовать пакету Gre, но правило ipsec-policy = in, none не будет соответствовать пакету ESP.

ipv4-options ( любой | свободная маршрутизация-источник | no-record-route | no-router-alert | no-source-routing | no-timestamp | none | record-route | router- alert | strict-source-routing | timestamp ; по умолчанию:) Соответствует параметрам заголовка IPv4.

  • любой — сопоставить пакет хотя бы с одной из опций ipv4
  • свободно-исходная маршрутизация — сопоставить пакеты с опцией свободной маршрутизации от источника. Эта опция используется для маршрутизации интернет-дейтаграммы на основе информации, предоставленной источником.
  • no-record-route — сопоставление пакетов без опции маршрута записи.Эта опция используется для маршрутизации интернет-дейтаграммы на основе информации, предоставленной источником
  • no-router-alert — сопоставление пакетов без маршрутизатора alter option
  • no-source-routing — сопоставление пакетов без опции маршрутизации от источника
  • no- timestamp — сопоставить пакеты без опции временной метки
  • record-route — сопоставить пакеты с опцией записи маршрута
  • router-alert — сопоставить пакеты с опцией router alter
  • strict-source-routing — сопоставить пакеты с опцией строгой маршрутизации от источника
  • timestamp — сопоставить пакеты с меткой времени
jump-target ( name ; по умолчанию:) Имя целевой цепочки для перехода.Применимо, только если действие = переход
протокол уровня7 (имя ; по умолчанию:) Имя фильтра уровня 7, определенное в меню протокола уровня 7.
limit ( integer, time, integer ; по умолчанию:) Сопоставляет пакеты до тех пор, пока не будет превышен заданный предел PPS. Параметры записываются в следующем формате: count [/ time], burst .

  • count — максимальная средняя скорость пакетов, измеренная в пакетах за время интервал
  • время — указывает временной интервал, в котором измеряется скорость передачи пакетов (необязательно, будет использоваться 1 с, если не указано)
  • пакет — количество пакетов, которые не учитываются по скорости передачи пакетов
префикс журнала ( строка ; по умолчанию:) Добавляет указанный текст в начало каждого сообщения журнала.Применимо, если действие = log
отметка нового соединения ( строка ; по умолчанию:) Устанавливает новое значение отметки соединения
new-dscp (целое число : 0. .63 ; По умолчанию:) Устанавливает новое значение DSCP для пакета
new-mss ( целое число ; По умолчанию:)

Устанавливает новый MSS для пакета.

 Функция Clampt-to-pmtu устанавливает бит (DF) в заголовке IP для динамического обнаружения PMTU пути.Хост отправляет все дейтаграммы по этому пути с установленным битом DF, пока не получит ICMP
Сообщения о недоступности пункта назначения с кодом, означающим «необходима фрагментация и установлен DF». После получения такого сообщения хост-источник уменьшает предполагаемое значение PMTU для пути. 
new-packet-mark ( string ; по умолчанию:) Устанавливает новое значение метки пакета
new-priority ( integer | from-dscp | from-dscp- high-3-bit | from-ingress ; По умолчанию:) Устанавливает новый приоритет для пакета.Это может быть приоритет VLAN, WMM, DSCP или MPLS EXP. Подробнее >>. Это свойство также можно использовать для установки внутреннего приоритета.
новая метка маршрутизации ( строка ; по умолчанию:) Устанавливает новое значение метки маршрутизации
new-ttl (декремент | инкремент | набор: целое число ; по умолчанию: )
nth (целое число , целое число ; по умолчанию:) Соответствует каждому n-му пакету: nth = 2,1 Правило будет соответствовать каждому первому пакету из 2, следовательно, 50% всех трафик, соответствующий правилу
out-bridge-port ( name ; по умолчанию:) Фактический интерфейс пакет покидает маршрутизатор, если исходящий интерфейс является мостом
out -interface (; По умолчанию:) Интерфейс, пакет покидает маршрутизатор
packet-mark ( no-mark | string ; Default 🙂 маркировка пакета.Если установлен no-mark , правило будет соответствовать любому немаркированному пакету
размер пакета ( integer [-integer]: 0..65535 ; по умолчанию:) Соответствует пакетам указанного размера или диапазон размеров в байтах
passthrough ( yes | no ; по умолчанию: yes ) следует ли разрешить пакету проходить дальше (например, сквозная передача действий) в брандмауэр или нет (свойство действительно только для некоторых действий )
для каждого соединения-классификатора ( ValuesToHash: знаменатель / остаток ; по умолчанию:) Сопоставление PCC позволяет разделить трафик на равные потоки с возможностью сохранять пакеты с определенным набором параметров в одном конкретном поток
порт (целое число [-integer]: 0.65535 ; По умолчанию:) Соответствует, если какой-либо порт (исходный или целевой) соответствует указанному списку портов или диапазонам портов. Применимо, только если протокол TCP или UDP
протокол (имя или идентификатор протокола ; по умолчанию: tcp ) Соответствует конкретному IP-протоколу, указанному именем или номером протокола
psd ( целое число, время, целое число, целое число ; по умолчанию:) Пытается обнаружить сканирование TCP и UDP.Параметры имеют следующий формат: WeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight

  • WeightThreshold — общий вес последних пакетов TCP / UDP с разными портами назначения, приходящих с одного и того же хоста, который будет обрабатываться как последовательность сканирования портов
  • DelayThreshold — задержка для пакетов с разными портами назначения, приходящих с одного и того же хоста, которая должна рассматриваться как возможная подпоследовательность сканирования порта
  • LowPortWeight — вес пакетов с привилегированным (<1024) портом назначения
  • HighPortWeight — вес пакета с непривилегированным портом назначения
случайный (целое число : 1.0,99 ; По умолчанию:) Выбирает пакеты случайным образом с заданной вероятностью.
метка маршрутизации ( строка ; по умолчанию:) Сопоставляет пакеты, помеченные функцией mangle, с определенной меткой маршрутизации
приоритет (целое число : 0..63 ; по умолчанию:) Соответствует приоритету пакета после установки нового приоритета. Приоритет может быть получен из VLAN, WMM, DSCP, MPLS EXP бит или из внутреннего приоритета, который был установлен с помощью действия set-priority
src-address ( IP / Netmask, IP range ; Default 🙂 Соответствует пакетам, в которых источник совпадает с указанным IP или попадает в указанный диапазон IP.
src-address-list ( name ; по умолчанию:) Сопоставляет исходный адрес пакета с пользовательским списком адресов
src-address-type ( unicast | local | broadcast | multicast ; По умолчанию:)

Соответствует типу адреса источника:

  • unicast — IP-адрес, используемый для передачи точка-точка
  • local — если адрес назначен одному из интерфейсов маршрутизатора
  • broadcast — пакет отправлено на все устройства в подсети
  • multicast — пакет пересылается определенной группе устройств
src-port ( integer [-integer]: 0.65535 ; По умолчанию:) Список исходных портов и диапазоны исходных портов. Применимо, только если протоколом является TCP или UDP.
src-mac-address ( MAC-адрес ; по умолчанию:) Соответствует исходному MAC-адресу пакета
tcp-flags ( ack | cwr | ece | fin | psh | rst | syn | urg ; По умолчанию:) Соответствует указанным TCP-флагам

  • ack — подтверждение данных
  • cwr — окно перегрузки уменьшено
  • ece — флаг ECN-echo (явное уведомление о перегрузке)
  • fin — закрыть соединение
  • psh — функция push
  • rst — сбросить соединение
  • syn — новое соединение
  • urg — срочные данные
tcp-mss ( integer [-integer]: 0.65535 ; По умолчанию:) Соответствует значению TCP MSS IP-пакета
время ( время-время, сб | пт | чт | вт | пн | вс ; по умолчанию:) Разрешает создание фильтр на основе времени и даты прибытия пакетов или, для локально сгенерированных пакетов, времени и даты отправления
tls-host ( строка ; по умолчанию:) Разрешает сопоставление трафика на основе имени хоста TLS. Принимает синтаксис GLOB для сопоставления с подстановочными знаками.Обратите внимание, что средство сопоставления не сможет сопоставить имя хоста, если кадр подтверждения TLS фрагментирован на несколько сегментов (пакетов) TCP.
ttl ( равно | больше-чем | меньше-чем | не равно: целое число (0..255) ; по умолчанию:) Соответствует значению TTL пакетов.

Маркировка межсетевого экрана — RouterOS — Документация MikroTik

Этот раздел состоит из примеров настройки с методами балансировки нагрузки на основе брандмауэра.

Отработка отказа с маркировкой брандмауэра

Этот пример демонстрирует, как настроить отказоустойчивость с изменением правил межсетевого экрана, фильтрами и NAT.

Подробный обзор раздела

IP-адрес

В этом примере наш провайдер назначил два восходящих канала, один из которых подключен к ether1 , а другой — к ether2 . В нашей локальной сети две подсети 192.168.1.0/24 и 192.168.2.0/24

 / IP-адрес
добавить адрес = 10.1.101.18 / 30 interface = ether1
добавить адрес = 10.1.200.18 / 30 интерфейс = ether2
добавить адрес = 192.168.1.1 / 24 interface = ether3
добавить адрес = 192.168.2.1 / 24 interface = ether4 
Правила Mangle, NAT и Filter

Соединения, проходящие через интерфейс ether1, помечены как «первый» , а пакеты, проходящие через ether2, помечены как «other» :

 / ip firewall mangle
add action = mark-connection chain = forward connection-mark = no-mark new-connection-mark = first out-interface = сквозная передача ether1 = да
add action = mark-connection chain = forward connection-mark = no-mark new-connection-mark = other out-interface = ether2 passthrough = да 

Вместо маскарада мы будем использовать src-nat для наших локальных сетей, потому что мы не хотим очищать соединения, что является одной из основных функций маскировки при сбое основного канала.Мы ограничим их правилами брандмауэра (далее в этом примере):

 / IP брандмауэр нат
добавить действие = src-nat chain = srcnat out-interface = ether1 to-address = 10.1.101.18
добавить действие = src-nat chain = srcnat out-interface = ether2 to-address = 10.1.200.18 

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

 / ip фильтр межсетевого экрана
добавить действие = отклонить цепочку = пересылать метку подключения = другой исходящий интерфейс = ether1 отклонить-с = icmp-network-unreachable
добавить действие = отклонить цепочку = пересылать метку соединения = первый выход-интерфейс = ether2 отклонить-с = icmp-network-unreachable 
Маршруты

Мы добавим два маршрута по умолчанию.С помощью параметра distance мы устанавливаем предпочтение маршрута:

 / ip route add gateway = 10.1.101.17 distance = 1 check-gateway = ping
/ ip route добавить шлюз = 10.1.200.17 расстояние = 2 

Балансировка нагрузки для нескольких ссылок одной подсети

В этом примере показано, как настроить балансировку нагрузки, если поставщик предоставляет IP-адреса из одной подсети для всех ссылок.

Подробный обзор раздела

IP-адрес

В этом примере наш провайдер назначил два восходящих канала, один из которых подключен к ether1 , а другой — к ether2 .Обе ссылки имеют IP-адреса из одной подсети. В нашей локальной сети две подсети 192.168.1.0/24 и 192.168.2.0/2:

 / IP-адрес
добавить адрес = 10.1.101.18 / 24 interface = ether1
добавить адрес = 10.1.200.10 / 24 interface = ether2
добавить адрес = 192.168.1.1 / 24 interface = ether3
добавить адрес = 192.168.2.1 / 24 interface = ether4 

После настройки IP-адреса подключенный маршрут будет установлен как маршрут ECMP:

 [admin @ MikroTik]> / ip route print detail
 0 dst-адрес АЦП = 10.1.101.0 / 24 pref-src = 10.1.101.18 шлюз = ether1, ether2
        gateway-status = ether1 достижим, ether2 достижимое расстояние = 0 scope = 10 
Mangle и NAT

В нашем примере используется очень простая маршрутизация политик. Начнем с добавления таблиц маршрутизации для каждой метки:

 / таблица маршрутизации
добавить fib name = first
добавить fib name = other 

Клиенты из подсети 192.168.1.0/24 помечены для использования «первой» таблицы маршрутизации и 192.168.2.0/24 для использования «другой» подсети :

 / ip firewall mangle
add action = mark-routing chain = prerouting src-address = 192.168.1.0 / 24 новая-метка-маршрутизация = первая
add action = mark-routing chain = prerouting src-address = 192.168.2.0 / 24 new-routing-mark = other 

И замаскируем нашу локальную сеть:

 / IP брандмауэр нат
добавить действие = маскарадная цепочка = srcnat out-interface = ether1
добавить действие = маскарадная цепочка = srcnat out-interface = ether2 

То же самое может быть достигнуто путем настройки правил маршрутизации вместо mangle.

Маршруты

Мы добавляем два шлюза, один для разрешения в «первой» таблице маршрутизации , а другой — в «другая» таблица маршрутизации :

 / ip маршрут
добавить шлюз = 10.1.101.1@main routing-table = первый
добавить gateway=10.1.101.1@main routing-table = other 

Балансировка нагрузки с классификатором подключений

PCC matcher позволит вам разделить трафик на равные потоки с возможностью хранить пакеты с определенным набором параметров в одном конкретном потоке (вы можете указать этот набор параметров из src-address, src -port, dst-address, dst-port и т. д.)

Подробный обзор раздела

IP-адрес

Маршрутизатор имеет два восходящих интерфейса ether1 и ether2 с адресами 10.111.0.2 / 24 и 10.112.0.2/24. Интерфейс ether3 имеет IP-адрес 192.168.1.1/24.

 / IP-адрес
добавить адрес = 192.168.1.1 / 24 сеть = 192.168.0.0 широковещательная передача = 192.168.0.255 интерфейс = ether3
добавить адрес = 10.111.0.2 / 30 сеть = 10.111.0.0 широковещательная передача = 10.111.0.255 интерфейс = ether1
добавить адрес = 10.112.0.2 / 30 сеть = 10.112.0.0 широковещательная передача = 10.112.0.255 интерфейс = ether2 
Mangle

С политикой маршрутизации можно принудительно направить весь трафик на конкретный шлюз, даже если трафик направлен на хост (кроме шлюза) из подключенных сетей.Таким образом, будет создана петля маршрутизации, и связь с этими хостами будет невозможна. Чтобы избежать этой ситуации, нам нужно разрешить использование таблицы маршрутизации по умолчанию для трафика в подключенные сети:

 / ip firewall mangle
добавить цепочку = предварительная маршрутизация dst-address = 10.111.0.0 / 30 действие = принять in-interface = ether3
add chain = prerouting dst-address = 10.112.0.0 / 30 action = accept in-interface = ether3 

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

 / ip firewall mangle
add chain = prerouting in-interface = ether1 connection-mark = no-mark action = mark-connection new-connection-mark = ISP1_conn.
добавить цепочку = предварительная маршрутизация в интерфейсе = метка подключения ether2 = no-mark action = метка-соединение, новая-метка-подключения = ISP2_conn 

Перед настройкой mark-routing мы должны создать таблицу маршрутизации для каждого из них:

 / маршрутизация / таблица
добавить fib name = to_ISP1
добавить fib name = to_ISP2 

Действие mark-routing может использоваться только в выходных данных цепочки и предварительной маршрутизации , но предварительная маршрутизация цепочки переключения захватывает весь трафик, который идет к самому маршрутизатору.Чтобы избежать этого, мы будем использовать dst-address-type =! Local . А с помощью нового PCC мы разделим трафик на две группы по адресам источника и назначения:

 / ip firewall mangle
add chain = prerouting in-interface = ether3 connection-mark = no-mark dst-address-type =! local per-connection-classifier = both-addresses: 2/0 action = mark-connection новое-соединение-mark = ISP1_conn
add chain = prerouting in-interface = ether3 connection-mark = no-mark dst-address-type =! local per-connection-classifier = оба-адреса: 2/1 action = mark-connection new-connection-mark = ISP2_conn 

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

 / ip firewall mangle
add chain = prerouting connection-mark = ISP1_conn in-interface = ether3 action = mark-routing new-routing-mark = to_ISP1
add chain = prerouting connection-mark = ISP2_conn in-interface = ether3 action = mark-routing new-routing-mark = to_ISP2
добавить цепочку = выходное соединение-mark = ISP1_conn action = mark-routing new-routing-mark = to_ISP1
добавить цепочку = выходное соединение-mark = ISP2_conn action = mark-routing new-routing-mark = to_ISP2 
Маршруты

Создайте маршрут для каждой метки маршрута

 / ip маршрут
добавить шлюз = 10.111.0.1@main routing-table = to_ISP1 check-gateway = ping
добавить gateway=10.112.0.1@main routing-table = to_ISP2 check-gateway = ping 
NAT

Поскольку решение о маршрутизации уже принято, нам просто нужны правила, которые исправят src-адреса для всех исходящих пакетов. Если этот пакет уйдет через wlan1, он будет преобразован в 10.112.0.2, если через wlan2, то в 10.111.0.2:

 / IP брандмауэр нат
добавить цепочку = srcnat out-interface = ether1 action = masquerade
добавить цепочку = srcnat out-interface = ether2 action = masquerade 

В настоящее время используются правила Mangle для настройки DUAL WAN.Теперь я хочу добавить немного QOS. Можно ли интегрировать QOS Mangle, не нарушая двойных WAN? : mikrotik

Мои текущие правила Dual WAN Mangle — это первый список. Последние 6 месяцев они работали безупречно.

Теперь я хотел бы добавить несколько дополнительных исправлений для QOS. Могут ли они (2-й список) взаимодействовать с упомянутой выше двойной глобальной сетью, изменяя маркировку пакетов?

Имеет ли значение порядок правил? Должен ли QOS быть до или после двойного WAN?

  / IP firewall mangle
            add action = accept chain = prerouting comment = ATT-ISP1 dst-address = x.x.x.x / 29 список-интерфейсов = \
                LAN-att
            add action = mark-connection chain = prerouting connection-mark = no-mark dst-address-type = "" \
                in-interface = eth2-AT & T new-connection-mark = ISP1-conn passthrough = да
            add action = mark-connection chain = prerouting comment = "DSCP-Force-WISP-to-ATT 042620" \
                состояние-соединения = новое отключено = да dscp = 46 dst-address-type =! локальный журнал = да префикс журнала = \
                "/ mangle / - обход Cox в ATT с помощью DSCP" new-connection-mark = ISP1-conn passthrough = no
            add action = mark-connection chain = prerouting comment = Force-WISP-IP-to-ATT connection-state = new \
                dst-address-type =! local log = yes log-prefix = "/ mangle / - обойти Cox в ATT" new-connection-mark = \
                ISP1-conn passthrough = no src-address-list = Force-WISP-out-ATT
            add action = mark-connection chain = prerouting connection-mark = no-mark dst-address-list =! RFC1918 \
                dst-address-type =! local in-interface-list = LAN-att new-connection-mark = ISP1-conn passthrough = да
            add action = mark-routing chain = prerouting connection-mark = ISP1-conn in-interface-list = LAN-att \
                new-routing-mark = to-ISP1 passthrough = да
            add action = mark-routing chain = output connection-mark = ISP1-conn dst-address-type = "" new-routing-mark = \
                to-ISP1 passthrough = да
            add action = accept chain = prerouting comment = Cox-ISP2 dst-address = y.y.y.y / 27 список-интерфейсов = \
                LAN-cox
            add action = mark-connection chain = prerouting connection-mark = no-mark dst-address-type = "" \
                in-interface = eth3-cox new-connection-mark = ISP2-conn passthrough = да
            add action = mark-connection chain = prerouting connection-mark = no-mark dst-address-list =! RFC1918 \
                dst-address-type =! local in-interface-list = LAN-cox новое-соединение-mark = ISP2-conn passthrough = да
            add action = mark-routing chain = prerouting connection-mark = ISP2-conn in-interface-list = LAN-cox \
  

Теперь я хотел бы добавить несколько дополнительных настроек для QOS.Могут ли они ниже взаимодействовать с упомянутой выше двойной глобальной сетью, изменяя маркировку пакетов?

  / IP firewall mangle
        add action = mark-connection chain = комментарий перед маршрутизацией = VOIP отключен = да dscp = 46 new-connection-mark = \
            Сквозная передача VOIP = да
        add action = mark-connection chain = предварительная маршрутизация отключена = да dscp = 26 new-connection-mark = VOIP \
            сквозной = да
        add action = mark-packet chain = prerouting connection-mark = VOIP disabled = yes new-packet-mark = VOIP \
            passthrough = нет
        add action = mark-connection chain = prerouting comment = DNS-соединение-состояние = новое отключено = да \
            new-connection-mark = сквозной DNS = да порт = 53 протокол = udp
        add action = mark-packet chain = prerouting connection-mark = DNS disabled = yes new-packet-mark = DNS \
            passthrough = нет
        add action = mark-connection chain = postrouting connection-state = new disabled = yes new-connection-m
            Прохождение DNS = да порт = 53 протокол = udp
        add action = mark-packet chain = postrouting connection-mark = DNS disabled = yes new-packet-mark = DNS \
            passthrough = нет
        add action = mark-connection chain = prerouting comment = QUIC-state-state = new disabled = yes \
            new-connection-mark = QUIC passthrough = да порт = 80,443 протокол = UDP
        add action = mark-packet chain = prerouting connection-mark = QUIC disabled = yes new-packet-mark = QUIC
            passthrough = нет
        add action = mark-connection chain = prerouting comment = ICMP-соединение-состояние = новое отключено = да \
            new-connection-mark = сквозная передача ICMP = да протокол = icmp
        add action = mark-packet chain = prerouting connection-mark = ICMP disabled = yes new-packet-mark = ICMP
            passthrough = нет
        add action = mark-connection chain = postrouting connection-state = new disabled = yes new-connection-m
            Транзитная передача ICMP = да протокол = icmp
        add action = mark-packet chain = postrouting connection-mark = ICMP disabled = yes new-packet-mark = ICMP
            passthrough = нет
        add action = mark-packet chain = postrouting comment = ACK disabled = yes new-packet-mark = ACK packet-si
            0-123 транзитная передача = нет протокола = tcp tcp-flags = ack
        add action = mark-packet chain = prerouting disabled = yes new-packet-mark = ACK packet-size = 0-123 \
            passthrough = нет протокола = tcp tcp-flags = ack
  

MikroTik: Управление скоростью — База знаний сонара

Время чтения: 6 минут

Предварительные требования

Прежде чем вы сможете использовать сонар для управления скоростью в MikroTik, вам необходимо создать списки адресов и добавить MikroTik в качестве встроенного устройство в сонаре.Как только оба этих предварительных условия будут выполнены, выполните следующие действия, чтобы начать управление скоростью на основе услуг, назначенных в Sonar. Для целей этого руководства мы собираемся установить правила для услуги передачи данных «Silver», которая предусматривает загрузку 10 Мбит / с и загрузку 2 Мбит / с.

Если вы хотите посмотреть видео о передовых методах создания ваших собственных очередей Mangle и обработки списков адресов, просмотрите следующее видео: Эффективные правила формирования MikroTik

Создание меток подключения

Для каждого списка адресов в Sonar, который мы будем как и для управления скоростью, нам нужно будет создать метку подключения для загрузки, а также метку для загрузки.Это означает, например, что если у нас есть пять списков адресов, скорость которых мы хотели бы контролировать, должно быть 10 меток подключения. В приведенных ниже примерах мы построим обе метки подключения для «Серебряного» списка адресов.

  1. Winbox в MikroTik, в котором вы хотите установить правила, и перейдите в IP> Firewall> Mangle, затем нажмите синюю кнопку «+», чтобы создать новое правило mangle.
  1. На вкладке General установите для цепи вперед и Out.Интерфейс к любому интерфейсу, обращенному к клиенту. Если у вас есть несколько физических интерфейсов, которые обращены к пользовательским устройствам, обычной практикой было бы настроить его как мост и использовать мост как выход . Интерфейс .

Если вы используете VLAN для трафика, ориентированного на клиентов, установите Out. Интерфейс ко «всем VLAN».

  1. На вкладке Advanced установите Dst. Список адресов для «Серебра». Этот параметр уже должен быть в раскрывающемся списке для синхронизации вашего встроенного устройства, но имейте в виду, что, если ни один IP-адрес еще не входит в этот список адресов, вам может потребоваться вручную ввести это имя.Просто убедитесь, что оно полностью соответствует имени, которое вы установили в конфигурации списков адресов в Sonar.
  1. На вкладке Action установите действие Action на «пометить соединение». Установите для New Connection Mark значение «Silver_traffic_down». Убедитесь, что установлен флажок Passthrough . Когда это будет завершено, нажмите Применить .
  1. Нажмите синюю кнопку «+», чтобы создать новое правило исключения. На вкладке General установите для цепочки вперед и на этот раз установите In.Интерфейс к любому интерфейсу, обращенному к клиенту.

Если вы используете VLAN для трафика, ориентированного на клиентов, установите In. Интерфейс ко «всем VLAN».

  1. На вкладке Advanced установите Src. Список адресов для «Серебра».
  1. На вкладке Action установите действие Action на «пометить соединение». Установите для New Connection Mark значение «Silver_traffic_up». Убедитесь, что установлен флажок Passthrough .Когда это будет завершено, нажмите Применить .

После того, как вы построили одну пару правил меток подключения, вы можете просто Скопировать каждое правило и изменить Dst. или Src. Список адресов, который вы выбираете, а также имя New Connection Mark для создания дополнительных отметок.

Создание меток пакетов

Подобно меткам подключения, для каждого списка адресов в сонаре, скорость которого мы хотим контролировать, нам нужно будет создать метку пакета для загрузки, а также метку для загрузки.В приведенных ниже примерах мы построим обе метки пакетов для «Серебряного» списка адресов.

  1. Нажмите синюю кнопку «+», чтобы создать новое правило исключения. На вкладке General установите цепочку на пересылку, установите Out. Интерфейс к любому интерфейсу, обращенному к клиенту, и установите для Connection Mark значение «Silver_traffic_down».

Если вы используете VLAN для трафика, ориентированного на клиентов, установите Out. Интерфейс ко «всем VLAN».

  1. На вкладке Action установите действие Action на «пометить пакет».Установите для New Packet Mark значение «Silver_traffic_down». Убедитесь, что установлен флажок Passthrough . Когда это будет завершено, нажмите Применить .
  2. Нажмите синюю кнопку «+», чтобы создать новое правило исключения. На вкладке General установите для цепи перемотку вперед, установите In. Интерфейс к любому интерфейсу, обращенному к клиенту, и установите для Connection Mark значение «Silver_traffic_up».

Если вы используете VLAN для трафика, ориентированного на клиентов, установите Out.Интерфейс ко «всем VLAN».

  1. На вкладке Action установите действие Action на «пометить пакет». Установите для New Packet Mark значение «Silver_traffic_up». Убедитесь, что установлен флажок Passthrough . Когда это будет завершено, нажмите Применить .

После того, как вы создали одну пару правил маркировки пакетов, вы можете просто Скопировать каждое правило и изменить Метку соединения , которую вы выбираете на вкладке Общие , а также имя Новая метка пакета под действием Action для создания новых знаков.

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

Создание PCQ в типах очередей

  1. Перейдите в Очереди> Типы очередей и нажмите синюю кнопку «+».
  2. Задайте для Type Name значение «Silver_download», Kind значение «pcq», скорость до 10M, размер очереди от до 50 и общий размер очереди с до 250000.Вы также можете установить Burst Rate на 20% выше предела Rate (в данном случае 12M) и Burst Time на 00:00:15. Это позволит тестам скорости показывать скорость немного выше полной, но ограничит массовые загрузки фактической скоростью службы. Наконец, установите Classifier на «Dst. Address» и нажмите OK.
  3. Еще раз нажмите синюю кнопку «+». Задайте для Type Name значение «Silver_upload», Kind — pcq, скорость — 2M, размер очереди — 50 и общий размер очереди — 250000.Вы также можете установить Burst Rate на 20% выше, чем предел Rate (2400k в данном случае) и Burst Time на 00:00:15. Это позволит тестам скорости показывать скорость немного выше полной, но ограничит массовые загрузки фактической скоростью службы. Наконец, установите Classifier на «Src. Address» и нажмите OK.

После того, как вы создали одну пару очередей PCQ, вы можете просто Копировать каждую очередь и изменить Имя типа , а также Скорость и Скорость передачи для создания дополнительных очередей.

  1. На вкладке «Дерево очереди» нажмите синюю кнопку «+». На вкладке «Общие» установите для имени «Silver_download» значение «Silver_download». Установите Родительский интерфейс на клиентский интерфейс. Установите метки пакетов на «Silver_traffic_down» и установите для типа очереди значение «Silver_download». Установите Priority на 7, так как это позволит в будущем при необходимости формировать очереди с более низким приоритетом. Нажмите ОК.

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

  1. Еще раз нажмите синюю кнопку «+». На вкладке «Общие» установите для имени «Silver_upload» значение «Silver_upload». Установите для Родителя интерфейс с выходом в Интернет. Установите для меток пакетов значение «Silver_traffic_up» и установите для типа очереди значение «Silver_upload». Снова установите приоритет 7 и нажмите ОК.

После того, как вы создали одну пару очередей, вы можете просто Скопировать каждое правило и изменить Name, Packet Marks и Queue Type для создания дополнительных очередей.

Альтернативная установка: использование генератора очереди Mangle

При ручном создании вашего PCQ и деревьев очередей вы можете ознакомиться с процессом, требованиями и Winbox, Sonar создал инструмент, который позволяет вам просто ввести желаемые скорости затем скопируйте созданный набор команд в терминал Winbox для вашего устройства MikroTik.

  1. Перейдите на https://legacy.sonar.software/generate/mikrotik-mangle-queue из любого браузера, чтобы получить доступ к генератору очереди Mangle.
  2. Заполните представленные поля информацией, взятой из вашей сети и устройства MikroTik: Mangle Queue Generator Field Breakdown1. Клиентский интерфейс — это реальный физический интерфейс, к которому клиенты подключаются на вашем устройстве.

    2. Интерфейс с выходом в Интернет — это физический интерфейс на вашем MikroTik, который подключается к Интернету.

    3. Раздел Список адресов позволяет добавлять несколько списков адресов, маркеров пакетов и деревьев очередей в одном сеансе терминала.

    4. После того, как вы ввели необходимые интерфейсы и списки адресов, вы можете скопировать весь список команд и вставить его в Терминал.

  3. Откройте Winbox и подключитесь к вашему MikroTik, затем откройте Терминал:
  4. Вставьте результаты из созданной очереди Mangle в терминал:

    Вставить в Winbox можно только щелчком правой кнопкой мыши и выбором «Вставить» из контекстного меню.

  5. Это сгенерирует дерево очереди, которое вы можете просмотреть, перейдя в Очереди и выбрав вкладку Дерево очереди

После того, как вы настроили PCQ и Деревья очередей , если вы создали эти правила на live network, вы должны увидеть, как таблицы Bytes и Packets поднимаются для каждого дерева очередей, как показано в примере ниже:

Если вы не видите, как байты и пакеты поднимаются в действующей сети, перейдите к разделу Устранение неполадок.В противном случае вы можете продолжить MikroTik: Controlling Access.

Обзор коммутатора облачного маршрутизатора MikroTik

: хорошие возможности межсетевого экрана и полезная функция блокировки

Каков наш основной вариант использования?

Мы являемся поставщиком решений, и это один из продуктов, которые мы внедряем для наших клиентов.

Что самое ценное?

Самая ценная особенность — выжимной.

Межсетевой экран очень хороший. Существует множество функций для управления разрешением или остановкой пакетов в сети.

Что нужно улучшить?

Требуется поддержка обнаружения и предотвращения вторжений (IDS / IPS).

Антиспам и антивирусные функции должны быть включены в будущем.

Как долго я использую раствор?

Я работаю с этим продуктом около 10 лет.

Что я думаю о стабильности решения?

Это стабильное решение.

Что я думаю о масштабируемости решения?

Этот продукт не рекомендуется для проектов корпоративного уровня.У нас в компании около 50 пользователей, которые им пользуются.

Как работает служба поддержки клиентов и техническая поддержка?

С техподдержкой все в порядке.

Какое решение я использовал ранее и почему я переключился?

Я также работал с аналогичными решениями от Cisco, Fortinet и Juniper.

Каков мой опыт с ценообразованием, стоимостью установки и лицензированием?

Цена очень хорошая.

Какой еще совет я могу дать?

Я думаю, что Mikrotik — лучшее решение для SOHO и малого бизнеса, потому что цена очень хорошая и включает в себя множество функций.Для более крупных компаний я бы порекомендовал другой продукт, возможно, от Cisco.

Я бы оценил это решение на восемь баллов из десяти.

** Раскрытие информации: Я реальный пользователь, и этот обзор основан на моем собственном опыте и мнениях.

Узнайте, что ваши коллеги говорят о MikroTik, Cisco, Huawei и других в Маршрутизаторах. Обновлено: март 2021 года.

471 861 специалист использовали наше исследование с 2012 года.

(PDF) Сравнительный анализ фильтра сайта mikrotik с использованием методов списка адресов, протоколов Layer7, веб-прокси, изменения и статического DNS

International Journal of Engineering & Технологии

Рисунок 14: Конфигурация дисплея Фильтрация сайтов с помощью методов статического DNS

2.Убедитесь, что клиентский компьютер в его конфигурации DNS на IP

Mikrotik, или может заставить клиентские подключения продолжать использовать

Mikrotik DNS даже на клиентском компьютере с настройками сетевой карты

, используя другой IP-адрес DNS со сценарием переадресации DNS ниже:

/ ip firewall nat

add action = redirect chain = dstnat comment = \

«Перенаправить DNS на DNS MikroTik» dst-port = 53

protocol = tcp \

to-ports = 53 add action = redirect chain = dstnat dst -port

= 53 протокол = udp to-ports = 53

3.Если клиент обращается к веб-сайту или предварительно заданному домену с помощью Stat-

ic DNS Mikrotik, тогда браузер увидит только «Этот сайт

недоступен», потому что домен перенаправлен на IP

Loopback (127.0 .0.1) вместо исходного IP / отклонено.

Рисунок 15 :. Успешный просмотр результатов фильтрации сайтов с использованием статического DNS

Методы

2.2.6. Результаты тестирования приложений

По результатам тестирования фильтра сайта на Mikrotik, как указано выше, результаты анализа

показаны в таблице 1.получены.

Таблица 1 :. Результаты сравнительного анализа 5 (пяти) методов фильтрации сайтов —

niques

Фильтрация сайтов

Методы

Когда пользователь получает доступ к youtube.com, загружается только

до появления ошибки «Этот сайт не может быть достигнут

».

Когда пользователь заходит на youtube.com в браузере

, браузер будет загружать только

до тех пор, пока не появится ошибка «Этот сайт недоступен».

Когда пользователи заходят на YouTube.com в браузере клиента

, тогда он будет фильтровать там сайт

с выводом в браузере «Доступ запрещен»

Когда пользователь обращается к youtube.com, браузер

будет загружать пустые страницы непрерывно

(Отклонение ответов и загрузка без просмотра сайта).

Когда пользователь accessyoutube.com появится тогда

вывод «Сайт недоступен» для домена

youtube.com, направленного в IP Loop-

обратно.

На основании таблицы 1.известно, что пять сайтов фильтрации telnet

успешно используются для фильтрации / блокировки сайтов. В этом эксперименте

автор отфильтровал сайт youtube.com и facebook.com.

3. Заключение

На основании проведенного выше исследования можно сделать вывод

, среди прочего:

1. Из результатов исследования был проведен сравнительный анализ Site Filter

на Mikrotik с использованием метода списка адресов, Layer7 Протоколы,

Веб-прокси, Mangle и DNS Static.Пять методов фильтрации —

ников сайта успешно заблокировали youtube.com и fa-

cebook.com с различными выходами фильтра.

2. С тестовым сайтом с техникой фильтрации MikroTik его можно

использовать в качестве юриста с точки зрения блокировки сайта. Можно сказать, что блокировку

легко, быстро и разнообразно, поэтому разработчику

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

.

Источники

[1] Хидаят А. (2018). Проектирование Radius Server в серверной сети

Интернет Факультет компьютерных наук Университета Мухаммадия

Метро. IJISCS (Международный журнал информационных систем и

компьютерных наук), 2 (1), 13-30.

[2] Суетно, Тедияна, А., и Путра, Ф. П. (2017). Analisa Per-

Bandingan Filter Situs Dan Manajemen Bandwidth Pada Proxy

Server Dan Веб-прокси Pada Mikrotik.Журнал Инфотекмесин, 8 (1),

19–25.

[3] Херсатья Г. (2013). Реализация фильтрации Dengan Layer 7 Proto-

cols Mikrotik Routeros. Journal Teknik Informatika, Fakultas Ilmu

Komputer, Universitas Dian Nuswantoro Semarang, 1 (Internet Fil-

tering), 1–4.

[4] Кустанто Д. и Даниэль С. (2008). Membangun Server Internet

Dengan Mikrotik OS. Джокьякарта: Гава Медиа Джокьякарта.

[5] Хидаят, А.(2016). Пандуан Беладжар Мандири Административный сервер

Джаринган Менггунакан Linux Ubuntu. Laduni Alifatama. Лампунг

(ISBN: 978-602-1397-56-5)

[6] Сиддик, М. (2017). МАРШРУТИЗАТОР ASI MIKROTIK

BOARD 750 SEBAGAI FIREWALL BLOK SITUS PADA

JARINGAN LAN. JURTEKSI ROYAL Том 3 № 2,

[7] Лукас, Джонатан. (2006). Джаринган Компьютер, Граха Ильму, Джакарта.

[8] Хидаят А. (2017). Сервер Konfigurasi Cloud Storage pada Jarin-

gan LAN pada LAB Diploma III Manajemen Informatika UM Met-

ro.МИКРОТИК: Jurnal Manajemen Informatika, 7 (1).

[9] Хидаят А. (2017). СОЗДАНИЕ ПРИЛОЖЕНИЯ EXPERT SYSTEM APPLICA-

TION ДЛЯ ПОМОЩИ СЕТИ ДЛЯ РЕШЕНИЯ ПРОБЛЕМ НА МАРШРУТИЗАТОРЕ

MIKROTIK. МИКРОТИК: Jurnal Manajemen Informat-

ika, 6 (1).

[10] Лукас, Джонатан. (2006). Джаринган Компьютер, Граха Ильму, Джакарта.

[11] Хидаят А. (2018). Виртуальная локальная сеть Перанкангана

(VLAN) Pada Lab Komputer D-III Sistem Informasi Universitas

Метро Мухаммадии (UM Metro).Konferensi Nasional Sistem

Informasi (KNSI) 2018)

[12] Winarno dan Smitdev, (2014). Membuat Jaringan Komputer di

Windows и Linux, PT. Elex Media Komputindo, Джакарта.

[13] Хидаят, А. (2018). СИСТЕМ ПРОТЕКСИ СБОЙ НАД ДЕНГАНОМ

RSTP PADA СЕРВЕР МАРШРУТИЗАТОР ИНТЕРНЕТ ФИКОМ УМ МЕТ-

РО БЕРБАЗИС МИКРОТИК. СЕМНАСТЭКНОМЕДИА

ОНЛАЙН, 6 (1), 1-1.

[14] Нортон Петерс. (1999). Полное руководство по работе в сети.Самс, Индия.

[15] Хидаят А. (2017). Сервер Konfigurasi Cloud Storage pada Jarin-

gan LAN pada LAB Diploma III Manajemen Informatika UM Met-

ro. МИКРОТИК: Jurnal Manajemen Informatika, 7 (1).

[16] Sinarmata, Janner, (2006). Teknologi Komputer dan Informasi,

Andi Offset, Джокьякарта.

[17] Компьютер, Вахана, (2013). Интернет Аман и Сехат, Энди Офсет,

Джокьякарта

[18] Сутанта, Эди, (2005).Komunikasi Data дан Джаринган, Граха Ильму,

Джокьякарта.

[19] Компьютер, Вахана, (2009). Администрация Джарингана в Ubuntu

9, Энди Офсет, Джокьякарта ..

[20] Сугенг, Винарно, (2015). Jaringan Komputer dengan TCP / IP,

Modula.

[21] Бхайангкара, Ф. Дж., И Риади, И. (2014). Реализация прокси-сервера

и балансировки нагрузки Менгунакан Метод для класса подключения —

fier (PCC) Berbasis Mikrotik (Studi kasus: Shmily.сеть). JSTIE

(Jurnal Sarjana Teknik Informatika) (Электронный журнал), 2 (2), 409-420.

Basic VoIP QoS с использованием MikroTik | Блог

VoIP быстро становится отраслевым стандартом для офисных телекоммуникаций, и по мере того, как все больше людей работает из дома, имеет смысл обеспечить адекватный приоритет трафика для беспрепятственной доставки голосовых пакетов. В эту статью мы включили полезное руководство по настройке, чтобы помочь с лучшими практиками качества обслуживания с использованием MikroTik. VoIP не требует большой полосы пропускания, но полагается на низкую задержку и дрожание, поскольку голосовая связь происходит в режиме реального времени.Хотя QoS поможет во многих ситуациях, это не лучшая цель для решения проблем качества VoIP при плохих соединениях, и поэтому его не рекомендуется использовать с типами полосы пропускания с высокой задержкой, такими как DSL или спутниковая связь.

Определение и маркировка трафика VoIP

Используя «Firewall Mangle» MikroTik, вам нужно будет сообщить маршрутизатору, какие типы соединений используются для VoIP, а затем пометить каждый пакет для последующей обработки в очередях. Чтобы сохранить ресурсы на маршрутизаторе, лучше всего сначала пометить каждое соединение, а затем пометить пакеты в этих соединениях.VoIP в этом случае использует UDP-порт 5060 (по умолчанию) для регистрации вместе со случайными портами RTP для речи. Перед применением конфигурации важно точно проверить, какие порты используются в вашей ситуации.

Поток пакетов QoS

Шаг 1. Идентификация SIP-соединений
Шаг 2. Отметьте все пакеты SIP
Шаг 3. Определение RTP-подключений
Шаг 4. Отметьте все пакеты RTP

Точка кода дифференцированного обслуживания (DSCP)

«Дифференцированные услуги» — это сетевой протокол по умолчанию, предназначенный для классификации сетевого трафика и управления им.Он использует значения DSCP для определения приоритета задержки для определенных типов трафика над другими.

Имя DSCP Значение поля DS (декабрь) Приоритет IP (описание)
CS0 0 0: Лучшее усилие
LE 1 н / д
CS1, AF11-13 8, 10, 12, 14 1: приоритет
CS2, AF21-23 16, 18, 20, 22 2: Немедленно
CS3, AF31-33 24, 26, 28, 30 3: Flash — в основном используется для голосовой сигнализации
CS4, AF41-43 32, 34, 36, 38 4: Отмена вспышки
CS5, EF 40, 46 5: Критический — в основном используется для голосового RTP
CS6 48 6: Межсетевое управление
CS7 56 7: Управление сетью

В большинстве случаев оборудование поставщика VoIP будет использовать DSCP-46 (ускоренная пересылка) по умолчанию для определения приоритета трафика RTP.Также можно гарантировать, что все RTP-соединения с вашим сервером VoIP имеют правильный приоритет с помощью правила Mangle.

Интерфейс командной строки

/ IP брандмауэр Mangle
добавить действие = цепочка отметок-соединений = переслать комментарий = SIP dst-address = 1.2.3.4 dst-port = 5060 \
new-connection-mark = сквозное соединение SIP_Connection = да протокол = udp
добавить действие = цепочка меток-пакетов = метка пересылки соединения = SIP_Connection метка нового пакета = SIP_Packet \
сквозной = да
add action = mark-connection chain = forward comment = dst-address RTP = 1.2.3.4 новое-соединение-метка = \
RTP_Connection passthrough = да порт = 10000-12000 протокол = udp
добавить действие = цепочка меток-пакетов = метка прямого соединения = RTP_Connection метка нового пакета = RTP_Packet \
сквозной = да протокол = UDP
add action = change-dscp chain = postrouting comment = "DSCP Priority" dst-address = 1.2.3.4 new-dscp = 46 \
метка пакета = RTP_Packet passthrough = да

очередей

Очереди обрабатывают сетевой трафик, отбрасывая пакеты после достижения предварительно установленных максимальных ограничений.Мы рекомендуем использовать «Дерево очереди». «Дерево очереди» полагается на метки пакетов, поскольку весь трафик проходит одновременно. Это также позволит независимо управлять типами восходящего и нисходящего трафика. Идея здесь состоит в том, чтобы создать родительскую очередь, которая распределяет ресурсы полосы пропускания между подчиненными или дочерними очередями на основе ограничений и приоритета. Какая полоса пропускания выделяется этим службам, действительно зависит от размера кодека и количества одновременных вызовов VoIP.

СОВЕТ: Проверьте свою таблицу отслеживания соединений на наличие отмеченных RTP соединений во время вызова VoIP, чтобы получить представление о том, какая полоса пропускания вам понадобится.Мы обнаружили, что при использовании кодека G729 накладные расходы составляют примерно 32 кбит / с вверх / вниз на вызов.

Создайте родительскую очередь с интерфейсом LAN, настроенным как загрузка, и интерфейсом WAN, настроенным для загрузки. Приоритет родительской очереди не имеет значения.

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

Интерфейс командной строки


/ дерево очереди
добавить limit-at = 20M max-limit = 20M name = Загрузить родительский = pppoe-out1 queue = по умолчанию
добавить limit-at = 128k max-limit = 128k name = Priority1-Up packet-mark = RTP_Packet parent = Приоритет загрузки = 1 очередь = \
по умолчанию
добавить limit-at = 20k max-limit = 20k name = Priority2-Up packet-mark = SIP_Packet parent = Приоритет загрузки = 2 queue = \
по умолчанию
add name = Priority3-Up packet-mark = no-mark parent = приоритет загрузки = 3 очередь = по умолчанию
добавить limit-at = 20M max-limit = 20M name = Загрузить родительский = мост, очередь = по умолчанию
добавить limit-at = 128k max-limit = 128k name = Priority1-Down packet-mark = RTP_Packet parent = Приоритет загрузки = 1 \
queue = по умолчанию
добавить limit-at = 20k max-limit = 20k name = Priority2-Down packet-mark = SIP_Packet parent = Приоритет загрузки = 2 \
queue = по умолчанию
add name = Priority3-Down packet-mark = no-mark parent = приоритет загрузки = 3 очередь = по умолчанию

Древовидный список очередей с полной конфигурацией

СОВЕТ: Покажите столбец «Отброшено», чтобы отобразить все отброшенные пакеты, которые помогут при устранении неполадок.При устранении неполадок всегда проверяйте задержку и джиттер на сервере VoIP.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *