[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