[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: трафик-шейпер (?)



10.07.10 01:12, Nicholas написав(ла):
On 05.07.2010 11:06, Alex Kicelew wrote:
Есть ip-телефония, которая время от времени (не всегда) затыкается,

Конечно есть множество gui, но зная как работает основа и gui
становиться понятнее.

Вот простой пример конфига для tc (шейпера):

#!/bin/bash
#создаем для интерфейса "wlan0" root "1:" и шейпер (дисциплину) htb, с
дефолтным потоком (руковом) 9991
tc qdisc add dev wlan0 root handle 1: htb default 9991

#создаем основной "рукав" 9999 также с htb и указываем общую ширину канала
tc class add dev wlan0 parent 1: classid 1:9999 htb rate 1mbps burst 150k

#создаем дефолтный "подрукав" 9991 и с помощью htb даем полосу для
трафика не попадающего ни под одно правило
#(как видите дефолтный 1:9991 у нас вытекает из основного 1:9999)
tc class add dev wlan0 parent 1:9999 classid 1:9991 htb rate 64kbps ceil
128kbps burst 150k


#для "подрукава" 9991 определим оконечную дисциплину sqf
tc qdisc add dev wlan0 parent 1:9991 handle 9991: sfq perturb 10
#..............................................................................................................

#теперь создадим уже "нормальный" подрукав, например "22" и определим
ему ширину с помощью htb (rate - желаемая, ceil - максимальная, burst -
"точность")
tc class add dev wlan0 parent 1:9999 classid 1:22 htb rate 64kbps ceil
128kbps burst 15k

#для "подрукава" 22 определим оконечную дисциплину sqf
#(оконечная дисциплина sqf - рекомендация ведущих линуксоводов)
tc qdisc add dev wlan0 parent 1:22 handle 22: sfq perturb 10


#Теперь самое интересное - создадим фильтры по которым будем забирать
#нужный трафик из дефолтного в свежесозданный 22-ой.
tc filter add dev wlan0 parent 1: protocol ip prio 1 u32 match ip dport
22 0xffff flowid 1:22
tc filter add dev wlan0 parent 1: protocol ip prio 1 u32 match ip tos
0x10 0xff flowid 1:22

#(приведенный пример - не самый лучший - проще фильтровать по "dst ip" и
порту, без 0xff...)

Все.


PS
И рукавов, и фильтров для них можно насоздавать множество.
Фильтровать можно и по ip и по портам и по меткам - примеры легко гуглятся.

http://www.opennet.ru/docs/RUS/LARTC/

tc - это просто, проще чем с gui разбираться.

Если есть желание, можно использовать плагины для iptables, что бы
давать метки, например, p2p или скайпу и, вроде бы, эти метки увидит tc.

Шейпится только исходящий трафик:
Для сервера-посредника - в любом случае любой трафик в какой-то момент
является исходящим.
Если нельзя, но очень хочется, то можно шейпить и входящий трафик (есть
спец дисциплина), но смысла в этом нет никогого - трафик уже пришел, все
что вы можете сделать - запросить его еще раз, загрузив канал еще
больше. Желание шейпить входящий трафик обычно проходит после прочтения
документации.

то-же LARTC говорит что можно шейпить и входящий трафик. особенно TCP. Если "потерять" некоторое количество пакетов в TCP-соединении то отправляющая сторона подумает что линия перегружена и сбавит скорость. Но вообщем-то да, потерянные пакеты будут повторно посланы, но уже на меньшей скорости и это никак не влияет на UDP трафик....

А еще входящий трафик, таже если он не транзитный можна сделать исходщим, с помощью псевдоустройства imq и шейпить егу уже как захочется. Но для этого надо патчить ядро и iptabels. Врочем для того чтоб шейпить p2p и скайп его тоже надо патчить.....




Посмотреть правила:
#!/bin/bash.
tc -s -d qdisc show dev wlan0
tc -s -d class show dev wlan0
tc -s -d filter show dev wlan0

Удалить:
#!/bin/bash.
tc qdisc del dev wlan0 root



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


Reply to: