[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