[FUG-BR] Controle de Banda com PF
Vinicius Abrahao
vinnix.bsd em gmail.com
Terça Junho 22 08:55:55 BRT 2010
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>
Mais detalhes sobre a lista de discussão freebsd