viernes, 26 de abril de 2013

MONITOREO DE REDES DE DATOS - 2. SMOKEPING


1. SMOKEPING

C. Andrés Gómez R.
Bogotá, Noviembre 2012


Smokeping es una herramienta de medición y graficación de latencias en una red de datos.

Smokeping es una herramienta basada en el algoritmo Round-Robin que permite el monitoreo de latencias de diferentes servicios en una red de datos. Smokeping permite visualizar el comportamiento actual es histórico de las latencias de los dispositivos de red.
Además smokeping permite incluir funcionalidades de alertar comportamientos no deseados, complemetando así los sistemas de monitore de redes.
Smokeping usa las herramientas RRDTool, las cuales implementan el algoritmo Roud-Robin al almacenamiento de datos de sistemas de redes de datos.


Smokeping es un software que envia paquetes ICMP a equipos de la red (definidos en la configuración) y hace una gráfica estadística donde se dibuja una línea principal que representa los valores medios de latencia, y otros gráficos con sombras grises (“humo”) que presentan todos los valores medios.
Para cada ronda de medición smokeping envía varios paquetes, luego los ordena según los tiempos de respuesta y toma el valor medio y ese corresponde a la línea graficada, los otros valores se dibujan como tonos más claros de gris sucesivamente en el fondo (humo).


Instalación.

Smokeping tiene las siguientes dependencias:

RRDtool
Smokeping usa RRDtool para guardar los logs del sistema y para generar las gráficas. Usar RRDtool 1.2.x o más nuevo.

Curl
curl es una herramienta de línea de comandos para transferiri datos un sintaxys URL, y soporta los protocolos DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet y TFTP. Curl soporta certificados SSL, HTTP POST, HTTP PUT, FTP uploading, formatos HTTP para upload, proxies, cookies, autenticación user+password.

Apache2
Servidor web.

Perl
es un lenguaje de programación muy usado en aplicaciones web

Para instalar estas dependencias, se pueden usar diferentes alternativas en SO GNU/Linux; las más habituales es hacerlo desde los servidores de repositorios de cada S.O., algunas alternativas serian:

sudo apt-get install rrdtool curl apache2 perl
sudo yum install rrdtool curl httpd perl

Luego se instala el paquete de smokeping de la misma forma:


sudo apt-get install smokeping sendmail
sudo yum install smokeping sendmail

Configuración

cd /etc/apache2/conf-available
sudo ln -s ../../smokeping/apache2.conf smokeping.conf

sudo a2enmod cgid
/etc/init.d/apache2 restart 


Los archivos de configuración residen en /etc/smokeping/config.d/

Básicamente se configura smokeping con 2 archivos:

/etc/smokeping/config.d/pathnames : configura el nombre del servidor, los datos de aldministrador y sus datos de contacto.

/etc/smokeping/config.d/Targets: configura los dispositivos a monitorear



Configuración de los datos del administrador.




Configuración de los datos de los dispositivos a monitorear.

*** Targets ***

probe = FPing

## You have to edit and uncomment all what you want below this.
# Please, refer to smokeping_config man page for more info
# The given adresses aren't real to avoid DoS.

menu = Top
title = Graficador de latencias en la red
remark = Graficador de latencias

+ Local

menu = Local
title = Local Network

++ LocalMachine
menu = Local Machine
title = This host
host = localhost

### Configuración de algunos clientes que se encuentran
### en la red local
+ SERVIDORES
menu = SERVIDORES
title = SERVIDORES

++ ServidorVirtualizacion
menu = Virtualizacion 192.168.0.10
title = Virtualizacion 192.168.0.10
host = 192.168.0.10

### Configuracion de dispositivos en internet
+ INTERNET
menu = INTERNET
title = INTERNET

++ Router
menu = google 8.8.8.8
title = google 8.8.8.8
host = 8.8.8.8

### Configuracion de dispositivos en red, "impresoras,router,etc"
### en la red local
+ DISPOSITVOS
menu = DISPOSITIVOS
title = DISPOSITIVOS

++ Router
menu = Router 192.168.30.1
title = Router 192.168.30.1
host = 192.168.30.1

++ Impresora
menu = Router 192.168.30.4
title = Router 192.168.30.4
host = 192.168.30.4

++Hosts
menu = Router 192.168.30.102
title = Router 192.168.30.102
host = 192.168.30.102

++ LocalMachine
menu = Router 192.168.30.104
title = Router 192.168.30.104
host = 192.168.30.104


Con el Archivo Targets se crea el menú de dispostivos a monitorear, que encontraremos en la interfáz gráfica, y de los cuales se generaran los gráficos.

La systaxis es muy sencilla:

++ NOMBRE DEL MENU
menu = NOMBRE DEL SUBMENU
title = TITULO
host = DIRECCION IP O DOMINIO


Luego de cada modificación es necesario reiniciar el servicio de smokeping, asi:

# /etc/init.d/smokeping restart

Ya se puede acudir a un navegador web y entrar a la interfaz gráfica mediante:

http://DIRECCIONIPDELSERVIDOR/cgi-bin/smokeping.cgi

Aparerá la interfaz de smokeping con los mensajes de benvenida que se configuraron en /etc/smokeping/config.d/pathnames




Monitorización de equipos.

A Continuación los gráficos obtenidos con la implementación de smokeping:



 

MONITOREO DE REDES DE DATOS - 1



1. NOCIONES BÁSICAS

C. Andrés Gómez R.

A continuación se relacionan los elementos que se han vuelto estándar mínimo en las redes de datos, y que por tanto se pueden adoptar en las redes abiertas.
Como elemento básico se explicará el protocolo simple de administración de red SNMP que entre otras cosas, fija la arquitectura mínima de una red monitoreada. Se continua explicando lo que es un sistema de administración de red, NMS, parte importate de una red monitoreada con el protocolo SNMP.
Se mencionan los MIB (Base de información de administración) como los elementos ordenados que permiten ser informados mediante SNMP, y que posibilitan el diseño de nuevas estructuras de monitoreo.


SNMP Simple Network Management Protocol.

Es un protocolo que actua en la capa de aplicación del modelo OSI, y fue diseñado para intercambiar información de administración entre dispositivos de red.
SNMP ha sido el estándar que ha definido la estructura de las redes monitoreadas y administradas, es por eso que se toma en este texto como referente para monitorizar y analizar el rendimiento de una red de datos

SNMP tiene tres versiones a la actualidad, sin embargo la versión estandar en la actualidad ya que ha sido implementada por la mayoria de fabricantes de equipos es la segunda version SNMPv2.
La SNMPv1 puede ser consultada en el RFC 1157 de la IETF: http://www.ietf.org/rfc/rfc1157.txt
La SNMPv2 puede ser consultada en las RFC 1901 – 1910 de la IETF: http://www.ietf.org/rfc/rfc1901.txt


En este texto se tratará la version 2 del protocolo en mención.
El RFC1901 define claramente los elementos del SNMPv2: “un sistema de administración contiene: muchos nodos, los cuales tienen una entidad, un agente, con lo cual se puede acceder a la instrumentación de la administración; y un protocolo de administración usado para transmitir información de administración entre los agentes y las estaciones de administración...” [1]
Así, una red de monitoreo y administración se conforma de:
- Dispositivos administrados con agentes de administración (hosts, routers, terminal, ... )
- Estaciones de administración (al menos una)
- Sistemas administradores de red (NMS)


Datos SNMP

El protocolo se basa en conexiones de tipo UDP (no orientadas a conexión) para enviar pequeños paquetes de datos entre los equipos de la red (agentes SNMP) y el administrador (equipos servidor NMS)

Los puertos comúnmente utilizados para SNMP son los siguientes[2]:
Número
Descripción
161
SNMP
162


Los paquetes utilizados para enviar consultas y respuestas SNMP poseen el siguiente formato:
Versión (entero)
Comunidad (String octeto)
Datos SNMP PDU


SNMP-Traps son paquetes enviados por el agente para informar de acontecimientos inusuales en su entorno, p.e. un reboot, demasiado trafico en la red, un router que deja de responder, etc. Son la excepción a la regla que expongo en el siguiente párrafo, ya que los envía el agente sin haberlos solicitado previamente el manager.

Estructura de la información de administración


La información de administración es vista como una colección de objetos administrados, la infromación reside en unas unidades virtuales de información llamadas Base de Infromación de Administración MIB (Management Information Base)
MIB es una colección de información que está organizada jerárquicamente. Las MIB’s son accedidas usando un protocolo de administración de red, como por ejemplo, SNMP.
Un objeto administrado (algunas veces llamado objeto MIB, objeto, o MIB) es uno de cualquier número de características específicas de un dispositivo administrado. Los objetos administrados están compuestos de una o más instancias de objeto, que son esencialmente variables.


Existen dos tipos de nodos en el Arbol MIB: estructurales y de información.
Los nodos estructurales sólo tienen descrita su posición en el árbol. Son "ramas". Por ejemplo:
ip OBJECT IDENTIFIER ::= { 1 3 6 1 2 1 4 }
Los nodos con información son nodos "hoja". De ellos no cuelga ningún otro nodo. Estos nodos están basados en la macro OBJECT TYPE, por ejemplo:
ipInReceives OBJECT TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION "texto descriptivo indicando para qué vale"
::= { ip 3 }
Este fragmento ASN.1 nos indica que el objeto "ipInReceives" es un contador de sólo lectura que es obligatorio incorporar si se quiere ser compatible con la MIB-II (aunque luego no se utilice) y que cuelga del nodo ip con valor tres.


Así, los MIB se puenden entender como arboles de datos de información de adminsitración, que son soportados por los fabricantes de dispositivos de red.
El desarrollo de sistemas de administración y monitoreo de red para marcas específicas ha hecho que los fabricantes creen MIBs fuera del estándar, y que algunos parámetros propietarios de los equipos de red (como protocolos propiearios) solo sean monitoreados si se conoce las MIB en cuestión. Esta situación hace que el monitoreo particular de ciertas variables de ciertos equipos deje de ser estándar, y se tenga que acudir a sistemas propietarios. Sin embargo, el monitoreo de sistemas estándar se pueden hacer con herramientas libres, sin modificaciones.


Sistemas de Administración de Red, NMS


Un NMS es un conjunto completo de herramientas de software y hardware implementadas para monitorear y administrar una red de computadores, por medio del uso de protocolos de administración y monitoreo, como lo es SNMP.


Los NMS puede funcionar bajo los estándares actuales de la tecnología de redes de computadores, o también adicionar implementaciones propietarias para poder monitorear y administrar funcionalidades no estandar de fabricantes de elementos de red.


En software libre existen muchas opciones de implementar sistemas NMS, dentro de los cuales se puede enunciar los 2 grandes software: OpenNMS y Nagios.




Algunas herramientas para entender SNMP y MIB en GNU/Linux


En los sistemas GNU/Linux se pueden implementar algunos paquetes que permiten comunicarse con elementos de red mediante el protocolo SNMP, y leer o modificar los parámetros que por dicho protocolo se usan. Algunos de duchos paquetes son:


snmpget
Este programa sirve para obtener información de la base de datos, mediante las peticiones get-requests que envia el software NMS a los agentes SNMP.


snmpset
Programa que se puede usar para modificar el contenido de la base de datos MIB,


snmpwalk
Programa muy útil para examinar una base de datos, sin tener que pedir cada variable una a una.


En los archivos anexos se encuentran los archivos de salida del comando snmpwalk aplicados a dos equipos wireless conectados en topologia AP-STATION con el servicio snmp activo mediante la comunidad “public”; recopilados con el comando:
snmpwalk -v1 -c public DIRECCCIONIP


Adicionalmente se pueden instalar software MIB browser al que se le pueden cargar los archivos MIB estándar o de fabricantes, y ayudan a entender la codificación de los árboles MIB.

FUENTES

[1] http://www.ietf.org/rfc/rfc1901.txt 2. Components of the SNMPv2 Framework
[2] http://www.ietf.org/rfc/rfc1906.txt 3. SNMPv2 over UDP. 3.2. Well-known Values
[3] http://www.ietf.org/rfc/rfc1901.txt 2.1. Structure of Management Information


viernes, 19 de abril de 2013

FreeRADIUS, un servidor AAA de software libre. Algunas cuestiones avanzadas: Contadores SQL, accesos simulataneos y restricción de caracteres prohibidos en nombres de usuarios.


Andrés Gómez
Abril 2013






En una red que necesite controlar de forma segura el acceso de clientes, es aconsejable la gestión centralizada de la autenticación de los mismos. Para ello existe el protocolo RADIUS (acrónimo en inglés de Remote Authentication Dial-In User Server).
En general radius trabaja en 3 procesos, como protocolo AAA. En seguridad informática, el acrónimo AAA corresponde a un tipo de protocolos que realizan tres funciones: Autenticación, Autorización y Contabilización (Authentication, Authorization and Accounting en inglés). La expresión protocolo AAA no se refiere pues a un protocolo en particular, sino a una familia de protocolos que ofrecen los tres servicios citados. (Fuente: Wikipedia)

Freeradius es uno de los más populares servidores Radius, y es totalmente software libre (licencia GPL v2).

No voy a detallar como instalar freeradius en una plataforma Linux, ya que hay un excelente tutorial de como hacerlo y además dejarlo funcional con una base de datos MySQL (base de los usuarios y de parámetros de configuración de las sesiones) y una interfaz gráfica web para la gestión del mismo:


Con ese buen tutorial quedará funcional el servidor básico, puede ser lo suficiente que necesiten. Me voy a referir a temas de un nivel intermedio que he tenido que personalizar, como son Contadores SQL, accesos simultáneos y restricción de caracteres prohibidos en nombres de usuarios.


CONTADORES SQL

Los contadores SQL son mecanismo que ya trae el Freeradius (por defecto desactivados) que permite correr ciertas consultas SQL luego de la autorización de un usuario y que permite devolver parámetros al NAS (Servidor de acceso a la red, que usualmente es un router) para que alimente ciertos parámetros contenidos en los Diccionarios de parámetros que entiende cada NAS y que aunque muchos son parámetros estándar, otros dependen de marcas de equipos. Por ejemplo el contador lo usé para hacer perfiles de navegación (clientes que podian acceder a la red por 4 horas, 1 dia, 1 semana, etc.) y que en cada autenticación calculara cuanto tiempo le quedaba disponible, y luego inhabilitara el acceso de dicho usuario cuando se había acabado su tiempo.

Si se sigue el tutorial mencionado ya se debió haber habilitado el uso de la base de datos ya en el archivo /etc/freeradius/sites-available/default se debe descomentar la líneas

# See "Autorization Queries" in sql.conf
sql

# See "Accounting Queries" in sql.conf
sql

Y en /etc/freeradius/sites-available/inner-tunnel

# See "Autorization Queries" in sql.conf
sql

Luego, para habilitar los contadores SQL, en el archivo /etc/freeradius/radiusd.conf descomentar la linea

$INCLUDE sql/mysql/counter.conf

Los contadores estan en el archivo

/etc/freeradius/sql/mysql/counter.conf

Allí se pueden editar los contadores (ver ejemplo en wiki http://wiki.freeradius.org/modules/Rlm_sqlcounter )

Para entender el funcionamiento profundo de la base de datos es bueno leer la wiki de freeradius, yo detallaré como usé la base de datos para la autenticación de usuarios agrupados en grupos (perfiles).


La tabla radcheck asocia usuarios y contraseña de usuario, ejemplo

USUARIO1 User-Password := PASSWORD1

La tabla radusergroup asocia el usuario con un grupo

USUARIO1 GRUPO1 0

La tabla radacct la usa Freeradius para registrar toda la actividad de cada usuario.

Así que lo que se hace es crear la cantidad de usuarios deseados en la tabla radcheck y luego asosiar cada usuario a un grupo. Los parámetros de configuración de los perfiles se aplican a los grupos, no a los usuarios, aunque si se puede hacer lo mismo con los usuarios directamente.

La tabla radgroupcheck es la que tendrá los parámetros que van a caracterizar el perfil. En mi caso usé un parámetro estándar para todo NAS (en mi caso routers) “Max-All-Session” que especifica el máximo de SEGUNDOS que podrá estar conectado un usuario. Así, si quiero tener un perfil de 1 mes de acceso, el registro en dicha tabla será:

1MES     Max-All-Session     :=     2592000

Donde 2592000 es la cantidad de segundos que hay en 1 mes estándar (30 días).


Los contadores SQL lo que hacen en mi caso es ejecutar una consulta SQL que finalmente obtendrá una cantidad de segundos que al final se RESTAN de los segundos (en este ejemplo 2592000) que son autorizados para cada usuario del perfil. el resultado de esa resta es el tiempo en segundo autorizado para navegar en esa sesión.

LA estructura de un contador es así:

sqlcounter noresetcounter {
counter-name = Max-All-Session-Time
check-name = Max-All-Session
sqlmod-inst = sql
key = User-Name
reset = never
reject = 1
query = "SELECT IFNULL( GREATEST((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(acctstarttime)), SUM(acctsessiontime)), 1) FROM radacct WHERE username = '%{%k}' LIMIT 1"
Reply-Message := "Tiempo de navegación alcanzado."
}


Donde se debe especificar que se trabaja con la variable Max-All-Session, la clave de evaluación es el User_Name.
El reset tiene un papel importante. Si se pone reset = daily el contador se reseteará a media noche. Entonces si el USUARIO1 agotó su tiempo de acceso el dia de hoy, a partir de media noche podrá volver a acceder.
Yo uso el “reset = never” para que un usuario que se acabó su tiempo de acceso nunca más pueda volver a acceder.
El query es una expresión en SLQ estándar, donde:

UNIX_TIMESTAMP( NOW() ) : fecha y hora de AHORA en formato UNIX
UNIX_TIMESTAMP(acctstarttime): fecha y Hora del primer login dle usuario, en formato UNIX
UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(acctstarttime): esta resta dará en segundos, cuanto tiempo ha pasado desde el tiempo en que el usuario se logueó por primera vez en el servidor, hasta ahora (now).
SUM(acctsessiontime) suma la cantidad total de los registros del campo acctsessiontime (que registra cuantos segundos duró conectado un usuario en cada sesión) y así obtiene el total de tiempo que el usuario ha accedido a la red.
GREATEST((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(acctstarttime)), SUM(acctsessiontime). Elige el mayor valor entre la resta de AHORA con la hora del primer login del usuario, o el total de tiempo que el usuario ha accedido.

Así toda la consulta hace que el servidor ante cada autenticación evalúe cuanto tiempo ha pasado entre el primer momento de autenticación y el momento actual, el valor quedará en segundos; el Greatest se introduce para eventos en el que varios usuarios acceden simultáneamente con el mismo usuario; por ejemplo el USUARIO2 tiene asignado 1 semana de navegación (2592000 segundos) y acceden varios usuarios al mismo tiempo con USUARIO2, cada acceso independiente contará y será probable que los 2592000 segundos se agoten antes de una semana.

Luego de definir los contadores, hay que editar el archivo
/etc/freeradius/sites-available/default

En la parte final de la seccion authorize escribir el nombre de los contadores, ejemplo
authorize {
...
noresetcounter
dailycounter
monthlycounter
}

Reiniciar el servicio.

/etc/init.d/freeradius restart


RECOMENDACION:

correr en modo de debugging para poder identificar problemas.
freeradius -X


AUTENTICACION POR MAC

Solamente hay que usar el parametro Calling-station-Id en la tabla radcheck asociada al user, con la MAC en formato 00:11:22:33:44:55

No es autenticación automática, es un filtro.

USUARIO1 Calling-Station-Id == 00:23:8B:7F:47:DD


LIMITAR ACCESO SIMULTANEO

Para habilitar uso simultaneo de una cuenta, X veces, hacer:

En /etc/freeradius/sql/mysql/dialup.conf descomentar la linea del sript que dice simul_count_query

En la base de datos en la tabla radcheck (si es solo para un usuario) configurar el maximo de sesiones:
USER1 simultaneous-Use := 1

En la base de datos, e la tabla radgroupcheck (si es para todo un grupo) configurar el maximo de sesione:

GRUPO1 simultaneous-Use := 1

donde 1, se peude reemplazar por la cantidad de sesiones simultaneas por usuario.

Cómo opera? La línea que se descomenta es una consulta SQL, así:

SELECT RadAcctId, AcctSessionId, UserName, NASIPAddress, NASPortId, FramedIPAddress, CallingStationId, FramedProtocol FROM `radacct` WHERE UserName='5MNSWJ' AND AcctStopTime IS NULL


Lo que hace es contar cuantas líneas en la tabla "raddacct" de la base de datos tiene el campo "AcctStopTime" como "NULL" para cierto USUARIO. Esto indica que hay una sesión activa y que aún no se a cerrado. Así que el resultante de la consulta son la sesiones activas para cada usuario.
Sin embargo este método tiene ciertos problemas, ya que si por alguna razón (como reinicio del NAS o del servidor FreeRadius) no se terminó correctamente la sesión, el registro quedará de la misma forma incompleto, es decir con el campo "AcctStopTime" como "NULL". Al ejecutar la consulta se tendrán aparentes "sesiones activas" que según la configuración "simultaneous-Use" de la tabla radcheck inahilitarán la conexión del cliente.

Para información... los scripts que permiten hacer verificación de usuario navegado, en la tabla raddact son:

SELECT RadAcctId, AcctSessionId, UserName, NASIPAddress, NASPortId, FramedIPAddress, CallingStationId, FramedProtocol FROM `radacct` WHERE UserName='USUARIO1' AND AcctStopTime IS NULL


SELECT COUNT(*) FROM `radacct` WHERE UserName='USUARIO1' AND AcctStopTime IS NULL


CARACTERES PROHIBIDOS

Para inhabilitar caracteres en el username hay 2 opciones:

- En el archivo /etc/freeradius/sql/mysql/dialup.conf se describe la forma en que se captura el username, por defecto está descomentada la línea:

sql_user_name = "%{User-Name}"

unas cuantas líneas antes está comentada una línea que hace referencia a los caracteres permitidos y empieza asignando la variable "safe-characters". Se puede copiar esta línea y pegarla debajo de la definicion del username, para que quede así (es un ejemplo donde solo se habilitan los caracteres en mayuscutas ABCDEF y se prohíben el resto):

sql_user_name = "%{User-Name}"
safe-characters = "ABCDEF"

Así el username solo puede contener esos caracteres.
Si bien funciona, tiene una consecuencia importante. Si se inhabilitan por este medio caracteres como el : . veremos que no solamente la restricción aplica al username sino a todos los datos que envía el cliente. Entonces en la base de datos por ejemplo, la direccion MAC ya no tendrá los : sino otros caracteres, lo mismo para con otros campos como la direccion IP. Finalmente también se afecta los datos con que responde el servidor al NAS y se tienen efectos como que el SessionTimeLeft no es reconocido por el NAS y así lo clientes no pueden saber cuanto tiempo de navegación les queda.

- Otra opción es crear expresiones regulares "regex" en la rutina de Autorización del Freeradius.

La rutina de autorización (Authorize{}) desde la version 2.x del freeradius se encuentra en /etc/freeradius/sites-available/default, allí es posible crear scripts que validen la autorización de usuarios, o la rechacen. Así que allí se puede ingresar un loop if que evalúe una expresión regular.
Un ejemplo que invalida (reject) un usuario que tenga espacios en blanco sería:

authorize { ##esta linea ya existe en el archivo
if ("%{User-Name}" =~ / /) {
reject
}
} ##esta linea ya existe en el archivo


o pueden ser regex más estructuradas, por ejemplo que inhabilite usuarios con espacios en blanco pero solo en el el inicio o fin del username:

if ( ("%{User-Name}" =~ / $/) || ("%{User-Name}" =~ /^ /) ){
reject
}







miércoles, 6 de marzo de 2013

Recuperar Router/ Access Points



Práctica hecha con dispostivo Ubiquiti Unifi AP.

Se necesita un cable de conversion USB a TTL 3.3v como este: http://www.chipsetcomm.com.tw/products/product.aspx?main=45&sub=202&id=546

la disposicion original de pines NO ES ESTANDAR asi que será necesario ver la hoja de datos del AP a recuperar y la hoja del cable adquirido para organizar los pines. En el caso del Unifi:






Solo se usará los pines de Tierra GND, TX y RX, de forma que el TX del cable se conecta al pin SIN del AP, el RX del cable se conecta al SOUT del AP y las dos tierras GND se unen. (los nombres de los pines pueden cambiar según el AP).

El uso del cable en un sistema GNU/Linux generalmente levantará un dispositivo (device) TTYUSB, así que antes de conectar el cable ejecutar los siguientes comandos:

(hacerse root, en mi caso con Ubuntu: sudo su)
dmesg | grep ttyUSB


Si tiene alguna salida, fijarse cual és, ya que indica que ya hay un dispositivo TERMINAL funcionando en una ttyUSB, usualmente están enumerados ttyUSB0, ttyUSB1, ttyUSB2, etc. En mi caso no tengo salida de discho comando, lo que indica que no tengo este tipo de dispositivos.

Conectar el Cable y ejecutar el mismo comando

(hacerse root, en mi caso con Ubuntu: sudo su)
dmesg | grep ttyUSB

Fijarse de NUEVAS Interfaces ttyUSB, en mi caso:



Además debe dar un aviso informativo de conexion de un cable “USB serial converter”.
En mi caso la /dev/ttyUSB0 es la interfaz que usa el cable USB-TTL para comunicarse.


Cutecom

Aunque lso entornos Uniz tienen varias buenas herrmaientas para comunicación serial (muchas de ellas por consola), usaremos una interfaz gráfica llamada cutecom.

Instalcion:
apt-get install cutecom

ejecución:
sudo cutecom.



En la pestaña device se elije la ttyUSB que ya se detectó.

Hay que averiguar que tasa de baudiso, bits de parada y de datos, y paridad funciona el dispositivo. En el caso de Unifi es 115200 baudiso, 8 bits de datos, bit 1 de parada, y sin paridad. Hacer click en “Abrir Dispositivo”.


Antes de conectar el dispositivo hay una prueba básica que pueden hacer:
Escribir palabras en el campo Input y luego presionar ENTER,... no debe pasar nada en la consola.

Tomar un clip o un pequeño pedazo de cable de cobre y hacer puente entre los pines TX y RX del cable, escribir palabras en el campo Input y presionar ENTER.... en la consola debe aparecer la misma palabra, ya que estamos recibiendo lo que enviamos!! Si es así, el cable, el driver y el software están funcionado correctamente.

Conectar el cable al dispositivo APAGADO según se indicó antes y ENERGIZAR. Deben empezar a ver infromación del AP:




Tan pronto aparezca el mensaje “hit any key to stop autoboot” escribir algo en el espacio input y presionar ENTER para enviar dicho dato, con esto se detenderá el proceso de booting.


Digitar la instrucción “urescue” para que el dispostivo se ponga enmodo de recuperación TFTP con la IP 192.168.1.20 (en el caso de dispositivos Unifi) asi como lo dice la consola.

Configurar la red LAN de tu PC en el segmento 192.168.1.0/24, puede ser con la IP 192.168.1.254

Abrir otra terminal e iniciar sesion tftp mediante

tftp 192.168.1.20




Proceder a cargar el frimware mediante las instrucciones

bin
trace
put ARCHIVOFIRMWARE.bin


Listo!!!





Actualizacion de openWRT

Al compilar OpenWRT se generan binarios con el nombre *sysupdate* que precisamente actualizan el firmware.

Se pasa el archivo binario al directorio /tmp del router,
Luego desde telnet o ssh se debe hacer lo siguiente;

root@OpenWrt:/tmp# cd /tmp
root@OpenWrt:/tmp# sysupgrade -v openwrt-ar71xx-generic-ubnt-unifi-jffs2-sysupgrade.bin

pasará algo así:

etc/sysctl.conf
etc/shells
etc/shadow
etc/rc.local
etc/profile
etc/passwd
etc/inittab
etc/hosts
etc/group
etc/firewall.user
etc/dropbear/dropbear_rsa_host_key
etc/dropbear/dropbear_dss_host_key
etc/config/wireless
etc/config/ubootenv
etc/config/system
etc/config/network
etc/config/firewall
etc/config/dropbear
etc/config/dhcp
Sending TERM to remaining processes ... dnsmasq ntpd syslogd klogd hotplug2 procd ubusd netifd
Sending KILL to remaining processes ...
Switching to ramdisk...
Performing system upgrade...
Unlocking firmware ...
Writing from <stdin> to firmware ...
Appending jffs2 data from /tmp/sysupgrade.tgz to firmware...TRX header not found
Error fixing up TRX header
Upgrade completed
Rebooting system...


Listo!!