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

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: