суббота, 3 октября 2009 г.

Mikrotik - QoS / Bandwidth Control / Простое ограничение



Quality of Service (QoS) это комплекс мер по обеспечению качества обслуживания компьютерной сети, который можно характеризовать несколькими параметрами:
# Полоса пропускания (Bandwidth).
# Задержка при передаче пакета (Delay).
# Колебания (дрожание) задержки при передаче пакетов — джиттер (Jitter).
# Потеря пакетов (Packet loss).

В следующих примерах я продемонстрирую как организовать простой механизм ограничения скорости, используя MikroTik Router OS.
Придумаем виртуальную схему сети и создадим конфигурацию роутера для нее.


Итак, два филиала, в филиале А находится несколько рабочих мест, почтовый сервер и web сервер, роутер этого филиала подключен одновременно к двум провайдерам, провайдер ISP1 предоставляет 100Мб внутри своей сети, внутренний трафик не тарифицируется, второй провайдер ISP2 предоставляет безлимитный доступ к сети Internet. В филиале В находится терминальный сервер, этот филиал так же подключен к провайдеру ISP1.

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


Необходимо:
  1. Работа по каналу провайдера ISP2
    1. Ограничить скорость доступа офисным машинам к сети Internet:
      • Машины 192.168.1.10-192.168.1.15 - Download = 64kb/s, Upload = 32kb/s
      • Машина 192.168.1.20 - Download = 256kb/s, Upload = 128kb/s
    2. Ограничить скорость доступа почтового сервера - Donwload = 1Mb/s, Upload = 1Mb/s
    3. Ограничить скорость доступа web сервера - Download = 1Mb/s, Upload = 4Mb/s
  2. Работа по каналу провайдера IPS1
    1. Ограничить скорость доступа офисным машинам 192.168.1.10-192.168.1.15 до уровня, достаточного для работы с 1-2 одновременными терминальными сеансами (RDP) - 1Mb/s
    2. Ограничить скорость доступа машины 192.168.1.20 до 10Mb/s
    3. Ограничить скорость доступа серверов до 10Mb/s
Самым простым механизмом ограничения скорости доступа является /queue simple, ограничения задаются в виде правил, правила обрабатываются по порядку от меньшего номера к большему (сверху вниз).

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

Первым шагом создадим правила для серверов.

[mkt@MikroTik] > queue simple add name="mail to branch" target-addresses=192.168.1.2
dst-address=195.82.111.0/24 interface=ISP1 max-limit=10000000/10000000
target-addresses - адрес, который ограничиваем.
dst-address - назначение, в нашем случае это подсеть внутри провайдера.
interface - интрефес, через который буду проходить пакеты от target-addresses к dst-address.
max-limit - значение максимальной скорости (target upload/download)

Теперь тоже, но для веб сервера и 192.168.1.20.

[mkt@MikroTik] > queue simple add name="web to branch" target-addresses=192.168.1.3
dst-address=195.82.111.0/24 interface=ISP1 max-limit=10000000/10000000

[mkt@MikroTik] > queue simple add name="192.168.1.20 to branch"
target-addresses=192.168.1.20 dst-address=195.82.111.0/24 interface=ISP1
max-limit=10000000/10000000

Значение name должно быть уникальным!


Теперь правило для машин 192.168.1.10-192.168.1.15.

[mkt@MikroTik] > queue simple add name="192.168.1.10-15 to branch"
target-addresses=192.168.1.10,192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,
192.168.1.15 dst-address=195.82.111.0/24 interface=ISP1 max-limit=1000000/1000000

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


Считаем, что с правилами маршрутизации проблем нет и то, что должно пойти по не тарифицируемому каналу, то по нему пойдет и не свернет случайно на второй интерфейс, который со стороны филиала А безлимитный, а вот со стороны филиала В находится уже другой провайдер, который выставит счет за такую ошибку. А вдруг что то не так? Или этими настройками занимается другой человек, лучше себя подстраховать!
Защитится от этого можно одним простым правилом, все, что не предназначено подсети, в которой находятся наши филиалы, должно быть ограничено до скорости в 10b/s.
Можно перефразировать задачу по другому, учитывая, что правилами, которые стоят выше, оговорены ограничения для доступа к филиалам через интерфейс ISP1, остальные соединения, проходящие через интерфейс ISP1 ограничить скоростью в 10b/s.

[mkt@MikroTik] > queue simple add name="not to branch" interface=ISP1
max-limit=10/10

Теперь настало время прописать ограничения для работы со вторым провайдером.


Начнем так же с серверов.

Почтовый серер - 1Mb/s, Upload = 1Mb/s

[mkt@MikroTik] > queue simple add name="mail to external"
target-addresses=192.168.1.2 interface=ISP2 max-limit=1000000/1000000

Веб сервер - Download = 1Mb/s, Upload = 4Mb/s.


[mkt@MikroTik] > queue simple add name="web to external"
target-addresses=192.168.1.3 interface=ISP2 max-limit=4000000/1000000

Теперь машина 192.168.1.20 - Download = 256kb/s, Upload = 128kb/s


[mkt@MikroTik] > queue simple add name="192.168.1.20 to external"
target-addresses=192.168.1.20 interface=ISP2 max-limit=128000/256000

В заключение одним правилом для машин 192.168.1.10-192.168.1.15 - Download = 64kb/s, Upload = 32kb/s


[mkt@MikroTik] > queue simple add name="192.168.1.10-15 to external"
target-addresses=192.168.1.10,192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,
192.168.1.15 interface=ISP2 max-limit=32000/64000

Продублируем защиту для интрефейса ISP2, что бы все выходящее с него в подсеть филиалов ограничивалось скоростью в 10b/s.


[mkt@MikroTik] > queue simple add name="ISP2 to branch" dst-address=195.82.111.0/24
interface=ISP2 max-limit=10/10
Посмотрим, что у нас получилось.
[mkt@MikroTik] > queue simple print
Flags: X - disabled, I - invalid, D - dynamic
0 name="web to branch" target-addresses=192.168.1.3/32
dst-address=195.82.111.0/24 interface=ISP1 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=10000000/10000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

1 name="192.168.1.20 to branch" target-addresses=192.168.1.20/32
dst-address=195.82.111.0/24 interface=ISP1 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=10000000/10000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

2 name="192.168.1.10-15 to branch"
target-addresses=192.168.1.10/32,192.168.1.11/32,192.168.1.12/32,
192.168.1.13/32,192.168.1.14/32,192.168.1.15/32
dst-address=195.82.111.0/24 interface=ISP1 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=1000000/1000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

3 name="not to branch" dst-address=0.0.0.0/0 interface=ISP1 parent=none
direction=both priority=8 queue=default-small/default-small
limit-at=0/0 max-limit=10/10 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

4 name="mail to external" target-addresses=192.168.1.2/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=1000000/1000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

5 name="web to external" target-addresses=192.168.1.3/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=4000000/1000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

6 name="192.168.1.20 to external" target-addresses=192.168.1.20/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=128000/256000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

7 name="192.168.1.10-15 to external"
target-addresses=192.168.1.10/32,192.168.1.11/32,192.168.1.12/32,
192.168.1.13/32,192.168.1.14/32,192.168.1.15/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=32000/64000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

8 name="ISP2 to branch" dst-address=195.82.111.0/24 interface=ISP2
parent=none direction=both priority=8 queue=default-small/default-small
limit-at=0/0 max-limit=10/10 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small



Это самый простой из механизмов ограничения скорости и обеспечения качества сервиса.
Progg it
Продолжение следует...

8 комментариев:

  1. Жаль что в таргет адресс симпл-кью нельзя сразу указать адресс-лист.

    Как можно избежать внесения адресов в таргет-адресс и привязать лимиты скоростей к адресс-листам?

    Натолкнула статья:
    http://wiki.mikrotik.com/wiki/How_to_apply_different_limits_for_Local/Overseas_traffic
    Неудобно пользователям выписывать отдельно доступ и скорости по ресурсам внутрестраны/миру.

    ОтветитьУдалить
  2. > Как можно избежать внесения адресов в таргет-адресс
    > и привязать лимиты скоростей к адресс-листам?

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

    Для себя я делал черный список сайтов, там так же вносились ip адреса сайтов в группу block, а потом этой группе в правилах фаервола был прописан запрет.
    Отдельно на одном из серверов вертится в планировщике скрипт на питоне, который открывает текстовый файл, в нем перечислены имена сайтов, он берет по одному имени, делает запрос на www.dnswatch.info/dns/dnslookup?la=en&type=A&submit=Resolve&host=АДРЕС_САЙТА в ответ приходит страничка, в которой по регулярному выражению выбираются записи типа А. Так собираем базу ip адресов, не забываем делать паузу в 5-ть сек между запросами, а то забанят быстро :) Потом с этой базой ip-шников скрипт подключается к миротику по телнету, командой /ip firewall address-list remove [/ip firewall address-list find list=block] убивает уже созданные записи в этой группе и создает новые. Под конец скрипт запоминает в файл дату создания и размер файла со списком сайтов, что бы при следующем запуске сверить их и не делать все эти операции, если файл ни кто не менял.

    Тот же механизм можно прикрутить и сюда :)

    ОтветитьУдалить
  3. Но тогда надо будет создавать на каждый тарифный план свои маркировки внутрестраны/зарубежа с уточнением сорс адрес-листа который может использовать это подключение. А это в десятки раз больше маркировок пакетов что будет нагружать процессор роутера.



    Вопрос может не в тему, но:
    Есть в сети спаммеры и/или внешний белый адрес попал под какие-то спам-сервисы которые делают более 500 сессий с каждого уникального хоста к моему белому, причем сессия не адресуется за нат кому либо в сети.. Спамеры же поднимают более 50000 сессий и инет блокирует провайдер/или канал падает..

    Когда ставлю в фаерволе дроп Конешн-лимит 200, протокол ТСП, форвард.. и правило с добавлением сорс и дестини адресов в банлист.. то сессии переваливают за глобальный лимит, спаммер попадает в банлист а инет то всем блокируют.
    При этом процессор трудяга работает при свободном канале на 30% (без правил был 1%) и общая скорость скачивания падает почти в два раза.

    Роутербоадрды вроде идут с процессорами класса пентиум1-пентиум2 и наверное же как-то рассчитаны на такие правила/нагрузки? (у меня роутер на виа-епиа-мл-итх-600мгц)

    Может я неправильно понимаю принцип работы с сессиями клиентов/входящими сессиями? Подскажите как правильно разгрузить процессор и банить злоумышленников (лимитировать сессии).

    ОтветитьУдалить
  4. Очень смущает список ип адресов. что делать если их тысячи? нельзя написать 192.168.10-192.168.1.15 ?

    ОтветитьУдалить
  5. > Очень смущает список ип адресов. что делать если
    > их тысячи? нельзя написать 192.168.10-192.168.1.15 ?

    Можно писать через маску, 192.168.1.0/24

    ОтветитьУдалить
  6. Сергей, а можно ли использовать такую систему для машины которая прописана в hotspot > ip binding?

    ОтветитьУдалить
  7. неужели нельзя через винбокс сделать, обязательно мозг командной строкой забивать

    ОтветитьУдалить
    Ответы
    1. Честно? Нет. =)
      Если вы находитесь удаленно, и как разумный админ (или админ с параноидальными наклонностями) отключили варианты удаленного подключения http и winbox, то вас спасёт только telnet и ssh подключение, которые, как вам известно, не очень-то дружат с GUI. Я вот так и сделал, потому-как эту железку поставили в офисе только после 6и дабы не прерывать работу фирмы и приспокойненько настраивал из дома по telnet

      Удалить