немного о tc (part of iproute2 package)

длинных манов по этой теме хватает, пэтому тут кратко покажу на примере моих настроек

tc qdisc add dev ppp0 root handle 2: htb default 40 #создаем класс с идентификатором 2 в для устройства ppp0 с дисциплиной htb и подклассом с идентификатором 40 по умолчанию
tc class add dev ppp0 parent 2: classid 2:1 htb rate 128kbit ceil 128kbit #задаем настройки класса rate - скорость канала ceil - максимальные возможности железа, в манах пишут дает более точные вычисления.
tc class add dev ppp0 parent 2:1 classid 2:10 htb rate 126kbit prio 1 определяем первый подкласс с приоритетом 1 (максимальным) и скоростью 126кбит
tc class add dev ppp0 parent 2:1 classid 2:20 htb rate 96kbit prio 2 #тут по аналогии с предидущим правилом
tc class add dev ppp0 parent 2:1 classid 2:30 htb rate 64kbit prio 3 #тут по аналогии с предидущим правилом
tc class add dev ppp0 parent 2:1 classid 2:40 htb rate 126kbit prio 4 #тут по аналогии с предидущим правилом последний подкласс с приоритетом 4 (самый низкий приоритет) он у нас будет использовать по умолчанию, для всего трафика, который мы не отправим в другие подклассы
#дальше каждому подклассу присваиваем дисциплину обработки трафика
tc qdisc add dev ppp0 parent 2:10 handle 10: sfq perturb 10 #sfq как написано в мане просто гарантирует что одно соединение (flow) не будет полностью забивать канал, тоесть по таймауту канал будет отдаваться следующему, рекомендуемое значение 10
tc qdisc add dev ppp0 parent 2:20 handle 20: sfq perturb 10
tc qdisc add dev ppp0 parent 2:30 handle 30: sfq perturb 10
tc qdisc add dev ppp0 parent 2:40 handle 40: tbf rate 126kbit burst 12kbit latency 150ms #tbf позволяет задать таймаут доставки пакета, в подклассе по умолчанию где будет намешана куча трафика включая закачки и p2p лучше поставить этот таймаут пониже, конечно это создаст некоторые потери пакетов при использование подклассов с более высоким приоритетом, btust - размер буфера, для 10мегабит рекомендуют 10 килобайт, методом тыка я нашел для себя подходящее значение для 128кбит ).
#далее определяем какой трафик у нас пойдет в подклассы с более высоким приоритетом.
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 22 0xffff flowid 2:10 #даем трафику на 22 порт максимальный приоритет
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 53 0xffff flowid 2:10
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 443 0xffff flowid 2:20
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 873 0xffff flowid 2:10
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 80 0xffff flowid 2:20
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 21 0xffff flowid 2:20
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 5190 0xffff flowid 2:30
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 5269 0xffff flowid 2:10
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 9418 0xffff flowid 2:10
tc filter add dev ppp0 parent 2: protocol ip u32 match ip dport 3690 0xffff flowid 2:10
tc filter add dev ppp0 parent 2: protocol ip u32 match ip src 192.168.0.3 flowid 2:30 #отправляем трафик с адреса 192.168.0.3 в подкласс 2:30 с приоритетом 3, и скоростью 64кбита

теперь можно нагружать канал по максимуму, и в это время более менее комфортно работать с web, jabber, icq, конечно эти правила можно оптимизировать и сделать более грамотно, но для начала это гораздо лучше чем без них ).