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?