понедельник, 28 апреля 2014 г.

Best short ingress shaper for linux by using htb and iptables

Здесь пример только для входящего трафика. Исходящий жмется также.
#cat /etc/init.d/shaper.sh
eth0  - local net interface


case "$1" in
start)
    echo -n "Starting shaper. . ."
    tc qdisc  add dev eth0 root handle 1: htb default 30 r2q 1
    tc class  add dev eth0 parent 1: classid 1:1 htb rate 100mbit

#самый медленный класс, с приоритетом 1 - потому как тормознуть наглый хост надо палюбасу :)
    tc class  add dev eth0 parent 1:1 classid 1:30 htb rate 4mbit ceil 10mbit  burst 200k prio 1
    tc qdisc  add dev eth0 parent 1:30 sfq perturb 10
    iptables -t mangle -A POSTROUTING -o eth0 -d 192.168.1.66 -j CLASSIFY --set-class 1:30
#туда же весь торрент трафик
    iptables -t mangle -A POSTROUTING -o eth0 -p tcp -m multiport --sport 4661,4662,4672,4665,4711,6881:6889,6881:6999 -j CLASSIFY --set-class 1:30
    iptables -t mangle -A POSTROUTING -o eth0 -p udp -m multiport --sport 4661,4662,4672,4665,4711,6881:6889,6881:6999 -j CLASSIFY --set-class 1:30

#более добрая политика для внутряки через прокси и остальное
    tc class  add dev eth0 parent 1:1 classid 1:20 htb rate 10mbit ceil 30mbit  burst 200k prio 2
    tc qdisc  add dev eth0 parent 1:20 sfq perturb 10
    iptables -t mangle -A POSTROUTING -o eth0 -p tcp -m multiport --sport 3128,80,443,25,110,495,995,465,222,2222 -j CLASSIFY --set-class 1:20

#совсем добрый класс для dns/ssh, мелких пакетов и директора))
    tc class  add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil 100mbit burst 200k prio 3
    tc qdisc  add dev eth0 parent 1:10 sfq perturb 10
    iptables -t mangle -A POSTROUTING -o eth0 -p tcp -m multiport --sport 53,123,22 -j CLASSIFY --set-class 1:10
    iptables -t mangle -A POSTROUTING -o eth0 -p tcp --syn -m length --length 40:68 -j CLASSIFY --set-class 1:10
    iptables -t mangle -A POSTROUTING -o eth0 -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j CLASSIFY --set-class 1:10
    iptables -t mangle -A POSTROUTING -o eth0 -d 192.168.0.66 -j CLASSIFY --set-class 1:10

    echo "OK"
;;
#окончание скрипта
stop)
    echo -n "Stopping shaper. . ."
    iptables -t mangle -F
    tc qdisc del dev eth0 root
    echo "OK"
;;

status)
    if [ "$2" = "" ]; then
    $0; exit;fi
    echo "============== QDISC STATUS =================="
    tc -s -d qdisc show dev $2
    echo "============== CLASS STATUS =================="
    tc -s -d class show dev $2
    echo "----------------------------------------------"
;;

restart)
$0 stop && $0 start || exit 1
;;

*)
echo "Usage: `basename $0` {start|stop|restart|status eth0/eth1}"
exit 1
;;

esac

Комментариев нет:

Отправить комментарий