[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