Re: Шейпер, торрент и загрузка канала.
Здравствуйте.
>Имею в наличии следующее
>1) подключение ADSL на скорости 256/128
>2) небольшую домашнюю сеть на 4 комп.
>3) шлюз на Ленни, чтобы компы в инет бегали.
>
>модем настроен в режиме бриджа. на шлюзе с помощью PPPoE поднято
>интерфейс ppp0, все это бегает через eth0 и более туде ничего не
>подключено. Интефейс wlan0 смотрит в домашнюю сеть (WiFi, здесь все
>работает). настроен маскарадинг, интернет есть на всех компах.
>
>также на один комп во внутренней сети DNAT'ом проброшен TCP-порт для
>торрет-клиента. торрен также работает и на прием и напередачу. Но тут
>возникает проблема: как только запускаю его (Торрент) все остальное
>умирает. даже пинги не все идут. правда nload на шлюзе показывает
>среднюю загрузку на ppp0 ~ 240kbit на прием и ~ 110 на передачу.
>
>начитавшись LARTC попытался сделать следующее
--------------[поскипано]-----------------------
>положено в /etc/ppp/ip-up.d/shaper и вистовлено права 755
>
>маркирую пакеты следующим образом
>
--------------[поскипано]-----------------------
Была похожая проблема. Сервер (он же шлюз), на нем Verlihub (DC++ сервер) и microdc2 (DC++ клиент). Шейпинга в Microdc2 нет, поэтому пришлось читать LARTC. После прочтения родился скрипт (правил что-то взятое там). Шейпит исходящий DC++ трафик с внешнего интерфейса (в моем случае это все, что уходит на 172.16.0.0/12), оставляя возможность нормального серфинга клиентам в локалке и управления сервером по ssh. Причем, маркировать пакеты через iptables не пришлось.
#!/bin/bash
#http://www.debian-administration.org/users/kapal/weblog/1
#http://lartc.org/howto/lartc.qdisc.filters.html
#for module in sch_cbq sch_tbf sch_sfq sch_prio cls_u32; do
for module in sch_htb sch_sfq sch_prio cls_u32; do
if ! modprobe $module; then
echo "**TC_SHAPER: could not load module $module"
exit
fi
done
DEVICE=eth0
RATE=640kbit
SHARE1=100kbit
SHARE2=200kbit
SHARE3=300kbit
SHARE4=400kbit
# Buckets reflect IP last Octet for now
BSSH=22
BMICRODC=411
BINTERNAL=250
BDEFAULT=255
start (){
# Create QDISC using HTB
tc qdisc add dev $DEVICE root handle 1: htb default $BDEFAULT
tc class add dev $DEVICE parent 1: classid 1:1 htb rate $RATE ceil $RATE
# Create Buckets
tc class add dev $DEVICE parent 1:1 classid 1:$BSSH htb rate $SHARE2 ceil $RATE
tc class add dev $DEVICE parent 1:1 classid 1:$BMICRODC htb rate $SHARE3 ceil $SHARE4
#tc class add dev $DEVICE parent 1:1 classid 1:$BDEFAULT htb rate $SHARE1 ceil $RATE
# Each IP address is put in a bucket.....
tc filter add dev $DEVICE protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:$BSSH
tc filter add dev $DEVICE protocol ip parent 1:0 prio 5 u32 match ip dst 172.16.0.0/12 flowid 1:$BMICRODC
# Repeat as needed changing IP and the Bucket name
# Make the dross play nicely using SFQ
#tc qdisc add dev $DEVICE parent 1:$BDEFAULT handle 10: sfq perturb 10
}
stop()
{
# Delete the root of the tree to get a pfifo_fast back
tc qdisc del dev $DEVICE root
}
status()
{
echo ==== QDISC STATS =====
tc -s qdisc
echo ==== CLASS STATS =====
tc -s class show dev $DEVICE
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
Шейпить входящий DC трафик не пришлось, бо сервер ничего не качает, а только раздает.
В итоге на канале 640кбит/с исходящий трафик в сторону качающих по DC урезан до 400кбит/с. На всякий случай, для управления сервером по ssh выделена полоса не менее 200кбит/с.
В Вашем случае в приведенном коде я не вижу фильтра для 1:20 (а также, маркировки пакетов в iptables). А 1:10 использует всю ширину канала.
Опять же,
tc class add dev $PPP_IFACE parent 1:1 classid 1:20 htb rate 1kbit ceil $(UPLINK) kbit burst 50b prio 3
ИМХО лучше заменить на
tc class add dev $PPP_IFACE parent 1:1 classid 1:20 htb rate 1kbit ceil $ [8 * $UPLINK/10] kbit burst 50b prio 3
И добавить правильный фильтр.
До свидания.
Reply to: