[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

traffic shaping



Здравствуйте

для тестирования понадобилость 64Kb ограничить входящий/исходящий траффик для определённого порта. Решил начать с ssh. В аттачменте - скрипт что я переделал из какого-то найденного в гугле.

К сожалению этот скрипт почему-то ограничивает только исходящий траффик - при копировании scp с этой машины всё хорошо - порядка 8-10KB, но при копировании на эту машину - траффик ограничен 500KB, (и я думаю это ограничение возникает из-за ограничения исходящего).

Что я делаю не так?

kernel-2.4.20

Вот результирующая таблица iptables и tc:

eth0:
qdisc cbq 11: rate 100Mbit (bounded,isolated) prio no-transmit
class cbq 11: root rate 100Mbit (bounded,isolated) prio no-transmit
class cbq 11:1 parent 11: rate 64Kbit (bounded) prio 1
filter parent 11: protocol ip pref 49152 fw
filter parent 11: protocol ip pref 49152 fw handle 0x4 classid 11:1

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK tcp -- anywhere anywhere tcp spt:ssh MARK set 0x4 MARK tcp -- anywhere anywhere tcp dpt:ssh MARK set 0x4

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
MARK tcp -- anywhere anywhere tcp spt:ssh MARK set 0x4 MARK tcp -- anywhere anywhere tcp dpt:ssh MARK set 0x4

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
MARK tcp -- anywhere anywhere tcp spt:ssh MARK set 0x4 MARK tcp -- anywhere anywhere tcp dpt:ssh MARK set 0x4

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MARK tcp -- anywhere anywhere tcp spt:ssh MARK set 0x4 MARK tcp -- anywhere anywhere tcp dpt:ssh MARK set 0x4


Спасибо
--
Best regards, Sergey Spiridonov
#!/bin/bash
#
# All Rates are in Kbits, so in order to gets Bytes divide by 8
# e.g. 25Kbps == 3.125KB/s
#
TC=/sbin/tc
IPTABLES=/sbin/iptables
PORT=22
DNLD=64Kbit 		# DOWNLOAD Limit
DWEIGHT=6Kbit		# DOWNLOAD Weight Factor ~ 1/10 of DOWNLOAD Limit
#UPLD=25KBit		# UPLOAD Limit
#UWEIGHT=2Kbit		# UPLOAD Weight Factor


# CHAIN=("POSTROUTING" "PREROUTING" "INPUT" "OUTPUT")
CHAIN=("POSTROUTING" "PREROUTING" "INPUT" "OUTPUT")

# PROTOCOL=("tcp" "udp")
PROTOCOL=("tcp")

# DIRECTION=("--sport" "--dport")
DIRECTION=("--sport" "--dport")

# PORT=("22")
PORT=("22")


tc_start() {

	$TC qdisc add dev eth0 root handle 11: cbq bandwidth 100Mbit avpkt 1000 mpu 64
	$TC class add dev eth0 parent 11:0 classid 11:1 cbq rate $DNLD weight $DWEIGHT allot 1514 prio 1 avpkt 1000 bounded
	$TC filter add dev eth0 parent 11:0 protocol ip handle 4 fw flowid 11:1

	for chain in ${CHAIN[@]}
	do
	  for protocol in ${PROTOCOL[@]}
	  do
	    for direction in ${DIRECTION[@]} 
	    do
	       for port in ${PORT[@]}
	       do
	         ${IPTABLES} -t mangle -A ${chain} -p ${protocol} ${direction} ${port} -j MARK --set-mark 4
	       done
	    done
	  done
	done

#	$TC qdisc add dev eth1 root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu 64
#	$TC class add dev eth1 parent 10:0 classid 10:1 cbq rate $UPLD weight $UWEIGHT allot 1514 prio 1 avpkt 1000 bounded
#	$TC filter add dev eth1 parent 10:0 protocol ip handle 3 fw flowid 10:1

}

tc_stop() {

	$TC qdisc del dev eth0 root

        for chain in ${CHAIN[@]}
        do
          for protocol in ${PROTOCOL[@]}
          do
            for direction in ${DIRECTION[@]}
            do
               for port in ${PORT[@]}
               do
                 ${IPTABLES} -t mangle -D ${chain} -p ${protocol} ${direction} ${port} -j MARK --set-mark 4
               done
            done
          done
        done


#	$TC qdisc del dev eth1 root

}

tc_restart() {

	tc_stop
	sleep 1
	tc_start
}

tc_show() {

	echo ""
	echo "eth0:"
	$TC qdisc show dev eth0
	$TC class show dev eth0
	$TC filter show dev eth0
	echo ""
        $IPTABLES -t mangle --list

#	echo "eth1:"
#	$TC qdisc show dev eth1
#	$TC class show dev eth1
#	$TC filter show dev eth1
#	echo ""

}

case "$1" in

 start)

	echo -n "Starting bandwidth shaping: "
	tc_start
	echo "done"
	;;

 stop)

	echo -n "Stopping bandwidth shaping: "
	tc_stop
	echo "done"
	;;

 restart)

	echo -n "Restarting bandwidth shaping: "
	tc_restart
	echo "done"
	;;

 show)

	tc_show
	;;

 *)

	echo "Usage: /etc/init.d/tc.sh {start|stop|restart|show}"
	;;

esac

exit 0


Reply to: