<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Шейпер создаёт много правил в iptables как это сократить?]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=24833&amp;type=atom" />
	<updated>2012-10-23T07:36:32Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=24833</id>
		<entry>
			<title type="html"><![CDATA[Шейпер создаёт много правил в iptables как это сократить?]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=305374#p305374" />
			<content type="html"><![CDATA[<p>У меня такая проблема, есть скрипт шейпера который граничил 300чел. теперь людей стало около 1000 и скрипт засыпает iptables правилами (около 1500!) с которыми он не справляется, а по вечерам загружает процессор на 100%... Помогите как можно сократить правила или оптимизировать?<br />Сервер: Проц. - Xeon 1220, ОЗУ - 8гб<br />Скрипт:</p><div class="codebox"><pre><code>#!/bin/bash
USER_IFACE=&#039;eth1.2 eth1.4 eth1.5 eth1.6 eth1.7 eth1.8 eth1.9&#039;
EXT_IFACE=&#039;eth0&#039;
CONF=&quot;/usr/conf&quot;
DATA=&#039;/usr/conf/unlimit.dat&#039;
UFLAG=&#039;/usr/conf/unlimit.flg&#039;
TCBIN=&#039;/sbin/tc&#039;
IPT=&#039;/usr/local/sbin/iptables&#039;
#
stopp () {
    $IPT -t mangle -F
    for i in $USER_IFACE $EXT_IFACE; do
        ${TCBIN} qdisc del dev $i root &gt;/dev/null 2&gt;&amp;1
    done
}
init () {
    stopp
    for i in $USER_IFACE $EXT_IFACE; do
        ${TCBIN} qdisc add dev $i root handle 1: htb
    done
}
startt () {
    init
    n=3
    cat $DATA | while read ip rate;do
    USER_IFACE=`/sbin/ip -o route get $ip | sed &#039;s/.*dev \(\S*\).*/\1/&#039;`
    ${TCBIN} class add dev $EXT_IFACE parent 1: classid 1:$n htb rate $rate ceil $rate
    ${TCBIN} filter add dev $EXT_IFACE protocol ip parent 1: prio 0 handle $n fw classid 1:$n
    ${TCBIN} qdisc add dev $EXT_IFACE parent 1:$n handle $n: sfq perturb 10
    #$IPT -t mangle -A FORWARD -m set --match-set src_shaper src -s $ip/32 -j MARK --set-mark $n
    $IPT -t mangle -A FORWARD -s $ip/32 -j MARK --set-mark $n
    let n++                            
    ${TCBIN} class add dev $USER_IFACE parent 1: classid 1:$n htb rate $rate ceil $rate
    ${TCBIN} filter add dev $USER_IFACE protocol ip parent 1: prio 0  handle $n fw classid 1:$n
    ${TCBIN} qdisc add dev $USER_IFACE parent 1:$n handle $n: sfq perturb 10
    #$IPT -t mangle -A FORWARD -m set --match-set dst_shaper dst -d $ip/32 -j MARK --set-mark $n
    $IPT -t mangle -A FORWARD -d $ip/32 -j MARK --set-mark $n
    let n++
    done
    if [ -f ${UFLAG} ]; then
         /bin/rm ${UFLAG}
    fi
}
checkk () {
    /usr/bin/md5sum -c $CONF/unlimit.dat.md5 &gt; /dev/null 2&gt;&amp;1
    if [ $? = 0 ]
    then
    echo `date`\ Список\ не\ изменился\ шейпер\ не\ запускаеться... &gt;&gt; /var/log/messages
    else
    echo `date`\ Список\ изменился\ шейпер\ запускаеться... &gt;&gt; /var/log/messages
    /usr/bin/md5sum /usr/local/accnt/conf/unlimit.dat &gt; /usr/local/accnt/conf/unlimit.dat.md5
    startt
    fi
}
showw () {
    for i in $USER_IFACE $EXT_IFACE; do
        echo --== $i ==-- --== $i ==-- --== $i ==-- --== $i ==--
        ${TCBIN} qdisc show dev $i
        echo =Classes= =Classes= =Classes= =Classes=
        ${TCBIN} class show dev $i
        echo =Filters= =Filters= =Filters= =Filters=
        ${TCBIN} filter show dev $i
    done
}
case $1 in
        start)
                startt
        ;;
        check)
                checkk
        ;;
        stop)
                stopp
        ;;
        show)
                showw
        ;;
        *)
          echo &quot;Usage: {start|stop|show|check}&quot;
          exit 1
esac</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DECAL]]></name>
				<uri>https://linuxforum.ru/profile.php?id=7482</uri>
			</author>
			<updated>2012-10-23T07:36:32Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=305374#p305374</id>
		</entry>
</feed>
