понедельник, 19 октября 2009 г.

Mikrotik - QoS / Bandwidth Control / Индивидуальные правила



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

Начнем как всегда - с обрисовки ситуации, которую необходимо решить.

Есть офис с доступом к сети Интернет через одного провайдера, этот провайдер предоставляет скорость равную 2Мб/с. В офисе есть два сервера, почтовый и web, которым необходимо обеспечить стабильный канал независимо как от рабочих станций, так и от самих себя. Так же в офисе есть несколько рабочих мест, которые имеют доступ к сервисам web и icq, так же есть машина системного администратора, которая имею доступ к сервисам без ограничений, но с внутренними правилами распределения трафика.



Чем сложнее задача, тем меньше шансов решить ее в одно-два действия.

Начнем с серверов, считаем, что им для нормальной работы требуется скорость в 512Кб/с, но если канал будет свободен, то пускай пользуются им во всю.

Первым шагом выделим все соединения, которые открывают сервера. Для этого маркируем все соединения, которые открывает web сервер маркером c-srv-web, а соединения, которые открывает почтовый сервер маркером c-srv-mail.
[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address="192.168.1.1"
action=mark-connection new-connection-mark="c-srv-web"

[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address="192.168.1.2"
action=mark-connection new-connection-mark="c-srv-mail"

Маркируем все пакеты от веб сервера маркером p-srv-web.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark="c-srv-web"
action=mark-packet new-packet-mark="p-srv-web"

Для работы же почтового сервера требуется большее количество портов (smtp, pop, imap...), может быть бывают ситуации, когда необходимо серверу закручивать гайки на столько, что бы ограничивать в скорости каждый сервис индивидуально, но у нас простой случай, по этому маркируем весь трафик почтового сервера маркером p-srv-mail.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark="c-srv-mail"
action=mark-packet new-packet-mark="p-srv-mail"

Теперь настало время создать правила для ограничения скорости. Первое условие - сервера гарантированно получают по 512кб/с, второе условие - не мешать друг другу (т.е. нельзя занимать весь канал, даже если он свободен), как следствие из второго максимальное ограничение это весь канал, минус гарантированная ширина для второго сервера, т.е. 1,5Мб/с.

[mkt@OFFICE] > queue tree add name="web server" parent=global-total
packet-mark=p-srv-web limit-at=512000 max-limit=1500000

[mkt@OFFICE] > queue tree add name="mail server" parent=global-total
packet-mark=p-srv-mail limit-at=512000 max-limit=1500000

Создадим правила для рядовых пользователей, считаем, что все они объединены общей группой client, лимит для них 64кб/с - гарантировано и 128кб/с - верхний предел на download и 32кб/с - гарантированно и 64кб/с - верхний предел на upload.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address-list=client
action=mark-connection new-connection-mark=c-client

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark=c-client
action=mark-packet new-packet-mark=p-client

[mkt@OFFICE] > queue tree add name="client download" parent=local
packet-mark=p-client limit-at=64000 max-limit=128000

[mkt@OFFICE] > queue tree add name="client upload" parent=isp
packet-mark=p-client limit-at=32000 max-limit=64000
local - это локальный интерфейс, а isp - это интерфейс, смотрящий в внешнюю сеть.

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

Осталось настроить машину системного админисратора, которая не имеет ограничений по сервисам, но имеет общий лимит по скорости, а так же внутри этого лимита есть лимиты между сервисами. Допустим, что общий лимит это 256кб/с - гарантированно и 512кб/с - верхний предел. Для доступа к web лимит в 64кб/с - гарантировано и 256кб/с верхний предел, для доступа к p2p сетям 128 кб/с - гарантированно и 512кб/с - верхний предел, остальной трафик получает весь оставшийся канал, который остается исходя из общего лимита.

Маркируем соединения.
[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address="192.168.1.100"
action=mark-connection new-connection-mark=c-admin

Теперь маркируем все пакеты, пакеты с 80 порта, и пакеты с p2p сетей.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark=c-admin
action=mark-packet new-packet-mark=p-admin-total

[mkt@OFFICE] > ip firewall mangle add chain=prerouting protocol=tcp src-port=80
connection-mark=c-admin action=mark-packet new-packet-mark=p-admin-web

[mkt@OFFICE] > ip firewall mangle add chain=prerouting p2p=all-p2p
connection-mark=c-admin action=mark-packet new-packet-mark=p-admin-p2p

Создаем ограничения, первое это общее ограничение, потом два дочерних от него, для web и p2p.

[mkt@OFFICE] > queue tree add name="admin-total" parent=global-total
packet-mark=p-admin-total limit-at=256000 max-limit=512000

[mkt@OFFICE] > queue tree add name="admin-web" parent=admin-total
packet-mark=p-admin-web limit-at=64000 max-limit=256000

[mkt@OFFICE] > queue tree add name="admin-p2p" parent=admin-total
packet-mark=p-admin-p2p limit-at=128000 max-limit=512000
В результате получим такую "ступеньку".


На этом все.
Продолжение следует...
Progg it

Читать дальше...

суббота, 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
Продолжение следует...
Читать дальше...