QoS в FreeBSD

Недавно довелось настроить на одном из роутеров QoS на базе ipfw, вот я и решил описать это немного подробнее.

Технические данные:
домашняя точка доступа WiFi: D-Link DIR320;
Роутер на базе Intel Atom 230;
Ноут и домашний ПК имеют IP: 10.10.1.2, 10.10.1.1 соответсвтенно.

Поставленная задача:
Комп постоянно что то качает из интернета, и на нём же все время крутится радио на 8081 порту.
Нужно, сделать так, что бы когда включаю ноут и пытаюсь что то открыть — то приоритет трафика был самым высоким для ноута, но при этом радио играющее на компе не умолкало и не обрывалось.

Решение:

1. Жестко нарезать полосы для каждого условия, комп, радио, и ноут. Но при таком решении, будет гулять остаток канала, если он кем либо не используется. Также можно выделить полосу и делить динамически для радио и остального пополам, что я и опишу.

2. Будем использовать QoS для того что бы динамически распределить канал между участниками.

1й способ:


# ipfw add 10 set 3 pipe 11 tcp from any to any not 8081 via tun0
# ipfw add 10 set 3 pipe 11 udp from any to any via tun0
# ipfw pipe 11 config bw 4Mbit/s

Таким образом мы создали два правила, одно для tcp с указанием порта и одно для udp. Доля icmp мала настолько, что нет смысла делать ей отдельное правило.

Мы поместили оба правила в один набор с номером 3 (set 3), поэтому временно остановить и возобновить процесс урезания можно командами

# ipfw set disable 3
# ipfw set enable 3

Ну, а удалить все правила:

# ipfw delete 10
# ipfw pipe delete 11

2й способ:

Для этого создадим трубу 11, на всю толщину канала.


# ipfw pipe 11 config bw 4Mbit/s

Далее, разделим трубу на очереди с разными приоритетами.
Первая, с весом приближенным к 100 (максимум приоритета, для ноута) — 95, а вторую — приближенную к 1 (минимум приоритета, для компа) и третья — меньше половины — 30 (для радио).


# ipfw queue 1 config pipe 11 weight 95
# ipfw queue 2 config pipe 11 weight 1
# ipfw queue 3 config pipe 11 weight 30

После чего нарезаем логику:


# ipfw add 25 set 5 queue 1 ip from any to 10.10.1.2 not 8081 via tun0
# ipfw add 25 set 5 queue 2 ip from any to 10.10.1.1 not 8081 via tun0
# ipfw add 25 set 5 queue 3 ip from any to any 8081 via tun0

Весовой коэффициент — это не процент, и их сумма не обязательно должна равняться 100.

Поток очередей распределяются согласно весам, больше вес — больше внимания, соответственно больше раз пройдет это правило. То есть, в нашем примере, при одновременной загрузке канала ноутом и компом на закачке и включенном радио, за то время пока пройдет один пакет на комп (не радио трафик), пройдет 30 пакетов радио трафика и 95 пакетов на ноут. Если освобождается комп или радиотрафик, то ноут получает весь канал. А при выключенном ноуте — комп получает весь канал, но при включении радио — радио трафик имеет приоритет 30 пакетов к одному.

Ну вот, думаю все понятно.. Примерно также, но более сложную схему и с большим количеством правил я настраивал ещё один шлюз для одного учебного заведения — делал приоритет для студентов, серверов, преподавателей и естественно админов 🙂

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/?p=773


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

You must be logged in to post a comment.