Wiki

Clone wiki

rt-n56u / RU / Использование модулей QoS

Использование модулей QoS

Ни одна из стандартных сборок модули QoS не включает. Включение QoS влечёт за собой некоторое паденине производительности роутера, даже если QoS использоваться не будет. Кроме того, при использовании QoS придётся отказаться аппаратного ускорения NAT'а и вся нагрузка по форвардингу сетевых пакетов целиком ляжет на плечи CPU.



Необходимые условия для работы шейпера

  • пересоберите прошивку с включенными опциями CONFIG_FIRMWARE_INCLUDE_QOS=y, CONFIG_FIRMWARE_INCLUDE_IMQ=y и (опционально) CONFIG_FIRMWARE_INCLUDE_IFB=y. В прошивку кроме модулей автоматически будет включена утилита tc.
  • отключите аппартный NAT на странице WAN > Интернет-соединение пункт Аппаратное ускорение NAT/маршрутизации IPv4:.

Пример шейпера для разделения полосы между клиентами

Шейпер делит между клиентами скорость Download'а.

  • на странице LAN > DHCP-сервер включите Включить назначение вручную? и назначьте статические адреса нужным клиентам,
  • создайте файл /etc/storage/shaper.sh со следующим содержимым:
    #!/bin/sh
    # Автор viperet @ http://forum.zyxmon.org/post2617.html#p2617
    
    # Скрипт регулирует только скорость аплоада с роутера на клиентов, поэтому интерфейс аплоада br0.
    WAN=br0
    
    # Загрузка модулей imq 
    [ -z "$(lsmod | grep imq)" ] && modprobe imq
    
    # Очистка настроек шейпера
    tc qdisc del dev $WAN root
    
    # Используется дисциплина HTB, см. http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
    tc qdisc add dev $WAN root handle 1: htb default 90
    
    # Рут-класс. Здесь задаётся максимальная гарантированная скорость интернет-канала (50mbps)
    tc class add dev $WAN parent 1: classid 1:1 htb rate 50mbit ceil 50mbit
    
    # Группа №1 (один клиент, 192.168.1.3): гарантированы 5mbps, максимальная скорость 5mbps
    tc class add dev $WAN parent 1:1 classid 1:10 htb rate 5mbit ceil 5mbit
    tc filter add dev $WAN protocol ip parent 1:0 prio 1 u32 \
        match ip dst 192.168.1.3 flowid 1:10
    tc qdisc add dev $WAN parent 1:10 handle 20: pfifo limit 5
    
    # Группа №2 (два клиента 192.168.1.4 и 192.168.1.5): гарантированы 5mbps, максимальная скорость 10mbps
    tc class add dev $WAN parent 1:1 classid 1:11 htb rate 5mbit ceil 10mbit
    tc filter add dev $WAN protocol ip parent 1:0 prio 1 u32 \
        match ip dst 192.168.1.4 flowid 1:11
    tc filter add dev $WAN protocol ip parent 1:0 prio 1 u32 \
        match ip dst 192.168.1.5 flowid 1:11
    tc qdisc add dev $WAN parent 1:11 handle 30: pfifo limit 5
    
    # Настройки для остальных клиентов: гарантирован 1mbps, максимальная скорость 2mbps
    tc class add dev $WAN parent 1:1 classid 1:90 htb rate 1mbit ceil 2mbit
    tc qdisc add dev $WAN parent 1:90 handle 99: sfq perturb 10
    
  • отредактируйте скрипт под свои условия и сделайте его исполняемым:
    chmod +x /etc/storage/shaper.sh
    
  • на странице Персонализация > Скрипты в поле Выполнить после полного запуска маршрутизатора: добавьте строчку:
    /etc/storage/shaper.sh
    
  • запустите шейпер из консоли и проверьте его в действии. Он будет автоматически стартовать при каждой загрузке роутера:
    /etc/storage/shaper.sh
    

Пример QoS (приоритезации трафика)

Все действия повторяют предыдущий раздел, только необходимости в назначении статических IP-адресов клиентам нет, а содержимое /etc/storage/shaper.sh имеет другой вид:

#!/bin/sh
# Автор samuels @ http://forum.ixbt.com/topic.cgi?id=14:59506:1197#1197

# локальный интерфейс роутера, через него настраивается приоритезация входящего трафика.
int="br0"
# Ширина канала провайдера, нужно задать на ~5% меньше реальной, чтобы затыки происходили на нашей стороне.
DL=11200kbit
# удаляем настройки приоритезации по умолчанию.
tc qdisc del dev $int root > /dev/null 2>&1
# Задаем новый root handle, по умолчанию трафик будет идти в class 1:30 (самый низкий приоритет)
tc qdisc add dev $int root handle 1: htb default 30

# задаем ширину канала через самый верхний класс.
tc class add dev $int parent 1: classid 1:1 htb rate $DL ceil $DL

# Задаем классы и их приоритеты (три класа 1:10 - max приоритерт, 1:20 - med приоритет и 1:30 - min приоритет)
tc class add dev $int parent 1:1 classid 1:10 htb rate 5kbit ceil $DL prio 2
tc class add dev $int parent 1:1 classid 1:20 htb rate 2Mbit ceil $DL prio 3
tc class add dev $int parent 1:1 classid 1:30 htb rate 2Mbit ceil $DL prio 4
tc qdisc add dev $int parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $int parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $int parent 1:30 handle 30: sfq perturb 10

# Задаем фильтры, которые распределяют разные сервисы  по классам.
###HIGH PRIO
#ICMP
tc filter add dev $int parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10
#ACK
tc filter add dev $int parent 1: protocol ip prio 1 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
#DNS
tc filter add dev $int parent 1: protocol ip prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:10
#VOIP
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip tos 0x68 0xff match ip protocol 11 0xff flowid 1:10
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip tos 0xb8 0xff match ip protocol 11 0xff flowid 1:10
#TOS
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip tos 0x10 0xff flowid 1:10
#IPTV
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip protocol 17 0xff match ip dst 224.0.0.0/3 flowid 1:10
#SSH+TELNET
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xfffe flowid 1:10
#RDP
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip protocol 6 0xff match ip sport 3389 0xffff flowid 1:10
#NTP
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip protocol 17 0xff match ip sport 123 0xffff flowid 1:10
#ICQ
tc filter add dev $int parent 1: protocol ip prio 2 u32 match ip protocol 6 0xff match ip sport 5190 0xffff flowid 1:10
#ICQ


###MED PRIO

#MAIL
# SMTP
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:20
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 465 0xffff flowid 1:20
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 587 0xffff flowid 1:20
# POP3
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 110 0xffff flowid 1:20
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 995 0xffff flowid 1:20
# IMAP
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 143 0xffff flowid 1:20
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 993 0xffff flowid 1:20

#HTTPS
tc filter add dev $int parent 1: protocol ip prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:20
#WWW
tc filter add dev $int parent 1: protocol ip prio 6 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:20
#
#FTP 
tc filter add dev $int parent 1: protocol ip prio 6 u32 match ip protocol 6 0xff match ip sport 20 0xfffe flowid 1:20

###LOW PRIO Default
#All other stuff(torrent etc..)

Updated