[FUG-BR] Radius + PPPoE com FreeBSD + MPD5

Márcio Elias marcioelias em gmail.com
Segunda Março 3 17:34:27 BRT 2014


2014-03-03 16:44 GMT-03:00 Bruno Araújo <bjaraujo em gmail.com>:

> Em 03/03/2014, às 15:48, Márcio Elias <marcioelias em gmail.com> escreveu:
>
> > Estive meio ausente da lista, mais estou progredindo neste assunto.
> >
> > Atualmente estou apto a conectar usuários, e logo que conectado limitar
> sua
> > banda usando mpd-limit (não estou usando pipes, e sim a interface
> netgraph
> > criada para o cliente).
> >
> > Estou também conseguindo obter informações do tráfego do usuário, e apto
> a
> > enviar pacotes CoA para o MPD de modo que este possa atualizar o link do
> > usuário sem desconectá-lo, ou seja, mesmo no meio de um download, se o
> > usuário ultrapassar a quota mensal, o mesmo verá sua taxa de
> transferencia
> > cair até o limite do plano.
> >
> > Minha solução até agora está envolvendo alguns AVPs personalizados,
> alguns
> > códigos em Perl (modulos para checar a banda usada e para resetar o
> > contador de tempo de sessão) e uma boa dose de código em UnLang nas
> sessões
> > authorize e accounting.
> >
> > Está ficando bem interessante, como disse ainda tenho intenção de fazer
> um
> > artigo detalhando esse assunto, mais vou fazê-lo assim que tiver a
> solução
> > completamente pronta.
> >
> > Atualmente minha dúvida está em enviar o pacote CoA para o MPD somente
> se o
> > usuário ultrapassar a quota mensal, ou se virar o mes conectado, por que
> > atualmente estou enviando o pacote a cada accounting update.
> >
> > Volto quando tiver maiores novidades, e começo a escrever o artigo assim
> > que sanar essa dúvida. Não pretendo fazer um pequeno artigo do tipo
> copiar
> > e colar, mais sim explicar e referenciar cada ponto, para que se possa
> > entender o assunto e saber o que se está fazendo. Senti muita dificuldade
> > em encontrar materiais, as principais dicas (tirando a documentação do
> MPD
> > e do FreeRadius) tirei de fóruns Russos, (traduzindo para o ingles). Por
> > isso quero contribuir para comunidade brasileira e escrever tudo em bom
> > Portuguès.
> >
> > --
> > Att.
> > __________________________________
> > Márcio Elias Hahn do Nascimento
> >
> > Araranguá - SC
> > Cel:   (55) 48-9661-0233
> > msn: marcioeliashahn em hotmail.com
> >
> >
> > 2014-02-13 8:59 GMT-02:00 Márcio Elias <marcioelias em gmail.com>:
> >
> >> Ai que está, eu já fui um pouco mais longe, não usei Dummynet nem IPFW
> pra
> >> controle de banda, usei ng_bpf+ng_car (
> >> http://mpd.sourceforge.net/doc5/mpd30.html#radius). Quanto a troca de
> >> velocidade, queria fazer isso de modo transparente, sem derrubar o
> usuário.
> >> Dependendo do usuário ou do que o mesmo está fazendo, não é
> interessante vc
> >> derrubar ele.
> >>
> >> Minha ideia era conseguir fazer algo semelhante ao que fala este artigo.
> >>
> >> http://revk.www.me.uk/2012/11/usage-quotas.html
> >>
> >> Tentei até entrar em contato com o autor mais não tive resposta até
> agora.
> >>
> >> --
> >> Att.
> >> __________________________________
> >> Márcio Elias Hahn do Nascimento
> >>
> >> Araranguá - SC
> >> Cel:   (55) 48-9661-0233
> >> msn: marcioeliashahn em hotmail.com
> >>
> >>
> >> 2014-02-13 8:40 GMT-02:00 Marcelo Gondim <gondim em bsdinfo.com.br>:
> >>
> >> Em 13/02/14 02:25, Márcio Elias escreveu:
> >>>> Alguém na lista tem uma solução usando radius+mysql (ou postgresql)
> como
> >>>> servidor de autenticação com MPD5 e que tenha implementado um sistema
> de
> >>>> controle de banda relativo a um sistema de quotas?
> >>>>
> >>>> Um exemplo básico, tenho um plano de acesso de 10Mbits e queria
> limitar
> >>> ele
> >>>> a 100GB de transferencia mensal, desta forma ao atingir o limite da
> >>>> franquia o usuário estaria limitado a uma velocidade equivalente a 40%
> >>> do
> >>>> seu plano por exemplo. Ao iniciar o mês seguinte essa regra reinicia.
> >>>>
> >>>> Consegui implementar o servidor Radius, (FreeRadius) com banco de
> dados,
> >>>> autenticação PPPoE com MPD5, Controle de banda, tudo certinho. O
> >>> problema
> >>>> está em criar as quotas e controlar o limite de banda baseado nisso.
> >>>>
> >>>> Vi que a FUG está meio desatualizada em artigos, e acho que isso é um
> >>>> assunto interessante para aqueles que como eu trabalham em ISPs, e
> >>>> principalmente que utilizam FreeBSD. Gostaria do apoio da comunidade
> >>> para
> >>>> implementar isso e lançar um artigo detalhado sobre o assunto para
> >>>> favorecer os pobres mortais que futuramente terão a mesma dificuldade
> >>> que
> >>>> estou tendo hoje para implementar essa solução.
> >>>>
> >>>> Conto com o apoio dos mestres. ;)
> >>>>
> >>> Opa Marcio,
> >>>
> >>> Um certo tempo fiz alguns testes como esses que você tá fazendo e
> >>> consegui fazer funcionar sem o controle de franquia, que é o que você
>> >>> querendo.
> >>> Não implantei pois precisava fazer umas mudanças internas e também eu
> >>> ainda não tinha IPv6 para fazer os testes que eu queria.
> >>> Levando-se em conta que no sistema que eu testava eu criei os planos de
> >>> velocidades em tables no ipfw e dummynet, assim quando o cliente
> >>> conectava, eu checava de qual plano ele era e jogava o IP dele da
> >>> conexão, na table certa. No seu caso poderia ser feito um script em php
> >>> que checasse a tabela radacct do radius  e calculasse se ele
> ultrapassou
> >>> a quantidade de bytes trafegados da franquia e se sim desconectaria ele
> >>> e jogaria ele na table de velocidade nova. Isso pode ser feito em php
> >>> tranquilamente.  :)
> >>>
> >>> Abração,
> >>> Gondim
> >>> -------------------------
> >>> Histórico: http://www.fug.com.br/historico/html/freebsd/
> >>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> >>>
> >>
> >>
> > -------------------------
> > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>
>
> Parabéns pelo progresso, também diz alguns testes aqui e consegui conectar
> clientes sem nat ( é assim que quero) e renomear a interface para o nome de
> usuário mas o controle de tráfego também não quis por pipes.
> Poderia me adiantar ou postar o link original sobre esse controle netgraph?
>
> _______________
> Bruno Araújo
>
>
> Antes de imprimir, verifique se tem papel e tinta suficiente na impressora.
>
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>


Se vc está usando MPD, coloca os seguintes atributos na tabela radreply
(para um usuário) ou radgroupreply (para um grupo):

**para limitar o download com 2Mbits
attribute = "mpd-limit"
op = "+="
value = "out#1=all rate-limit 2048000 384000 768000 pass"

**para limitar o upload com 1Mbits
attribute = "mpd-limit"
op = "+="
value = "in#1=all rate-limit 1024000 192000 384000 pass"

rate-limit é o mesmo principio do comando no iOS da Cisco, onde o primeiro
atributo é o limite de tráfego, o segundo o burst e o terceiro o extended
burst.

pra calcular o burst (segundo documentação da cisco):

taxa * (1/8) * 1.5 (onde taxa é o limite de tráfego que vc quer).

o último argumento "pass" no final do comando, é pra evitar a necessidade
de outra regra para liberar o tráfego.

Agora, me da tua contribuição ai, não tinha percebido que podia renomear as
interfaces com o nome do usuario, qual foi o AVP que vc usou pra setar isso?


-- 
Att.
__________________________________
Márcio Elias Hahn do Nascimento

Araranguá - SC
Cel:   (55) 48-9661-0233
msn: marcioeliashahn em hotmail.com


Mais detalhes sobre a lista de discussão freebsd