Segue script para exportação da access-list e cadastro de clientes do pppoe secret (pode ser adaptado para hotspot facilmente).
#!/bin/bash
#======== EXPORTACAO DE DADOS MKAUTH PARA MIKROTIK ========#
##---------------==== COMPILADO POR: ====------------------##
##---------- LUCIANO RAMPANELLI - M4D3@HOTMAIL.COM ---------##
#--------------------- www.nimoc.com.br ----------------------#
#===============================================#
banco=mkradius
table=sis_cliente
campo=ativo
#IP DE CADA AP OU SERVIDOR QUE IRA RECEBER OS DADOS
ap1=172.16.16.251
ap2=172.16.16.252
#USUARIO FTP PARA ENVIO DE ARQUIVOS
ftp_user="ftpuser"
ftp_pass="ftpuser123"
#USUARIO SSH PARA EXECUCAO DE COMANDOS
ssh_user="sshuser"
#DEVE SER CADASTRADO SEM SENHA, LIBERAR APENAS IP DO MKAUTH NO MIKROTIK PARA ESTE USUARIO
#ARQUIVOS DESTINO
arquivo1="access-list.rsc"
arquivo2="secret.rsc"
#EXPORTACAO DO BANCO DE DADOS
if [ "$1" = "s" ];then
mysql -u root -pvertrigo -e\
"SELECT login, mac, plano, tipo, senha FROM $table WHERE $campo = '$1'" $banco |awk '{ print $1, $2, $3, $4, $5 }' |grep -v "login mac plano tipo senha" |grep -v "NULL" > /tmp/.lmp
fi
count=`cat /tmp/.lmp|wc -l`
indice=$count
#MONTAGEM DA STRING DE IMPORTACAO DOS MACS PARA A ACCESS-LIST
echo "/interface wireless access-list " > $arquivo1
while [ $count -gt 0 ]; do
login=`cat /tmp/.lmp |awk '{ print $1 }' |sed -n $count"p"`
mac=`cat /tmp/.lmp |awk '{ print $2 }' |sed -n $count"p"`
if [ ! -z $login ]; then
echo "add comment="$login" disabled=no interface=all mac-address=$mac signal-range=-78.120 forward=no" >> $arquivo1
fi
count=`echo $count-1|bc`
done
cat $arquivo1
echo " "
count=`cat /tmp/.lmp|wc -l`
indice=$count
#MONTAGEM DA STRING DE IMPORTACAO DOS CLIENTES PPPOE
echo "/ppp secret " > $arquivo2
while [ $count -gt 0 ]; do
login=`cat /tmp/.lmp |awk '{ print $1 }' |sed -n $count"p"`
mac=`cat /tmp/.lmp |awk '{ print $2 }' |sed -n $count"p"`
plano=`cat /tmp/.lmp |awk '{ print $3 }' |sed -n $count"p"`
tipo=`cat /tmp/.lmp |awk '{ print $4 }' |sed -n $count"p"`
senha=`cat /tmp/.lmp |awk '{ print $5 }' |sed -n $count"p"`
if [ $tipo = "pppoe" ]; then
echo "add caller-id=$mac name=$login password=$senha profile=$plano service=$tipo disabled=yes" >> $arquivo2
fi
count=`echo $count-1|bc`
done
cat $arquivo2
echo " "
#ENVIO DE ARQUIVOS POR FTP
echo "Enviando arquiovos..."
ftp -in $ap1 << ap1
user $ftp_user $ftp_pass
send $arquivo1
send $arquivo2
bye
EOF
quit
ap1
ftp -in $ap2 << ap2
user $ftp_user $ftp_pass
send $arquivo1
send $arquivo2
bye
EOF
quit
ap2
echo " "
#EXECUCAO DE COMANDOS VIA SSH
echo "Importando dados..."
ssh $ssh_user@$ap1 << sh1
/ppp secret export file=bkp_secret.rsc
/ppp secret remove [/ppp secret find]
/import $arquivo2
/interface wireless access-list export file=bkp_access-list.rsc
/interface wireless access-list remove [/interface wireless access-list find]
/import $arquivo1
/quit
sh1
ssh $ssh_user@$ap2 << sh2
/ppp secret export file=bkp_secret.rsc
/ppp secret remove [/ppp secret find]
/import $arquivo2
/interface wireless access-list export file=bkp_access-list.rsc
/interface wireless access-list remove [/interface wireless access-list find]
/import $arquivo1
/quit
sh2
rm -fr $arquivo1
rm -fr $arquivo2
echo "Exportado(s) $indice registro(s)"
#DOCUMENTACAO
#http://thobias.org/doc/shell_bd.html#toc11
#DEPENDENCIAS
#apt-get update
#apt-get install ftp bc -y
#PARA RODAR DIGITE
#mka2mk.sh s
Salve o script acima como mka2mkt.sh
Dê de permissao de execução: chmod +x mka2mkt.sh
E rode o script após configurar os parametros com: ./mka2mkt.sh s
A letra 's' identifica os clientes ativos, mas você pode alterar para usar como bem entender.
O agendamento pode ser feito para rodar durante a madrugada pelo crontab, mantendo seu MK-AUTH sincronizado com mikrotik.
É isso pessoal, dúvidas é só perguntar, convido os colegas a aprimorarem o script bem como a complementarem com novas funções.
Valeu
Luciano Rampanelli - M4D3
Respostas
Seria interessante o MK-AUTH incorporar estas funções, isso traria maior segurança para os provedores com toda certeza.
Testado em MikroTik 4.x e 5.x
Se o pedro conseguisse fazer isso iria ficar massa pois faço aqui na mão para caso aconteça algo com o server radius a rb assuma tudo fiz um script porem a exportação dos usuarios faço na mão grande isso seria maravilhoso.
Pedro veja o que pode fazer para exportar isso todos os dias pela madrugada ou algo parecido...
grato.
m4d3 disse:
Pra fazer de madrugada basta agendar o script pelo crontab, o ideal seria fazer em tempo real, a cada alteração feita no MK-AUTH enviar também para o MikroTik.
Abraço
O cadastro da secret vai desativado para o mikrotik, basta adicionar em tools netwatch um monitoramento para o ip do MK-AUTH com a seguinte instrução:
DOWN
/ppp secret set [find disabled=yes] disabled=no
UP
/ppp secret set [find disabled=no] disabled=yes
Assim se cair o MK-AUTH a secret é automáticamente ativada e quando religar o MK-AUTH a secret é novamente desativada.
Para rodar automaticamente todos os dias as 04:50 da manhã logo após o backup automático diário, salve o script em /usr/local/mkauth/scripts/mka2mkt.sh e em seguida digite no console:
echo "50 04 * * * root sh /usr/local/mkauth/scripts/mka2mkt.sh" >> /etc/cron.d/backup
Lembrando que se fizer atualização do MK-AUTH deve digitar novamente o comando acima para reinstalar o agendamento.
Parabens Luciano, com a flexibilidade dessa regra, aliada ao mk-auth e a um netwatch no Mikrotik o serviço não irá parar tão facilmente!
Valeu Renato, também acredito que será muito útil.
Abraço
muito legal, o interessante que é possivel alterar esse script para fazer um integração de controle IP x MAC na ARP no sistema, que muitos já pediram aqui e não coloquei pq o radius no suporta...
Então pedro, teria como implementar esse script para ser executado pelo mk-auth?