En este artículo, intentaré describir paso a paso el proceso de instalación de un servidor de prueba del magnífico proyecto , hasta un estado completamente operativo, y mostrar trucos prácticos para trabajar con Mikrotik: configuración a través de parámetros, ejecución de scripts, actualizaciones, instalación de módulos adicionales, etc.
El objetivo del artículo es motivar a los colegas a abandonar la gestión de dispositivos de red con horribles trampas y parches, como scripts personalizados, Dude, Ansible, etc. Y, al respecto, generar fuegos artificiales y celebraciones masivas en las plazas.
0. Selección
¿Por qué Freeacs y no genie-acs, mencionado en , como más activo?
Porque con genie-acs sobre Mikrotik hay publicaciones de españoles. Aquí están y del MUM del año pasado. Los autoshares en las diapositivas son geniales, pero me gustaría alejarme del concepto de escribir scripts, para ejecutar scripts, para ejecutar scripts…
1. Instalación de freeacs
Lo instalaremos en Centos7, y dado que los dispositivos transfieren una cantidad considerable de datos, y el ACS trabaja activamente con la base de datos, no ahorraremos recursos. Para un funcionamiento cómodo destinaremos 2 núcleos de CPU, 4 GB de RAM y 16 GB de almacenamiento rápido ssd raid10. Voy a instalar Freeacs en un contenedor LXC de Proxmox VE, pero ustedes pueden trabajar en cualquier herramienta que les resulte cómoda.
No olviden configurar el horario correcto en la máquina con ACS.
El sistema será de prueba, así que no complicaremos las cosas y simplemente utilizaremos el script de instalación amablemente proporcionado, tal como está.
wget https://raw.githubusercontent.com/freeacs/freeacs/master/scripts/install_centos.sh
chmod +x install_centos.sh
./install_centos.shTan pronto como termine el funcionamiento del script, podrán acceder a la interfaz web a través de la IP de la máquina, con las credenciales admin/freeacs

Así es como se ve una interfaz minimalista agradable, y qué bien y rápido ha resultado todo
2. Configuración inicial de freeacs
La unidad básica de control para el ACS es una unidad o CPE (Equipo de Cliente). Y lo más importante que necesitamos para gestionar las unidades es su Tipo de Unidad, es decir, el modelo de equipo que determina el conjunto de parámetros configurables de la unidad y su software. Pero como aún no sabemos cómo introducir correctamente un nuevo Tipo de Unidad, lo mejor será preguntar al mismo dispositivo, activando el Modo de Descubrimiento.
En producción, este modo no debe usarse bajo ninguna circunstancia, pero necesitamos hacer funcionar el motor y explorar las capacidades del sistema. Todas las configuraciones principales se almacenan en /opt/freeacs-*. Por lo tanto, abrimos
vi /opt/freeacs-tr069/config/application-config.conf , encontramos
discovery.mode = falsey lo cambiamos a
discovery.mode = trueAdemás, sería recomendable aumentar los tamaños máximos de los archivos con los que trabajarán nginx y mysql. Para mysql, añadimos en /etc/my.cnf la línea
max_allowed_packet=32M, y para nginx, en /etc/nginx/nginx.conf añadimos
client_max_body_size 32m;en la sección http. De lo contrario, solo podremos trabajar con firmware de hasta 1M.
Reiniciamos y estamos listos para trabajar con los dispositivos.
Y como dispositivo (CPE) usaremos el pequeño trabajador .
Antes de la conexión de prueba, es recomendable configurar manualmente el CPE a una configuración de trabajo mínima, para que los parámetros que desees configurar en el futuro no estén vacíos. Para el router, se puede activar el cliente DHCP en ether1, instalar el paquete tr-069client y establecer las contraseñas.
3. Conectamos Mikrotik
Se recomienda conectar todas las unidades utilizando un número de serie válido como nombre de usuario. Así tendrás todo claro en los registros. Algunos aconsejan usar la MAC WAN — no les creas. Otros utilizan un par de login/contraseña común para todos — evítalos.
Abrimos el registro tr-069 para monitorear las "negociaciones"
tail -f /var/log/freeacs-tr069/tr069-conversation.logAbrimos winbox, en el menú TR-069.
URL del ACS: http://10.110.0.109/tr069/prov (reemplazar por tu IP)
Nombre de usuario: 9249094C26CB (copiamos el número de serie de system>routerboard)
Contraseña: 123456 (no se necesita para el descubrimiento, pero debe estar presente)
No cambiamos el intervalo de informaciones periódicas. Esta configuración la emitiremos a través de nuestro ACS.
A continuación están las configuraciones para la inicialización remota de la conexión, pero no pude hacer que mikrotik funcionara con esto de inmediato. Aunque con los teléfonos, la solicitud remota funciona "de inmediato". Tendremos que investigarlo.

Después de presionar el botón Aplicar, comenzará el intercambio de datos en la terminal, y en la interfaz web de Freeacs se podrá ver nuestro router con el tipo de unidad creado automáticamente "hAPaclite".

Router conectado. Se puede ver el tipo de unidad creado automáticamente. Abrimos Easy Provisioning > Unit Type > Unit Type Overview > hAPaclite. ¡Lo que hay aquí! Un total de 928 parámetros (lo vi en shell). Si esto es mucho o poco, lo analizaremos después, pero por ahora echaremos un vistazo rápido. Esto es lo que significa Tipo de Unidad. Es una lista de parámetros soportados con claves, pero sin valores. Los valores se establecen en niveles inferiores: en Perfiles y Unidades.
4. Configurando Mikrotik
Ha llegado el momento de descargar Este manual es de 2011, como una botella de buen vino añejado. Abrámoslo y dejémoslo respirar.
Y nosotros, en la interfaz web, haremos clic en el lápiz junto a nuestra unidad y pasaremos al modo de configuración de la unidad. Así es como se ve:

Analicemos brevemente qué es interesante en esta página:
Bloque de configuración de la unidad
- Perfil: Este es un perfil dentro del Tipo de Unidad. La jerarquía es la siguiente:
TipoUnidad > Perfil > Unidad. Es decir, podemos crear, por ejemplo, perfileshAPaclite > hotspotyhAPaclite > branch, pero dentro del modelo del dispositivo
Bloque de Aprovisionamiento con botones
Las sugerencias sugieren que todos los botones en el bloque de Aprovisionamiento pueden aplicar la configuración instantáneamente a través de ConnectionRequestURL. Pero, como mencioné antes, esto no funciona, por lo que después de presionar los botones, será necesario reiniciar el cliente tr-069 en mikrotik para iniciar manualmente el aprovisionamiento.
- Freq/Spread: Cuántas veces por semana entregar la configuración ± %, para reducir la carga en el servidor y los canales de comunicación. Por defecto se establece en 7/20, es decir, cada día ± 20% y la sugerencia de cómo esto se traduce en segundos. No tiene sentido cambiar la frecuencia de entrega por ahora, ya que habrá ruido adicional en los registros y no siempre se aplicarán las configuraciones como se espera.
Bloque de historial de aprovisionamiento (últimas 48 horas)
- A simple vista, el historial es como cualquier otro, pero al hacer clic en el encabezado, se accede a una herramienta de búsqueda cómoda en la base de datos, con regexp y funciones adicionales.
Bloque de Parámetros
El bloque más grande e importante, donde, de hecho, se establecen y leen los parámetros para esta unidad. Ahora vemos solo los parámetros del sistema más importantes, sin los cuales el funcionamiento del ACS con la unidad es imposible. Pero recordamos que en el Tipo de Unidad hay — 928. Vamos a ver todos los valores y decidamos con qué se alimenta esto en mikrotik.
4.1 Leemos los parámetros
En el bloque de Aprovisionamiento, presionamos el botón Leer todo. En el bloque, aparecerá un texto rojo. A la derecha aparecerá una columna CPE (valor actual). En los parámetros del sistema, ProvisioningMode cambió a READALL.

Y… no pasará nada, excepto por un mensaje en System.X_FREEACS-COM.IM.Message Error de inicio en....
Reinicie el cliente TR-069 o reinicie el enrutador y siga actualizando la página del navegador hasta que obtenga a la derecha los parámetros en rectángulos grises alegres.
Si alguien desea probar algo antiguo y añejo, este modo se describe en el manual como 10.2 Modo de Inspección. Se activa y funciona de manera un poco diferente, pero la idea está bastante clara.

El modo READALL se apagará automáticamente después de 15 minutos, y trataremos de entender qué hay de útil aquí y qué se puede ajustar 'sobre la marcha' mientras estamos en este modo.
Se pueden cambiar las direcciones IP, activar/desactivar interfaces, reglas del firewall con comentarios (de lo contrario, es un completo caos), Wi-Fi y otras pequeñas cosas.
Es decir, es razonablemente imposible configurar Mikrotik solo con herramientas de TR-069 por el momento. Pero se puede monitorear bastante bien. Hay estadísticas disponibles sobre las interfaces y su estado, memoria libre, etc.
4.2 Enviando parámetros
Ahora intentemos enviar parámetros al enrutador a través de TR-069, de manera 'natural'. La primera víctima será Device.DeviceInfo.X_MIKROTIK_SystemIdentity. Lo encontramos en los parámetros de la unidad All. Como se puede ver, no está definido. Esto significa que cualquier unidad puede tener cualquier identidad por sí misma. ¡Ya es suficiente!
Marcamos la casilla en la columna create, asignamos el nombre Mr.White y presionamos el botón Update parameters. Ya saben lo que pasará después. En la próxima sesión de comunicación con la sede, el enrutador debe cambiar su identidad.

Pero esto no es suficiente. Un parámetro como la identidad siempre es bueno tener a mano al buscar la unidad adecuada. Hacemos clic en el nombre del parámetro y marcamos las casillas Display(D) y Searchable(S). La clave del parámetro cambia a RWSD (Recuerden, los nombres y claves se definen en el nivel más alto del tipo de unidad).

El valor ahora no solo se muestra en la lista general de búsqueda, sino que también está disponible para buscar en Support > Search > Advanced form

Iniciamos el provisionamiento y miramos la identidad. ¡Hola, Mr.White! Ahora no podrás cambiar tu disfraz mientras el cliente TR-069 esté activo.

4.3 Ejecutando scripts
Ya que hemos decidido que no podemos prescindir de ellos, vamos a ejecutarlos.
Pero antes de comenzar a trabajar con los archivos, debemos ajustar la directiva public.url en el archivo /opt/freeacs-tr069/config/application-config.conf
Todavía tenemos una configuración de prueba, instalada con un solo script. ¿No lo olvidaste?
# --- Public url (used for download f. ex.) ---
public.url = "http://10.110.0.109"
public.url: ${?PUBLIC_URL}Reiniciamos el ACS y nos dirigimos directamente a Files & Scripts.

Pero lo que se abre ahora para nosotros pertenece a Unit Type, es decir, globalmente a todos los enrutadores hAP ac lite, ya sea un enrutador de sucursal, hotspot o capsman. No necesitamos un nivel tan alto por ahora, así que, antes de trabajar con scripts y archivos, debemos crear un perfil. Podemos llamarlo como "cargo" del dispositivo.
Hagamos de nuestro pequeño un servidor de tiempo. Un cargo digno con un paquete de software específico y un pequeño número de parámetros. Vamos a Easy Provisioning > Profile > Create Profile y creamos en Unit Type:hAPaclite un perfil timeserver. No teníamos parámetros en el perfil predeterminado, así que no hay nada que copiar. Copy parameters from: «don’t copy…»

Aquí no hay parámetros por ahora, pero podremos establecer los que más adelante queramos ver en nuestros servidores de tiempo, hechos de hAPaclite. Por ejemplo, las direcciones comunes de los servidores NTP.
Cambiamos a la configuración del unit y lo movemos al perfil timeserver.
Finalmente vamos a Files & Scripts, hacer scripts, y aquí nos esperan características sorprendentemente cómodas.
Para ejecutar un script en el unit, necesitamos seleccionar Type:TR069_SCRIPT y Nombre y Target Name deben tener la extensión .alter
A diferencia del software, para los scripts se puede cargar un archivo listo o simplemente escribir/editarlo en el campo Content. Intentemos escribir directamente allí.
Y para ver el resultado de inmediato, agreguemos un vlan al enrutador en ether1.
/interface vlan
add interface=ether1 name=vlan1 vlan-id=1
Escribimos, presionamos Upload y listo. Nuestro script vlan1.alter está esperando su momento.
Entonces, ¿empezamos? No. También necesitamos agregar un grupo para nuestro perfil. Los grupos no forman parte de la jerarquía del hardware, pero son necesarios para buscar units en UnitType o Profile y son obligatorios para ejecutar scripts a través de Advanced Provisioning. Por lo general, los grupos están relacionados con ubicaciones y tienen una estructura jerárquica. Haremos un grupo llamado Rusia.

¿Te imaginas? Acabamos de reducir la búsqueda de "Todos los servidores de tiempo del mundo en hAPaclite" a "Todos los servidores de tiempo de Rusia en hAPaclite". Hay una gran cantidad de información interesante sobre grupos, pero no tenemos tiempo. Vamos a los scripts.
Advanced Provisioning > Job > Create Job
Dado que estamos en Modo Avanzado, aquí se pueden especificar un montón de diferentes condiciones para el inicio de la tarea, el comportamiento ante errores, repeticiones y timeouts. Recomiendo leer todo esto en los manuales o lo discutiremos más adelante al implementar en producción. Por ahora solo colocaremos n1 en las reglas de Detención, para que la tarea se detenga tan pronto como se ejecute en nuestra unidad 1.
Llenamos lo necesario y solo queda iniciar.

Hacemos clic en INICIO y esperamos. ¡Ahora el contador de dispositivos que han sido afectados por el script defectuoso comenzará a correr rápidamente! No, por supuesto. Tales tareas se dan por mucho tiempo, y esta es su diferencia con scripts, Ansible, y similares. Las unidades solicitan tareas según un horario o a medida que aparecen en la red, el ACS lleva un registro de qué unidades ya han recibido tareas y cómo se han completado, y lo registra en los parámetros de la unidad. En nuestro grupo hay 1 unidad, pero si hubiera 1001, el admin habría lanzado esta tarea y se habría ido a pescar.
Vamos. Reinicia el router o reinicia el cliente TR-069. Todo debería salir bien y Mr.White obtendrá un nuevo vlan. Y nuestra tarea con la regla de Detención pasará al estado PAUSADO. Es decir, aún se podrá reiniciar o modificar. Si se presiona FINALIZAR, la tarea se archivará.
4.4 Actualizando el Software
Este es un punto muy importante, ya que el firmware de MikroTik es modular, pero la adición de módulos no cambia la versión general del firmware del dispositivo. Nuestro ACS es normal y no está acostumbrado a eso.
Ahora haremos esto de manera rápida y sucia, y meteremos el módulo NTP directamente en el firmware generado, pero una vez que la versión del dispositivo se actualice, no podremos agregar más módulos de la misma manera.
En producción, es mejor no aplicar este truco y sólo instalar módulos opcionales para el Tipo de Unidad mediante scripts.
Así que, lo primero que necesitamos hacer es preparar los paquetes de software de las versiones y arquitecturas necesarias, y colocarlos en algún servidor web accesible. Para probar sirve cualquiera al que nuestro Mr.White pueda acceder, pero para producción es mejor crear un espejo autoactualizable del software necesario que no sea problemático exhibir en la web.
¡Importante! ¡No olvides incluir siempre en las actualizaciones el paquete con tr-069client!
¡Como resultó, la longitud de la ruta a los paquetes es muy importante! Durante mis intentos de usar algo como http://192.168.0.237/routeros/stable/mipsbe/routeros-mipsbe-6.45.6.npk, Mikrotik caía en un bucle cíclico con el recurso, registrando en el log tr-069 repeticiones de TRANSFERCOMPLETE. Y gasté algunas neuronas tratando de averiguar qué estaba mal. Por lo tanto, por ahora lo dejaremos en raíz, hasta aclarar
Entonces, debemos tener tres archivos npk disponibles por http. Así me salió a mí
http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/routeros/stable/mipsbe/tr069-client-6.45.6-mipsbe.npkAhora esto necesita ser formateado en un archivo xml con FileType="1 Firmware Upgrade Image", que alimentaremos al Mikrotik. Que el nombre sea ros.xml
Hacemos según las instrucciones de :
http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/tr069-client-6.45.6-mipsbe.npkSe nota la falta de Nombre de usuario/Contraseña para acceder al servidor de carga. Se puede intentar escribir esto como en el punto A.3.2.8 del protocolo tr-069:
http://192.168.0.237/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
user
passO preguntar directamente a los oficiales de Mikrotik, así como sobre la longitud máxima del camino hasta *.npk
Vamos a los conocidos Files & Scripts, y allí creamos un archivo tipo SOFTWARE con Nombre:ros.xml, Nombre del objetivo:ros.xml y Versión:6.45.6
¡Atención! La versión aquí debe ser indicada exactamente en el formato en que se muestra en el dispositivo y se transmite en el parámetro System.X_FREEACS-COM.Device.SoftwareVersion.
Seleccionamos para cargar nuestro archivo xml y listo.

Ahora tenemos muchas maneras de actualizar el dispositivo. A través del asistente en el menú principal, a través de Provisioning Avanzado y tareas con tipo SOFTWARE, o simplemente entrar en la configuración de la unidad y presionar Upgrade. Elegiremos el camino más simple, ya que el artículo ya se ha alargado.

Presionamos el botón, iniciamos el provision y listo. El programa de prueba ha terminado. Ahora sabemos hacer más con Mikrotik.
5. Conclusión
Cuando empecé a escribir, quería al principio describir la conexión del teléfono IP y con su ejemplo explicar lo genial que puede ser cuando tr-069 funciona fácil y sin esfuerzo. Pero luego, a medida que avanzaba y profundizaba en los materiales, pensé que para quien conectó Mikrotik, ningún teléfono será un temor para el autoestudio.
En principio, Freeacs, que hemos probado, ya se puede aplicar en producción, pero para ello es necesario configurar la seguridad, SSL, ajustar los Mikrotik para la autoconfiguración después del reinicio, depurar la correcta adición del Tipo de Unidad, analizar el funcionamiento de los servicios web y del fusion shell, y mucho más. ¡Prueben, inventen y escriban la continuación!
¡A todos, gracias por su atención! Estaré encantado de recibir correcciones y comentarios.
Lista de materiales utilizados y enlaces útiles:
Fuente: habr.com
