[FUG-BR] ALTQ para Balanceamento
Wanderson Tinti
wanderson em bsd.com.br
Sexta Junho 25 00:33:53 BRT 2010
Em 23 de junho de 2010 18:01, Rafael Henrique Faria <
rafaelhfaria em cenadigital.com.br> escreveu:
> Boa noite lista.
>
> Estou com um problema com o PF+ALTQ.
>
> A máquina é um FreeBSD 8.1-PRE, configurado como Bridge.
> Esta máquina está entre um Cisco 7200, e um 3Com 7900. E a função
> dela, será balancear a banda entre diversas subredes.
>
> Eu criei 4 tabelas, cada uma contendo as subredes que serão balanceadas:
>
> table <sub1> { ips/24 }
> table <sub2> { ips/24 }
> table <sub3> { ips/24 }
> table <sub4> { ips/24 }
>
> As interfaces da maquina são:
>
> wan (ligada ao Cisco): bce0
> lan (ligada ao 3Com): bce1
> bridge (entre bce0 e bce1): bridge0
> vlan (ip administrativo): vlan1
>
> Agora, qual é o meu problema.
>
> Após criar as 4 queues (mais a root), eu precisei colocar uma 5a.
> queue, como default, pois o ALTQ não permitia ficar sem uma queue
> Default.
>
> altq on $lan_if bandwidth 33Mb hfsc queue { dl_sub1, dl_sub2, dl_sub3,
> dl_sub4, dl_def }
> queue dl_sub1 bandwidth 8Mb priority 1 qlimit 300 hfsc (realtime
> 3.20Mb upperlimit 22.40Mb)
> queue dl_sub2 bandwidth 8Mb priority 1 qlimit 300 hfsc (realtime
> 3.20Mb upperlimit 22.40Mb)
> queue dl_sub3 bandwidth 8Mb priority 1 qlimit 300 hfsc (realtime
> 3.20Mb upperlimit 22.40Mb)
> queue dl_sub4 bandwidth 8Mb priority 1 qlimit 300 hfsc (realtime
> 3.20Mb upperlimit 22.40Mb)
> queue dl_def bandwidth 128Kb hfsc (default)
>
> Agora, eu setei todos os pass para as queues:
>
> pass log quick from <sub1> to any keep state queue (dl_sub1)
> pass log quick from <sub2> to any keep state queue (dl_sub2)
> pass log quick from <sub3> to any keep state queue (dl_sub3)
> pass log quick from <sub4> to any keep state queue (dl_sub4)
>
> Porém, simplesmente não funciona.
> Eu coloquei log em todas as regras, para ter certeza que estava
> casando com os IPs das subredes... e tudo está casando...
> Coloquei abaixo de todas, pass log all. E fiquei monitorando essa
> regra, e não passou nenhum IP das subredes das regras acima.
>
> É muito estranho, pq o consumo da banda, fica meio dividido.
> Como podemos ver pelo: pfctl -vvs queue
>
> queue dl_sub1 on bce1 bandwidth 7Mb hfsc( linkshare 7.60Mb )
> [ pkts: 263901 bytes: 289112081 dropped pkts: 0 bytes: 0
> ]
> [ qlength: 0/ 50 ]
> [ measured: 475.2 packets/s, 4.11Mb/s ]
> queue dl_sub2 on bce1 bandwidth 7Mb hfsc( linkshare 7.60Mb )
> [ pkts: 567386 bytes: 747149661 dropped pkts: 0 bytes: 0
> ]
> [ qlength: 0/ 50 ]
> [ measured: 561.2 packets/s, 5.84Mb/s ]
> queue dl_sub3 on bce1 bandwidth 7Mb hfsc( linkshare 7.60Mb )
> [ pkts: 268904 bytes: 383246359 dropped pkts: 0 bytes: 0
> ]
> [ qlength: 0/ 50 ]
> [ measured: 195.8 packets/s, 2.08Mb/s ]
> queue dl_sub4 on bce1 bandwidth 7Mb hfsc( linkshare 7.60Mb )
> [ pkts: 407467 bytes: 527832993 dropped pkts: 0 bytes: 0
> ]
> [ qlength: 1/ 50 ]
> [ measured: 660.0 packets/s, 7.37Mb/s ]
> queue dl_def on bce1 bandwidth 128Kb hfsc( default )
> [ pkts: 1009121 bytes: 1171633648 dropped pkts: 17 bytes: 18399
> ]
> [ qlength: 0/ 50 ]
> [ measured: 1072.0 packets/s, 11.20Mb/s ]
>
>
> Como podemos ver, está tendo uma certa divisão dos pacontes dentro das
> queues... mas não como foi configurado.
> A maior parte (11.2mb/s) está saindo pela default... sendo que nas
> regras PASS está redirecionando todo o tráfego para as queues...
>
> Alguém já configurou o ALTQ com sucesso, pode dar uma luz?
>
> Agradeço antecipadamente.
>
> --
>
>
Rafael, boa noite.
Costumo marcar o tráfego taguiando(TAG). Veja se algo do tipo ajudaria na
resolução do seu problema:
REDE_A="192.168.6.0/24"
#DOWNLOAD
altq on $int_if hfsc bandwidth 100Mb queue { down_def, down_lan_A }
queue down_def bandwidth 1Kb priority 0 hfsc (default realtime 1Kb
upperlimit 2Kb)
queue down_lan_A bandwidth 2Mb priority 7 qlimit 500 hfsc (realtime 2Mb
upperlimit 3Mb)
..
#UPLOAD
altq on $ext_if hfsc bandwidth 100Mb queue { up_def, up_lan_A }
queue up_def bandwidth 1Kb priority 0 hfsc (default realtime 1Kb upperlimit
2Kb)
queue up_lan_A bandwidth 2Mb priority 7 qlimit 500 hfsc (realtime 2Mb
upperlimit 3Mb)
..
pass in quick on $int_if inet proto { tcp udp icmp } from $REDE_A to any
modulate state tag lan_A queue down_lan_A
pass out quick on $ext_if inet proto { tcp udp icmp } from $200.200.200.1 to
any tagged lan_A modulate state label lan_A queue up_lan_A
No exemplo acima os host estão atás de nat, por isso o uso do IP
200.200.200.1 na segunda regra, desviando para fila upload.
Sem nat, você pode criar suas filas normalmente na interface LAN e WAN, e
penalizar o tráfego dos hosts no fluxo de saída (out). Logo você trabalha
sobre o FROM e TO:
pass out on $int_if inet proto tcp from any to $hostA queue down_hostA
pass out on $ext_if inet proto tcp from $hostA to any queue up_hostA
Eu ainda prefiro mesclar regras de filtro do pf com o controle de banda do
ipfw/dummynet.
Boa noite.
--
Wanderson Tinti
Mais detalhes sobre a lista de discussão freebsd