Jump to content
Калькуляторы

Шейпер на РРР-интерфейс. Сомнения

Извиняюсь, если тема избита и неинтересна.

Решил написать шейпер для терминатора. Естественно первым делом пошел смотреть что используют другие - изобретать велосипед хлопотно.

Нашел скрипты от биллингов Abills и BGBilling. Вот смотрю на них и немного удивляюсь.

Скрипты совпадают на 100% (по крайней мере те, что нашел я). Оба биллинга от одной и той же конторы?

Сам скрипт тоже немного странный. Например кусок

/sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit burst 4k

/sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit burst 4k prio 1

/sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit burst 4k prio 2

Родительский класс и 2 подкласса имеют одинаковый rate, хотя по идее сумма подклассов должна быть ровна классу.

Еще одна строка

/sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

То, что она везде написана с ошибкой - полбеды. Я не понимаю зачем она вообще здесь - пустые ack пакеты в сторону клиента не особо улучшают комфортность его работы.

 

Вот прошу совета более опытных товарищей, стоит что-то брать за основу (и где ее брать) или лучше ваять все от начала и до конца самому?

 

Share this post


Link to post
Share on other sites

Шейпер самому под свои нужды. Следует понимать что вешая шейпер на ppp интерфейс, невозможно управлять QoS в общем канале, хотя это может быть возложено на другое железо.

Share this post


Link to post
Share on other sites

Пустые ack пакеты, обычно, в другую сторону приоритезируют :) http://www.benzedrine.cx/ackpri.html

 

Может здесь считают что перегрузка входящего канала абонента может влиять на его исходящую скорость?

 

Share this post


Link to post
Share on other sites

Для ограничения входящего трафика достаточно дисциплин tbf на виртуальных интерфейсах. Для исходящего нужна дисциплина htb и, в зависимости от задач, какой-то быстрый классификатор: flow или u32 с hashing filters. Приоритезацию различных типов трафика (ACK-пакетов и прочего) лучше делать на отдельной машине или не делать вообще.

Share this post


Link to post
Share on other sites

Мой упрощенный вариант:

 

cat /etc/ppp/ip-up
#!/bin/sh

# This script is run by pppd after the link is established.
# It executes all the scripts available in /etc/ppp/ip-up.d directory,
# with the following parameters:
# $1 = interface name (e.g. ppp0)
# $2 = tty device
# $3 = speed
# $4 = local IP address
# $5 = remote IP address
# $6 = ipparam (user specified parameter, see man pppd)

if [ -f /var/run/radattr.$1 ]; then
    SPEED=`/usr/bin/awk '/PPPD-Upstream-Speed-Limit/ {print $2}' /var/run/radattr.$1`
    FILTER=`/usr/bin/awk '/Filter-Id/ {print $2}' /var/run/radattr.$1`

    if [ "$SPEED" != "0" ]; then
        /sbin/tc qdisc add dev $1 root tbf rate ${SPEED}kbit burst 102400 latency 50
        /sbin/tc qdisc add dev $1 ingress handle ffff:
        /sbin/tc filter add dev $1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${SPEED}kbit burst 102400
    fi

    if [ "$FILTER" != "" ]; then
        /sbin/ipset -A ppp $5 >/dev/null 2>&1
    fi
fi

Edited by a0d75

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this