Em 23 de junho de 2010 18:01, Rafael Henrique Faria < rafaelhfa...@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 ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd