Mikrotik with Radius for PPPoE and Hotspot

From Pruonckk.org

Conteúdo

Prefacio

O servidor Radius pode ser utilizado para várias funções, como autenticação, controle de trafego, bilhetagem e outras funções, neste tutorial vamos demonstrar a instalação do mesmo e também a configuração para utilização de PPPoE pelo Mikrotik.


Instalacao No Debian

apt-get install freeradius freeradius-mysql mysql-server

Conifguracao Para Mysql

Criando o banco de dados

$ mysql -uroot -p(SUA_SENHA)
  mysql> CREATE DATABASE radius;
  mysql> GRANT ALL ON radius.* to radiususer@'localhost' IDENTIFIED BY 'sua_senha_para_o_banco_radius';
  mysql> quit;

Importando a estrutura SQL

cd /etc/freeradius/sql/mysql
mysql -uradiususer -pSENHA radius < ippool.sql
mysql -uradiususer -pSENHA radius < nas.sql
mysql -uradiususer -pSENHA radius < schema.sql


Configurando o Radius


Permitindo Conexxoes ao Radius

Para que um servidor possa mandar uma requisição ao radius é necessário que ele esteja cadastrado, no arquivo clients.conf, se você buscar na internet verá que pode ter esta configuração em banco de dados também, porém não me preocupei com isso, estes valores (mesmo em MySQL) serão lidos apenas na inicialização do Radius, deste modo, optei por manter em arquivo.

Edite o arquivo /etc/freeradius/clients.conf
# Voce precisara de uma entrada como esta para cada host que queira liberar
# ex: client xxx.xxx.xxx.xxx e ai o resto
client 127.0.0.1 {
        secret  = afdsa1
        shortname = localhost
        nastype = other
}


Abaixo um exemplo real destas configurações


client 189.2.6.130 {
        secret = XxXxXx
        shortname = lins01
        nastype = Mikrotik
}


Habilitando o Radius para utilizar o MySQL

Edite o arquivo /etc/freeradius/sql.conf e altere os valores server, login, password para os correspondentes

Edite o arquivo /etc/freeradius/sites-enabled/default e na seção authorize{} habilite a opção sql

Habilite a opção SQL também nas seguintes seções do arquivo

accounting {}
session{}
post-auth{}

Edite o arquivo /etc/freeradius/radiusd.conf

Retire o comentario da linha $INCLUDE sql.conf

Reiniciando o Radius e Acrescentando usuários

Para reiniciar você utiliza o comando abaixo

/etc/init.d/freeradius restart

Se desejar pode rodar em modo debug (de um stop no daemon primeiro)

freeradius -X


Acrescentando um usuário para autenticar

Dentro do mysql no banco radius, execute os seguintes comandos (serão explicado um a um abaixo)

INSERT INTO radcheck (username,attribute,op,value) VALUES ('usuario@contas.dominio','Auth-Type','==','Accept');
INSERT INTO radcheck (username,attribute,op,value) VALUES ('usuario@contas.dominio','Password','==','senha_DO-UsUaRiO');
INSERT INTO radcheck (username,attribute,op,value) VALUES ('usuario@contas.dominio','Caller-ID','==','00:0b:af:1e:28');

O primeiro campo que adicionamos neste ponto foi o Auth-Type, o auth-type é uma liberação para o usuário se autenticar pelo pppoe no radius, você pode colocar o valor em Reject e o cliente estará bloqueado.

Depois o campo password que nada mais é que a senha do mesmo.

O campo Caller-ID é o Mac Address do usuário que poderá se conectar usando o usuario e senha informado, se não bater o mac o mesmo não será autenticado, obviamente esta é uma opção opcional  :)


Adicionando um ip Estatico pelo Radius

Também é possivel adicionar a tabela radreply uma configuração para ip fixo se for necessário, um exemplo desta utilização, são os clientes exclusivamente de voip, nestes casos voce pode bloquear toda a saida da rede em questão e liberar o trafego apenas para os servidores de voip na ultranet, isso no caso através do mikrotik.


INSERT INTO radreply (username,attribute,op,value) VALUES ('usuario@contas.dominio','Framed-IP-Address','==','xxx.xxx.xxx.xxx');
INSERT INTO radreply (username,attribute,op,value) VALUES ('usuario@contas.dominio','Framed-IP-Netmask','==','255.255.255.252');

No caso acima é importante lembrar que o ip tem que fazer parte do pool do mikrotik onde o usuário estará se conectando.


Adicionando um Plano

Agora temos um usuário criado, no nosso caso, nós também realizamos o controle de banda, então vamos adicionar um plano referente as velocidades que o cliente está contratando.

INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('1024k','Mikrotik-Rate-Limit',':=','512k/1024k')
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('512k','Mikrotik-Rate-Limit',':=','128k/512k')

Note que a velocidade é tratada como upload/download


Adicionando usuarios ao Plano

Agora temos o usuario criado, e temos o plano, precisamos definir em qual plano o usuário se encontra.

INSERT INTO radusergroup (username,groupname) VALUES ('usuario@contas.dominio','512k');


Agora nosso radius está devidamente configurado com um usuário para ser autenticado, basta agora configurar o mikrotik para acessa-lo.


OUTRAS INFORMACOES

Esta configuração é a mesma utilizada pelo Open-MESH para falar com radius, apenas alguns parametros tem que ser adicionados ou alterados dentro do mysql, a configuração do radius em si é exatamente a mesma


Exemplo para OpenMESH

Adicione ao MySQL

INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','Password','password');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','Service-Type','Framed-User’);
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','Framed-Protocol','PPP');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','Digital-Access','TRUE');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','Session-Timeout','86400');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','Idle-Limit','600');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','ChilliSpot-Bandwidth-Max-Up','512');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('jdoe','ChilliSpot-Bandwidth-Max-Down','1024');

Com estes parametros você estará pronto para fornecer hostposts openmesh .

Para maiores informações sobre open-mesh e radius acesse o link abaixo

http://www.open-mesh.com/activekb/questions/25/Using+your+own+RADIUS+server


No caso do Open-mesh, é muito importante lembrar que os endereços da pagina que será acessada, do servidor radius, e dos servidores do proprio open-mesh obrigatoriamente precisam estar liberados para acesso (isso é feito através do painel no proprio site do open-mesh)


Mikrotik

Você pode para o mikrotik e openmesh adicionar também um parametro Max-Monthly-Session que fará com que o radius contabilize o tempo total do usuário no mês, este parametro existe também para Daily ( Max-Daily-Session ) que pode ser muito interessante para uma solução de hotel ou restaurante que você vende por Horas ou dias o acesso a internet

INSERT INTO radcheck VALUES (NULL,'usuario@dominio','Max-Monthly-Session',':=','39000');


Para informações mais voltadas as configurações do mikrotik acesse o link abaixo.

http://wiki.mikrotik.com/wiki/RouterOs_MySql_Freeradius

Consulta de Trafego

A Consulta para trafego pode ser feito como no exemplo abaixo.

select (sum(acctinputoctets)/1024/1024) as entrada  , (sum(acctoutputoctets)/1024/1024) \
as saida from radacct where username = 'usuario@contas.ultra.net.br';

no caso nao apliquei regra nenhuma para a data de filtragem do resultado, mas isso pode ser implementado, o valor ja irá vir em MB transferidos, então fica facil de montar uma interface para estas operações.

Ferramentas pessoais
Inutilidades