[FUG-BR] Controle de Banda com PF

Afranio Nunes afraniodido em gmail.com
Terça Junho 22 18:36:54 BRT 2010


No squid utilizo o delay pools

Imagino que o mesmo funciona perfeitamente no lusca

Onde pode limitar as taxas de tudo o que passo pelo proxy.

Att
Afranio

Em 22/06/2010, às 15:46, Enio Marconcini # www.Enio.Pro.Br escreveu:

> 2010/6/22 Nenhum_de_Nos <matheus em eternamente.info>
> 
>> 
>> On Tue, June 22, 2010 10:58, Gabriel Fonseca wrote:
>>> Em 22 de junho de 2010 08:55, Vinicius Abrahao
>>> <vinnix.bsd em gmail.com>escreveu:
>>> 
>>>> Oi pessoal, bom dia!
>>>> 
>>>> Essa thread de controle de banda com PF veio a calhar.
>>>> 
>>>> Estou tentando implementar algo que teoricamente deveria ser simples,
>>>> lá em casa, mas estou tendo uma dificuldade monstro!
>>>> 
>>>> A idéia para experiência é pegar meu speedy 100Kb/s (real) e criar um
>>>> controle de banda que
>>>> garanta para um determinado cliente (no meu caso uma rádio online do
>>>> PSP) uma banda de 20Kb/s e todo
>>>> o resto "para quem quiser" lá dentro de casa. Meu objetivo é garantir
>>>> a banda para a rádio e ainda assim conseguir
>>>> fazer alguns downloads/torrents.
>>>> 
>>>> Cheguei a criar as declarações das filas e as regras para fazer match
>>>> com o streaming mas até agora só vejo trafego
>>>> nas filas que são default.
>>>> 
>>>> Abaixo algumas coisas que estão no meu pf.conf que podem (ou não?)
>>>> estar interferindo.
>>>> 
>>>> 
>>>> 
>> ---------------------------------------------------------------------------------------------
>>>> table <host_psp> {192.168.1.10}
>>>> table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12,  10.0.0.0/8 }
>>>> 
>>>> 
>>>> set loginterface $ext_if
>>>> 
>>>> set skip on lo
>>>> set block-policy return
>>>> scrub in all
>>>> 
>>>> scrub in on $int_if fragment reassemble
>>>> scrub in on $int_if no-df
>>>> scrub on $int_if reassemble tcp
>>>> 
>>>> altq on $int_if cbq  bandwidth 10Mb queue { q_radio_out , q_internet ,
>>>> q_default_out }
>>>> queue q_radio_out      bandwidth 20Kb cbq
>>>> queue q_internet       bandwidth 80Kb cbq
>>>> queue q_default_out    bandwidth  9Mb cbq(default)
>>>> 
>>>> 
>>>> pass out quick on $int_if proto tcp from <host_psp> to any
>>>> queue q_radio_out
>>>> pass out quick on $int_if proto tcp from any to  <host_psp>
>>>> queue q_radio_out
>>>> 
>>>> Quando vi que o tráfego de rádio não estava indo pra fila que eu
>>>> queria, cheguei a apelar com as seguintes regras:
>>>> 
>>>> pass out quick on $int_if proto tcp from !<rfc1918> port 9106 to any
>>>> queue q_radio_out
>>>> pass out quick on $int_if proto tcp from !<rfc1918> to any port 9106
>>>> queue q_radio_out
>>>> pass out quick on $int_if proto tcp from !<rfc1918> to any
>>>> queue q_internet_default
>>>> 
>>>> Mas ainda sem sucesso.  :-(
>>>> 
>>>> 
>>>> 
>> ---------------------------------------------------------------------------------------------
>>>> 
>>>> Alguns podem estar achando estranho o fato da queue estar na interface
>>>> interna, mas conversando
>>>> com os amigos no ##freebsd-br @freenode (thanks Porks!) chegamos a
>>>> conclusão que o altq só agiria neste caso nas filas
>>>> de output, espero estarmos certos quanto a essa conclusão.
>>>> 
>>>> No meu primeiro teste (com a interface externa) as coisas estavam indo
>>>> por esse caminho:
>>>> 
>>>> altq on $ext_if cbq  bandwidth 100Kb queue { q_radio, q_default }
>>>> queue q_radio   bandwidth 20Kb cbq
>>>> queue q_default bandwidth 80Kb cbq(default)
>>>> 
>>>> pass in  quick on $ext_if proto tcp from any to any port $radio_port no
>>>> state
>>>> pass out quick on $ext_if proto tcp from any to any port $radio_port
>>>> no state queue (r_radio)
>>>> 
>>>> 
>>>> 
>>>> 
>> ---------------------------------------------------------------------------------------------
>>>> 
>>>> Bom.. acho que já me prolonguei demais.
>>>> Vou dar uma estudada no HFSC, mas basicamente gostaria de saber se é
>>>> possível fazer isso que eu estou tentando com o CBQ, e como?
>>>> Teoricamente, pelo que li, dá sim, mas estou tendo dificuldades nas
>>>> implementações, poderiam me dar uma luz?
>>>> 
>>>> 
>>>> Obrigado pela ajuda,
>>>> Vinnix
>>>> 
>>>> [a.k.a. Vinícius Schmidt]
>>>> 
>>>> 
>>>> 
>>>> ANEXO 1: Diagrama do Fluxo (thanks again Porks!)
>>>> 
>>>> #<rede interna> --> <NIC_INTERNA_IN> --> <PF> --> <NIC_EXTERNA_OUT>
>>>> --> <internet>
>>>> #<rede interna> <-- <NIC_INTERNA_OUT> <-- <PF> <-- <NIC_EXTERNA_IN>
>>>> <-- <internet>
>>>> -------------------------
>>>> Histórico: http://www.fug.com.br/historico/html/freebsd/
>>>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>>>> 
>>> 
>>> 
>>> Vinícius,
>>> 
>>>    Aplique as filas nas regras de filtragem que confiram com entrada de
>>> tráfego na interface interna.
>>> 
>>>    No seu caso ficaria assim:
>>> 
>>> pass in quick on $int_if proto tcp from !<rfc1918> to port 9106 queue
>>> q_radio_out
>>> pass in quick on $int_if proto tcp from !<rfc1918> to any queue
>>> q_internet_default
>>> 
>>>    Isso no caso de você querer fazer o enfileiramento da fila
>> q_radio_out
>>> somente com destino any porta 9106.
>>>    Lembre-se que quando vc define as portas nas regras de saída da
>>> interface interna vc está definindo a porta de origem do seu host na rede
>>> interna.
>>> 
>>>    Para verificar se o tráfego esta batendo com as filas utilize pfctl
>>> -vvs
>>> q .
>>> 
>>> Espero ter ajudado.
>>> Att.
>>> 
>> 
>> você pode mudar a forma como o pf trata os estados das conexões. procure
>> pela seção:
>> 
>> set state-policy option
>> 
>> em http://www.openbsd.org/faq/pf/options.html
>> 
>> isto pode ser definido por regra ou de modo geral.
>> 
>> matheus
>> 
>> --
>> We will call you cygnus,
>> The God of balance you shall be
>> 
>> A: Because it messes up the order in which people normally read text.
>> Q: Why is top-posting such a bad thing?
>> 
>> http://en.wikipedia.org/wiki/Posting_style
>> -------------------------
>> Histórico: http://www.fug.com.br/historico/html/freebsd/
>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>> 
> 
> 
> 
> to precisando controlar a banda de navegação somente,
> os usuários navegam somente pelo proxy autenticado (com lusca), os
> navegadores ficam configurados manualmente para o ip do servidor proxy e a
> porta 3128, e preciso controlar a banda de navegação somente, pois nessa
> rede eu ainda tenho trafego de banco de dados firebird rodando na porta 3050
> que não pode ter limitação
> 
> é possível?
> 
> se fosse trafego de porta 80 acho que seria mais fácil pra eu entender, no
> meu caso, nao tem fluxo na porta 80 e sim na 3128
> 
> -- 
> ENIO RODRIGO MARCONCINI
> gtalk: eniorm em gmail.com
> skype: eniorm
> msn: /dev/null
> 
> .: FreeBSD -:- OpenBSD -:-Slackware Linux :.
> Have trouble with Windows - reboot!
> Have trouble with Unix - be root!
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



Mais detalhes sobre a lista de discussão freebsd