On Tue, June 22, 2010 10:58, Gabriel Fonseca wrote: > Em 22 de junho de 2010 08:55, Vinicius Abrahao > <vinnix....@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