[GTER] Limitar Upload com PF+HFSC

Christopher Giese - iRapida chris at irapida.com.br
Thu Apr 6 14:59:19 -03 2006


Bom.... nao vou entrar em meritos linux/bsd... qdisk/altq (pq nao tem 
nem como comparar ....)

vou montar um exemplo bem simples para demonstrar como controlar o seu 
problema:

Veja bem que aqui apenas peguei um caso meu.... e dei uma recordada para 
+/- demonstrar como controlar o IN (ou seja.... estamos controlando na 
verdade o OUT.... porem mostrando que o IN da placa interna eh para ser 
contabilizado no OUT da placa externa)

###############################
#/etc/pf.conf

# VARIAVEIS DE AMBIENTE
ext_if  = "fxp1"
int_if  = "fxp0"
int_net = "192.168.3.0/24"
ext_net = "172.16.3.0/24"
ip_nat = "200.200.200.200"

# Opcoes: melhora o comportamento do pf, os valores atuais sao os padroes.
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
set loginterface none
set optimization normal
set block-policy drop
set require-order yes

# Normalizaçao: remonta fragmentos e resolve ou reduz ambiguidades de 
trafego.
scrub in all

#########################################################################################
# FILAS

# UPLOAD
altq on $ext_if hfsc bandwidth 102400Kb queue { qredeout, qpadraoout }
       
        # Rede Interna
        queue qredeout bandwidth 2048Kb hfsc (linkshare 2048Kb, 
upperlimit 2048Kb) { qtsout, qimpressaoout, qinternetout }
                queue qtsout bandwidth 1400Kb hfsc (realtime 1400Kb, red)
                queue qimpressaoout bandwidth 128Kb hfsc (realtime 
128Kb, red)
                queue qinternetout bandwidth 512Kb hfsc (realtime 512Kb, 
red)

        # Padrao
        queue qpadraoout bandwidth 1Kb hfsc (upperlimit 1Kb,default)


# DOWNLOAD
altq on $int_if hfsc bandwidth 102400Kb queue { qredein, qpadraoin }


        # Rede Interna
        queue qinfip bandwidth 2048Kb hfsc (upperlimit 2048Kb) { qtsin, 
qimpressaoin, qinternetin }
                queue qtsin bandwidth 1400Kb hfsc (realtime 1400Kb, red)
                queue qimpressaoin  bandwidth 128Kb hfsc (realtime 
128Kb, red)
                queue qinternetin  bandwidth 512Kb hfsc (realtime 512Kb, 
red)


        # Padrao
        queue qpadraoin bandwidth 1Kb hfsc (upperlimit 1Kb,default)

###########################################################################################

# NAT FIP
nat on $ext_if from $int_net to any_net -> $ip_nat

# o ftp
rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 
ftp-proxy

###########################################################################################

####Rede INTERNA###############

# QOS DOWNLOAD
pass out quick on $int_if proto tcp from any to $int_net port 3389 queue 
qtsin
pass out quick on $int_if from $fip_ext_net to $int_net queue qimpressaoin
pass out quick on $int_if from any to $int_net queue qinternetin

# QOS UPLOAD
pass in quick on $int_if proto tcp from $int_net port 3389 to any queue 
qtsout
pass in quick on $int_if from $int_net to $ext_net queue qimpressaoout
pass in quick on $int_if from $int_net to any queue qinternetout

################################

Espero ter auxiliado......

Atenciosamente

Christopher Giese
bsdux at bsdux.com.br




Rubens Kuhl Jr. wrote:
> No sentido seu link -> cliente, que você chamou nas suas regras de
> download, o tráfego de saída na interface já é feito desnateado, então
> você deveria poder colocar um filtro na saída da interface interna e
> limitar a velocidade.
>
> Agora, no sentido cliente -> seu link, você poderia usar ingress
> policing ao invés de queueing/shaping. No Linux isso seria o "ingress
> qdisc", deve ter um equivalente no BSD. Seria algo mais "bruto" que o
> HSFC: passou da velocidade contratada o pacote é jogado fora, ao invés
> de enfileirado para ser emitido dentro da velocidade contratada.
>
>
> Rubens
>
>
> On 4/6/06, Mauricio Bonani <mbonani at gmail.com> wrote:
>   
>> Hoje resolvi analisar esse problema até achar a
>> causa. Consegui, agora falta pensar na solução.
>>
>> A questão é a seguinte, essa máquina onde faço o
>> controle de banda também faz NAT para as conexões
>> vindas da minha rede interna. Portanto o tráfego
>> de saída vai com o IP 200.xxx.xxx.xxx da
>> interface externa (obviamente), e esse IP não
>> está contemplado pelas filas o pf.conf.
>> Como todos os clientes "saem" com o mesmo IP
>> 200.xxx.xxx.xxx, ainda não consegui enxergar como tratar esse tráfego.
>>
>> Nas regras que citei (abaixo), faço uso das tags,
>> mesmo assim o tráfego passa pela fila padrão.
>>
>> Algum dos colegas tem idéia de como poderia resolver isso?
>>
>> At 09:29 31/03/2006, you wrote:
>>     
>>> Salve
>>>
>>> pass in  quick on $if_int from $cli1 to any tag UP_CLI1 keep state
>>>
>>> esta regra vc nao colocou FILA... entaum tudo o
>>> que esta nela passa pela padrao ;)
>>>
>>> Qq coisa pvt e eu helpeio vc ;)
>>>
>>> t+
>>>
>>> Christopher Giese
>>> chris at irapida.com.br
>>>
>>>
>>>
>>> Mauricio Bonani wrote:
>>>       
>>>> Estou com o mesmo problema que o amigo Fabio
>>>> Catelani, a diferença é que uso OpenBSD+PF+HFSC.
>>>>
>>>> Fiz a configuração da seguinte forma:
>>>>
>>>> # Filas
>>>> altq on $if_ext hfsc bandwidth 100000Kb queue { std_ext, up_cli1 }
>>>>       queue std_ext bandwidth 2Kb hfsc(default)
>>>>       queue up_cli1 bandwidth 128Kb hfsc(realtime 64Kb, upperlimit 128Kb)
>>>>
>>>> altq on $if_int hfsc bandwidth 100000Kb queue { std_int, dn_cli1 }
>>>>       queue std_int bandwidth 2Kb hfsc(default)
>>>>       queue dn_cli1 bandwidth 256Kb hfsc(realtime 128Kb, upperlimit 256Kb)
>>>>
>>>> # Regras
>>>> pass in  quick on $if_int from $cli1 to any tag UP_CLI1 keep state
>>>> pass out quick on $if_ext tagged UP_CLI1 keep state queue up_cli1
>>>> pass out quick on $if_int from any to $cli1 queue dn_cli1
>>>>
>>>> O tráfego de saída passa pela fila padrão
>>>> (std_ext) ao invés de ir pela fila do cliente (up_cli1).
>>>>
>>>> Onde estou "pisando na bola"?
>>>>
>>>> Unix is very simple, but it takes a genius to understand the simplicity.
>>>> (Dennis Ritchie)
>>>>
>>>> --
>>>> Mauricio Bonani
>>>> mailto:mbonani at gmail.com
>>>>
>>>> --
>>>> gter list    https://eng.registro.br/mailman/listinfo/gter
>>>>
>>>>         
>>> --
>>> gter list    https://eng.registro.br/mailman/listinfo/gter
>>>       
>> Unix is very simple, but it takes a genius to understand the simplicity.
>> (Dennis Ritchie)
>>
>> --
>> Mauricio Bonani
>> mailto:mbonani at gmail.com
>>
>> --
>> gter list    https://eng.registro.br/mailman/listinfo/gter
>>
>>     
> --
> gter list    https://eng.registro.br/mailman/listinfo/gter
>   




More information about the gter mailing list