Galera,

Eu estou usando o script do Scorpion e me deparei com uma situação sinistra que eu não havia pensado que poderia existir. O que acontece é que quando o cliente conecta é gerada uma regra de iptables para marcar os pacotes dele e uma regra de controle de velocidade.

Quando o script baixa ele deveria apagar essas regras, mas não está fazendo isso corretamente. Veja o script de subida:

Código :
#!/bin/bash
#
#---
# Variaveis
#---
IPTABLES="/usr/local/sbin/iptables"
TC="/sbin/tc"
 
interface=$1
remoteIP=$5
download=`grep Download /var/run/radattr.$interface | awk '{ print $2; }'`
upload=`grep Upload /var/run/radattr.$interface | awk '{ print $2; }'`
cliente=`grep Cliente /var/run/radattr.$interface | awk '{ print $2; }'`
contamark=`echo $interface | cut -c 4-99`
mark=`expr $contamark + 500`
 
echo "$download" > /tmp/$interface.download
echo "$upload" > /tmp/$interface.upload
echo "$cliente" > /tmp/$interface.cliente
 
if [ $download == ]
then
download="200"
upload="100"
fi
 
#----
# Bloqueio de portas para clientes do grupo clientes
#----
#if [ $cliente == "cliente" ]
#then
#$IPTABLES -I FORWARD -d $remoteIP -p tcp --dport 1:1024 -j DROP
#$IPTABLES -I FORWARD -d $remoteIP -p tcp --dport 6000:9000 -j DROP
#fi
 
$TC qdisc add dev $interface root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
$TC class add dev $interface parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$download"Kbit weight `expr $download / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
$TC qdisc add dev $interface parent 1:$mark handle $mark sfq perturb 10
$TC filter add dev $interface parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark
$IPTABLES -t mangle -A POSTROUTING -d $remoteIP -j MARK --set-mark $mark
 
$TC qdisc add dev eth0 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
$TC class add dev eth0 parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$upload"Kbit weight `expr $upload / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
$TC qdisc add dev eth0 parent 1:$mark handle $mark sfq perturb 10
$TC filter add dev eth0 parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark
$IPTABLES -t mangle -A FORWARD -s $remoteIP -j MARK --set-mark $mark
 
echo "PPP started at $(date):
interface = $interface
Remote IP = $remoteIP
download = $download
upload = $upload
mark = $mark
" >/tmp/$interface

E aqui o script de descida:

Código :
#!/bin/bash
#
#---
# Variaveis
#---
IPTABLES="/usr/local/sbin/iptables"
TC="/sbin/tc"
 
interface=$1
remoteIP=$5
download=`cat /tmp/$interface.download`
upload=`cat /tmp/$interface.upload`
cliente=`cat /tmp/$interface.cliente`
 
contamark=`echo $interface | cut -c 4-99`
mark=`expr $contamark + 500`
 
if [ $download == ]
then
download="200"
upload="100"
fi
 
#----
# Bloqueio de portas para clientes do grupo clientes
#----
#if [ $cliente == "cliente" ]
#then
#$IPTABLES -D FORWARD -d $remoteIP -p tcp --dport 1:1024 -j DROP
#$IPTABLES -D FORWARD -d $remoteIP -p tcp --dport 6000:9000 -j DROP
#fi
 
$TC qdisc del dev $interface root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
$TC class del dev $interface parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$download"Kbit weight `expr $download / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
$TC qdisc del dev $interface parent 1:$mark handle $mark sfq perturb 10
$TC filter del dev $interface parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark
$IPTABLES -t mangle -D POSTROUTING -d $remoteIP -j MARK --set-mark $mark
 
$TC qdisc del dev eth0 parent 1:$mark handle $mark sfq perturb 10
$TC filter del dev eth0 parent 1:0 protocol ip prio 200 handle $mark fw classid 1:$mark
$IPTABLES -t mangle -D FORWARD -s $remoteIP -j MARK --set-mark $mark
$TC class del dev eth0 parent 1: classid 1:$mark cbq bandwidth 100Mbit rate "$upload"Kbit weight `expr $upload / 10`Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
 
rm -rf /tmp/$interface*

As regras de iptables ficam sobrepostas e a primeira regra lida é a que vale, consequentemente ele joga o MARK dentro do controle de trafego errado (que também não foi apagado) e dá outra velocidade para o cliente.

O que posso fazer? Alguem ja mudou esse script para funcionar corretamente?