[FUG-BR] Controle de Banda com PF

Enio Marconcini # www.Enio.Pro.Br eniorm em gmail.com
Terça Junho 22 15:46:30 BRT 2010


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!


Mais detalhes sobre a lista de discussão freebsd