Página 1 de 1

Altq + PF

MensagemEnviado: 09/Ago/2012 10:35
por ManoXela
Tenho um servidor rodando MPD5 + FreeRadius para fazer autenticação de usuários via PPPoE e gostaria de fazer controle de banda dos usuários conectados, de modo que, cada vez que um usuário se conecta é criada uma nova regra para ele.
Queria fazer isso usando Altq + PF, dinamicamente. Estou há tempos procurando uma solução pela Internet mas ninguem sabe como fazer, a maioria recomenda o uso do IPFW ou do authpf. O Authpf não serve para o que eu quero, e o IPFW se tornaria complicado pois teria que migrar o firewall todo para IPFW.

Teria algum meio de adicionar queues usando o pfctl? Pois preciso que crie 2 queues novos para cada usuários que se conecta, afim de limitar a banda de uso dele

Um dos queues teria que ficar sobre um altq e o outro teria que ser criado. Ex:

ng0 = Conexão do servidor com a internet

Esse altq teria que ser fixo e eu teria que ir adicionando novos queues automaticamente quando o usuário conecta e removendo quando desconecta
altq on ng0 bandwidth 5Mb cbq queue { up_m1 up_m2 }
queue up_m1 bandwitdh 512Kb cbq(default)
queue up_m2 bandwidth 256Kb cbq

E para controlar o down eu teria que criar um altq novo a cada conexão. Ex:
altq on ng1 bandwidth 1Mb cbq queue down_m1
queue down_m1 bandwidth 1Mb cbq(default)

altq on ng2 bandwitdh 512Kb cbq queue down_m2
queue down_m2 bandwidth 512Kb cbq(default)

pass out on ng0 from 1.2.3.4 to any queue up_m1
pass out on ng1 from any to 1.2.3.4 queue down_m1

pass out on ng0 from 5.6.7.8 to any queue up_m2
pass out on ng2 form any to 5.6.7.8 queue down_m2

Re: Altq + PF

MensagemEnviado: 09/Abr/2013 01:11
por raitech
Olá manoXela,

estou com um problema bem parecido: para limitar as velocidades que oferecemos no provedor onde trabalho, acabamos por ficar com as soluções dadas pelos sistemas operacionais. Atualmente a solução é feita através do TC do Linux, e ele permite, não sei bem ao certo como, criar uma CBQ para a Queue Discipline principal, a que é atrelada a interface como um todo, e mais diversas classes filhas, às quais associa-se uma marca feita pelo IPTables. Existem duas marcas para cada IP, pois somente é possível controlar o fluxo, como você bem notou, na saída de dados da máquina em questão. Uma marca diz se aquele pacote está chegando do mundo (downstream) ou indo ao mundo (upstream), e a CBQ entra em ação.

Não gosto de usar Linux para essas coisas, hoje em dia está cada vez mais difícil ter um sistema operacional light, oh!, quer dizer: ainda bem que existem os BSDs. :)

Mas em alguns testes que fiz, não foi possível ter algo parecido com o que o TC faz através do PF + ALTQ, pois, pelo que entendo, ALTQ serve muito mais para controle da qualidade do serviço do que para limitar banda, tanto que o tipo de fila mais visto nos exemplos é HFSC. Cada subclasse criada no PF deve ser uma porcentagem da classe-mãe, e a soma delas todas não deve ultrapassar 100%. Ou seja: para fazer overbooking, não rola.

Estou pra testar como o IPFW funciona desse jeito, e como tudo que tenho atualmente está sob IPTables + TC, vou ter que traduzir de qualquer jeito.

Outra coisa que andei pensando: será que funciona colocar o IPFW numa máquina virtual (virtualbox no freebsd, é estável?), fazê-lo limitar a conexão, e no host usar PF para QoS?

manoXela, conseguiu resolver seu problema?

Re: Altq + PF

MensagemEnviado: 12/Abr/2013 16:18
por raitech
Outra boa opção é:

    use dummynet para limitar a banda por IP
    use a ação altq para enviar tráfegos específicos para filas específicas dentro do PF

http://lists.freebsd.org/pipermail/freebsd-ipfw/2004-September/001426.html