LINUX.ORG.RU
решено ФорумAdmin

еще раз про шейпинг траффика, посмотрите скрипт пожалуйста


0

0

есть шлюз поднимающий (ADSL) интернет соединение до провайдера через pppoe (eth1), в внутреннюю сеть выходит eth0, интерфейс в инет - ppp0 , из wondershaper, еще каких-то скриптов и примеров на lartc сделала вот такой вот "франкенштейновский скрипт" (ниже), есть ли в нем ляпы, можно ли его существенно улучшить (как, чем?)
и работает ли вообще вторая его часть (классификация траффика) ?


#!/bin/sh
# Эта часть скрипта взята из wondershaper
DEV=ppp0
DOWNLINK=7200
UPLINK=740
# clean existing down- and uplink qdiscs, hide errors
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null

# install root CBQ
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit

# shape everything at $UPLINK speed - this prevents huge queues in your
# DSL modem which destroy latency
tc class add dev $DEV parent 1: classid 1:1 cbq rate ${UPLINK}kbit allot 1500 prio 5 bounded isolated

# классы приоритетов
tc class add dev $DEV parent 1:1 classid 1:10 cbq rate ${UPLINK}kbit allot 1600 prio 1 avpkt 1000
tc class add dev $DEV parent 1:1 classid 1:20 cbq rate $[9*$UPLINK/10]kbit allot 1600 prio 2 avpkt 1000
tc class add dev $DEV parent 1:1 classid 1:30 cbq rate $[8*$UPLINK/10]kbit allot 1600 prio 2 avpkt 1000
tc class add dev $DEV parent 1:1 classid 1:40 cbq rate $[7*$UPLINK/10]kbit allot 1600 prio 2 avpkt 1000
tc class add dev $DEV parent 1:1 classid 1:50 cbq rate $[6*$UPLINK/10]kbit allot 1600 prio 2 avpkt 1000
tc class add dev $DEV parent 1:1 classid 1:60 cbq rate $[5*$UPLINK/10]kbit allot 1600 prio 2 avpkt 1000

# all get Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev $DEV parent 1:40 handle 40: sfq perturb 10
tc qdisc add dev $DEV parent 1:50 handle 50: sfq perturb 10
tc qdisc add dev $DEV parent 1:60 handle 60: sfq perturb 10

########## downlink #############
# slow downloads down to somewhat less than the real speed to prevent
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
#
# attach ingress policer:
tc qdisc add dev $DEV handle ffff: ingress
# filter *everything* to it (0.0.0.0/0), drop everything that's
# coming in too fast:
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1


вторая часть (из примеров скриптов lartc или откуда-то еще)
$1 = ppp0
Классификация траффика

# служебные пакеты, самый высокий приоритет
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --syn -m length --length 40:68 -j CLASSIFY --set-class 1:10
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j CLASSIFY --set-class 1:10
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --tcp-flags ALL ACK -m length --length 40:100 -j CLASSIFY --set-class 1:10
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --tcp-flags ALL RST -j CLASSIFY --set-class 1:10
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --tcp-flags ALL ACK,RST -j CLASSIFY --set-class 1:10
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --tcp-flags ALL ACK,FIN -j CLASSIFY --set-class 1:10

# траффик высокого приоритета
#interactive ssh
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --sport ssh -m length --length 40:100 -j CLASSIFY --set-class 1:10
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --dport ssh -m length --length 40:100 -j CLASSIFY --set-class 1:10
# dns
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p udp --dport domain -j CLASSIFY --set-class 1:10

# тоже высокий приоритет
# исходящий траффик c порта 8085
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --sport 8085 -j CLASSIFY --set-class 1:20
# SVN входящий
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --dport 3690 -j CLASSIFY --set-class 1:20
# GIT входящий
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --dport 9418 -j CLASSIFY --set-class 1:20

# NORMAL PRI
# исходящий траффик на веб сервера и почту
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp -m multiport --dport http,pop3,imap,https -j CLASSIFY --set-class 1:30
# scp
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --sport ssh -m length --length 101: -j CLASSIFY --set-class 1:30
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --dport ssh -m length --length 101: -j CLASSIFY --set-class 1:30

# LOWER PRI
# icmp
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p icmp -m length --length 28:1500 -m limit --limit 2/s --limit-burst 5 -j CLASSIFY --set-class 1:40
# udp
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p udp -j CLASSIFY --set-class 1:40

# LOWEST PRI
# исходящий траффик с локального веб сервера имеет самый низкий приоритет
/sbin/iptables -t mangle -A POSTROUTING -o $1 -p tcp --sport 80 -j CLASSIFY --set-class 1:60

★★★★★
Ответ на: комментарий от VladimirMalyk

обязательная программа -
----------------------------------------
защита линии от переполнения входящим траффиком (у провайдера стоит шейпер который формирует очередь пакетов 1024 килобайт/c , физическая емкость линии 900 килобайт/c) при полной утилизации линии может падать даже PPPoE сессия

pppd[12584]: No response to 3 echo-requests
pppd[12584]: Serial link appears to be disconnected


желательная программа
---------------------------------------

заставить все закачки по возможности поровну делить между собой скорость


дополнительная программа
------------------------------------------

определить классы приоритетов траффика
самый высокий (контрольные пакеты) , высокий (ssh исходящий-входящий, траффик с локального порта 8085), нормальный ( исходящий траффик на веб сервера, pop3, imap ), пониженный (все остальное, udp, icmp),
остаточный (исходящий траффик с локального веб сервера)

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

>через pppoe (eth1) >физическая емкость линии 900 килобайт/c

Ethernet на 7,3 Мбит/c ? Входящий трафик у вас будет рубиться, "police rate" работает, но закачки полосу поровну делить не будут.

С классификацией пакетов, ИМХО, излишне навороченно, делали бы 3 класса и хватит. При этом, в TCP котрольный трафик может достигать 10% от полезного и когда будет закачивать себе что-то большое на DOWNLINK скорости, в исходящей вы получить UPLINK скорость и под остальное полосы не останется.

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

спасибо за ответ.

>Ethernet на 7,3 Мбит/c

adsl профиль такой, причем страдает больше не восходящий трафик, а нисходящий,
там тарифная скорость выше чем скорость линии , при этом у провайдера стоит формирующий очередь пакетов шейпер, в итоге линия просто заваливается нисходящим траффиком, можно банально wget'ом, лишь бы сервер отдавал быстро, в течении 2 минут падает pppoe по таймауту lcp, не говоря уже о том что ни dns запросы , ни другие соединения не проходят.

>закачки полосу поровну делить не будут


можно сделать чтобы было более менее поровну? хотя кажется и с тем что есть сильных перекосов особенно нет.

>С классификацией пакетов, ИМХО, излишне навороченно, делали бы 3 класса

я тоже так думаю что многовато, штуки 4 оставлю в итоге

>закачивать себе что-то большое на DOWNLINK скорости, в исходящей вы получить UPLINK скорость

именно поэтому хочется отдать приоритет на этот самый контрольный траффик
+ порт 8085
а остальным - что уж останется, если совсем ничего - не критично )

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

>хотя кажется и с тем что есть сильных перекосов особенно нет.

Если результат устраивает, то и не надо что-то менять. Конечно, нужно написать, что полисёр это не правильно, что надо использовать IFB, но ИМХО, если у провайдера криво настроенная рубка пакетов, то особо ничего не сделаешь.

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

хорошо, значит так как есть и оставлю, с мелкими изменениями в виде выброса чрезмерного числа классов приоритета

спасибо

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