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/773


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

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

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

Add your comment now

Please note: JavaScript is required to post comments.