API MIKROTIK – Manipular Wireless-Registration y Access-List con PHP y MYSQL

En esta ocasión, te traigo un pequeño sistema desarrollado en php y mysql para que puedas controlar cada cliente de un nodos AP de distintas o una misma localidad. Esto te permitirá habilitar/deshabilitar un MacAddress del access-list de muchísimos AP desde un solo lugar, tambien ver el nivel de señal y patearlo para que re-conecte cuando sea necesario.

Editamos el archivo config.php con los datos del mysql y con el usuario y contraseña del API. Este es el usuario y contraseña que va a utilizar el sistema para acceder a todos los equipos routerboard que cargues.

//////// Base de datos //////////////
$hostname_myCnx = "localhost";
$database_myCnx = "manage_isp";
$username_myCnx = "root";
$password_myCnx = "";

/// API ///  Se usa el mismo para todos los routerboards.
$Username ="tusuario";
$Pass ="tucontraseña";

Base de datos MYSQL
Las tablas son 4, por supuesto que aqui faltan muchas cosas, como la tabla de Login, de Logs, de bajas. etc, pero para mostrar un ejemplo totalmente funcional nos alcanza con estas 4.
Tabla Categorías: Contiene si el cliente es 2,4 ghz o 5,8 por ejemplo.
Tabla Localidades: Como su nombre lo dice aquí cargaremos las localidades.
Tabla Internet: Aquí cargaremos nuestros clientes a los que les brindamos internet. Esta tabla tiene 2 campos importantes. «ip_equipo_inalambrico» es el campo que nos identifica el equipo por el comentario que le demos en el «access-list» del RouterOS. Podemos escribirle su direccion IP o bien un string que lo identifique. Luego el campo «activo» es para identificar que hemos cortado el servicio por falta de pago. Simplemente lo identifica con 0 o 1 si esta activo y por supuesto lo activa/desactiva del access-list, identificándolo con el campo anterior «ip_equipo_inalambrico».
Tabla Puntos_de_acceso: Aquí cargaremos en cada localidad (ejemplo: Liniers) y categoría (ejemplo: 2,4 Ghz), el o los puntos de acceso que necesitemos. Entonces si en Liniers tenemos 2 o 3 puntos de acceso, el cliente lo va a buscar en los 3 puntos de acceso hasta que lo encuentre. Por supuesto que si tenemos muchos puntos de acceso para 1 localidad quizás se pueda hacer mas lenta la busqueda. De todos modos podemos crear «Barrios o Zonas» (en vez de localidades) para que el sistema haga mas rapida la busqueda. Se entiende?. Aqui hay 2 cosas a recalcar, Cuando busca un cliente, lo busca «conectado» en el wireless-registration-table, esto es asi, para poder usar el sistema no solo para desactivar un cliente sino que ademas para poder tomar un reclamo. Y claro que cuando activa o desactiva lo hace en el access-list 🙂 .

CREATE DATABASE IF NOT EXISTS `manage_isp` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `manage_isp`;

CREATE TABLE `categorias` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `descripcion` char(100) DEFAULT '0',
  `default` int(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

CREATE TABLE `internet` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `numloca` int(2) NOT NULL DEFAULT '1',
  `apellido` char(100) DEFAULT NULL,
  `descripcion` char(100) DEFAULT NULL,
  `categoria` int(1) DEFAULT '0',
  `ip_equipo_inalambrico` char(40) DEFAULT NULL,
  `activo` int(1) DEFAULT NULL,
  `fecha_alta` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

CREATE TABLE `localidades` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` char(80) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

CREATE TABLE `puntos_de_acceso` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` char(50) DEFAULT NULL,
  `localidad` int(6) DEFAULT NULL,
  `categoria` int(6) DEFAULT NULL,
  `modo_neighbords` int(1) DEFAULT NULL,
  `ip` char(15) DEFAULT NULL,
  `puerto` int(5) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

Estructura de la base de datos: Pueden importar el achivo «.sql» que esta junto a los archivos a descargar, y luego lo borran por seguridad.

Pantalla principal:
main

1) Primer paso, recomiendo cargar las localidades, para ello vamos a {Nueva Localidad}.
nueva_localida

2) Luego volvemos a la pantalla principal cargamos los Nodos AP o puntos de acceso en el link {Nuevo Punto de Acceso}
nuevo_nodo
Aqui necesitaremos elegir la localidad ( o zona), por eso es importante que primero carguemos las localidades del paso 1.
Para que el API pueda ver la señal de los equipos en el Wireless registration table de cada RB, tenemos que elegir la categoría «INALAMB 2,4» y el modo «Mikrotik Wireless»
Y finalmente, lo mas importante, tenemos que cargar la IP y puerto de nuestro Routerboard para esa localidad o zona que estemos generando. Si el RB tiene una IP privada, hacemos un port-forwarding en el router donde este la IP publica.
El modo «Mikrotik Neighbords» No esta probado pero debería estar funcionando, se usa para la categoría «INALAMB 5,8» y poder ver si el equipo cliente esta conectado. Como se trata de un AP «Ubiquiti Rocket» del cual no tenemos acceso mediante el API, lo que hacemos es acceder al API del router principal donde se encuentra conectado el Rocket y acceder al IP-Neighbords. Este nos va a mostrar todos los clientes (si el equipo esta encendido) para poder atender un reclamo y ademas ver cual es su firmware.

3) Volvemos a la pantalla principal y hacemos click sobre algun cliente.
Como ejemplo hay 2 para clickear. Editamos la localidad y categoría, presionamos en el boton [Guardar] y volvemos a entrar. Finalmente, donde dice «Ip Equipo», le ingresamos la IP o algun identificador que hayamos puesto en el comentario del access-list. Si presionan [Enter] hara una busqueda para, si el cliente esta conectado en este momento, trae sus datos.
modificar_cliente

En IP Equipo podemos poner lo que haya en el comentario, me ha pasado que no toma la primer palabra, siempre las ultimas. Tiene que ser un identificador «Unico» ya que con esto controlaremos si se activa o desactiva.
Al darle [enter], deberiamos ver datos de señal, CCQ, TimeUp. Etc. Como ejemplo les pongo una imagen de otro sistema que había hecho para uso propio.
Vean que, usando su imaginacion pueden integrar todo lo que deseen.
ejemplo_sistema

4) Volvemos a la pantalla principal y veremos que en el link {Nuevo Cliente} aparece la pantalla:
nuevo_cliente

Revisen como esta hecho y veran que es muy facil editarlo. Cualquier duda, sugerencia o error, seran contestados aqui en los comentarios.

Les dejo el link para descargar los archivos.

Saludos amigos!!
___________________________
Publicado primero en tech-nico.com

8 Comentarios

  1. Este sistema se ve bien interesante, aunque un poco complicado de implementar para los novatos como yo. De todas formas, voy a analizarlo cuando tenga un poco más de tiempo.

    Gracias Nico!

  2. Tengo una idea! Para No agregar muchísimos usuarios y ahorrar tiempo !se podrá hacer un sistema de recargas ! parecido a las recargas TAE! A los clientes recarguen por hora, semana, mes ! etc!

  3. Muy lindo esta la imagen que subiste de tu proyecto propio ojala te animes a compartirlo con nosotros, por todos lados eh buscado algo como el tuyo con mysql para llevar un registro de los clientes y si fuera posible enlazarlos con el address list del mikrotik.

  4. hola amigo cual seria el resultado si borro las tablas creadas en tu ejemplo para crearla nueva? y como me aconsejaria crear un registro de clientes

  5. Hola que tal. Me encanta el proyecto. Sabes yo quisiera implementar algo muy simple en WHMCS, un módulo con todo lo que has puesto aquí, es decir con toda la información que has puesto en esta serie de artículos. Yo estoy comenzando en esto del ISP, tengo pocos clientes aun pero quiero poner las cosas en automatico. Por eso estoy utilizando el WHMCS. Quiero un módulo que permita q cuando un cliente no pague, el sistema le corte el servicio automáticamente a través de las APIs de mikrotik. y cuando el cliente pague (digamos con su tarjeta de credito) el sistema le reconecte en automático a traves de las API. Yo uso básicamente el sistema de ip fija LAN para asignarle a cada cliente su enlace de conexión. También tengo el amarre por IP-MAC, y obviamente el Queue simple para control de ancho de banda. Has hecho alguna vez algo asó para WHMCS?

Deja un comentario