LINUX.ORG.RU
ФорумAdmin

опять IMQ + TC


0

0

пробую реализовать такую схему:

это фрагмент скрипта ppp-up для pptp

$TC qdisc del dev $INTERFACE root
$TC qdisc add dev $INTERFACE root handle 1: htb default 1
$TC class add dev $INTERFACE parent 1: classid 1:1 htb prio 10 rate ${SPEED_1}kbit ceil ${SPEED_2}kbit burst 15k
$TC qdisc add dev $INTERFACE parent 1:1 handle 10: prio
$TC qdisc add dev $INTERFACE parent 10:1 handle 101 sfq
$TC qdisc add dev $INTERFACE parent 10:2 handle 102 sfq
$TC qdisc add dev $INTERFACE parent 10:3 handle 103 sfq

$TC filter add dev $INTERFACE parent 1: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action ipt -j MARK --set-mark $NET

в скрипте iptables

$IPTABLES -A POSTROUTING -t mangle -o ppp+ -j IMQ --todev 0

навешивание классов на imq0

ip link set dev imq0 up
tc qdisc add dev imq0 root handle 1: htb default 100
tc class add dev imq0 parent 1: classid 1:1 htb rate ${RATE_ALL}kbit burst 15k
tc class add dev imq0 parent 1:1 classid 1:100 htb prio 7 rate 128kbit ceil ${RATE_ALL}kbit burst 15k
tc qdisc add dev imq0 parent 1:100 handle 100: sfq perturb 10
tc class add dev imq0 parent 1:1 classid 1:5 htb prio 0 rate 128kbit ceil ${RATE_ALL}kbit burst 15k
tc qdisc add dev imq0 parent 1:5 handle 5: sfq
tc class add dev imq0 parent 1:1 classid 1:20 htb prio ${CLASS_20_PRIO} rate ${CLASS_20_MIN}kbit ceil ${CLASS_20_MAX}kbit burst 15k
tc class add dev imq0 parent 1:1 classid 1:30 htb prio ${CLASS_30_PRIO} rate ${CLASS_30_MIN}kbit ceil ${CLASS_30_MAX}kbit burst 15k
tc class add dev imq0 parent 1:1 classid 1:40 htb prio ${CLASS_40_PRIO} rate ${CLASS_40_MIN}kbit ceil ${CLASS_40_MAX}kbit burst 15k
tc class add dev imq0 parent 1:1 classid 1:50 htb prio ${CLASS_50_PRIO} rate ${CLASS_50_MIN}kbit ceil ${CLASS_50_MAX}kbit burst 15k
tc qdisc add dev imq0 parent 1:20 handle 20: tbf rate ${CLASS_20_MAX}kbit latency 50ms burst 1540
tc qdisc add dev imq0 parent 1:30 handle 30: tbf rate ${CLASS_30_MAX}kbit latency 50ms burst 1540
tc qdisc add dev imq0 parent 1:40 handle 40: tbf rate ${CLASS_40_MAX}kbit latency 50ms burst 1540
tc qdisc add dev imq0 parent 1:50 handle 50: tbf rate ${CLASS_50_MAX}kbit latency 50ms burst 1540
tc qdisc add dev imq0 parent 20:1 handle 200: prio
tc qdisc add dev imq0 parent 200:1 handle 201: sfq
tc qdisc add dev imq0 parent 200:2 handle 202: sfq
tc qdisc add dev imq0 parent 200:3 handle 203: sfq
tc qdisc add dev imq0 parent 30:1 handle 300: prio
tc qdisc add dev imq0 parent 300:1 handle 301: sfq
tc qdisc add dev imq0 parent 300:2 handle 302: sfq
tc qdisc add dev imq0 parent 300:3 handle 303: sfq
tc qdisc add dev imq0 parent 40:1 handle 400: prio
tc qdisc add dev imq0 parent 400:1 handle 401: sfq
tc qdisc add dev imq0 parent 400:2 handle 402: sfq
tc qdisc add dev imq0 parent 400:3 handle 403: sfq
tc qdisc add dev imq0 parent 50:1 handle 500: prio
tc qdisc add dev imq0 parent 500:1 handle 501: sfq
tc qdisc add dev imq0 parent 500:2 handle 502: sfq
tc qdisc add dev imq0 parent 500:3 handle 503: sfq

tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 3 fw flowid 1:20
tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 10 fw flowid 1:20
tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 5 fw flowid 1:30
tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 6 fw flowid 1:40
tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 9 fw flowid 1:40
tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 7 fw flowid 1:50
tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 8 fw flowid 1:50

в ресультате всего этого пакеты на imq0 попадают, но все идет на default (100) класс. Такое впечатление, что маркирование отрабатывает уже после $IPTABLES -A POSTROUTING -t mangle -o ppp+ -j IMQ --todev 0. В чем ошибка?

Вариант с маркированием пакетов через iptables работает, но при слете соединения остается правило. Номер маркера определяется тарифным планом клиента. Пакеты начинают маркироваться не тем маркером и клиент идет не в свою полосу. Приходится удалять правило руками. Согласитель, что для сервера доступа это мягко говоря не очень удобно.

пробовал использовать IFB. Все вроде бы прекрасно... до определенного времении. Через некоторое время (чем выше нагрузка, тем быстрее) система просто глухо виснет. Ядро 2.6.18. Шерстил разные форумы - понял так, что и в 2.6.21 эта проблема осталась, по этому решил вернуться к IMQ

pavel_ep
() автор топика

При подключении клиента вы задействуете скрипты pppd (млм pptpd?) для добавления нужных правил TC, почему бы не задействовать аналогичные скрипты при отключении клиента, и не удалять в нем правило маркировки с использованием IPTABLES, которое работает?

VitalkaDrug ★★
()
Ответ на: комментарий от VitalkaDrug

я в конце поста написал, что ppp-down не всегда отрабатывает, в следствие чего правила не всегда удаляются. Если бы все работало, то я бы не заводил эту карусель с маркированием через tc

pavel_ep
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.