Ubiquiti Unifi Controller sobre Debian GNU/Linux 10 (buster)

El objetivo de este trabajo es instalar Ubiquiti Unifi Controller sobre una máquina virtual Debian GNU/Linux 10 (buster) y luego migrar el controlador que inicialmente se instaló en una PC de escritorio.

No voy a profundizar sobre los aspectos de crear un entorno de virtualización, ni de como instalar Debian GNU/Linux 10 (buster). La máquina virtual va a funcionar como un servidor, no es necesaria la interfaz gráfica GUI.

A continuación, los pasos a seguir, pero primero veamos el escenario inicial:

Como se puede ver, es una configuración sencilla y funciona sin problemas.

A medida que pasa el tiempo y la red crece, van surgiendo nuevas necesidades y desafíos.

En este caso es necesario llegar al escenario 2:

Como vemos, se agregó un firewall a la red y también un VMWare ESXi. Es aquí donde surge la posibilidad de montar el UniFi Controller en un servidor virtual, lo cual es mucho mejor que tenerlo instalado en una PC de escritorio.

Para poder liberar una boca del switch también se migró el Access Point a otra interface del firewall, en este caso un pfsense / netgate SG-5100. Al momento de la migración la versión es:

2.4.5-RELEASE-p1 (amd64)

built on Tue Jun 02 17:51:54 EDT 2020

FreeBSD 11.3-STABLE

Planteado así, parece una tarea sencilla, así que voy a ir enumerando las dificultades que fui encontrando y resolviendo.

Bueno, manos a la obra.

Los primeros documentos y guías que encontré hacen referencia a como migrar el UniFi Controller de una máquina a otra, pero no abundan en detalles de requerimientos previos.

Los requisitos no son muchos.

  • Los dispositivos (switch y access point) necesitan poder comunicarse con el controlador en el puerto 8080, para ser más específicos:

http://ip-of-controller:8080/inform

  • El UniFi Controller necesita comunicarse con los dispositivos vía SSH (TCP 22).

  • El UniFi Controller que vamos a migrar necesita comunicarse con el controlador de destino sobre el puerto 8080:

http://ip-of-controller:8080/inform

Para cumplir con estos requisitos hay que abrir los puertos correspondientes en el firewall.

Como primer paso cree un Alias para los dispositivos Unifi que quiero administrar, un switch y un access point:

Luego las reglas para permitir el tráfico SSH desde el nuevo controlador, situado en la interface OPT1, que finalmente nombre SRV, ya que ahí van a estar los servidores.

Como también voy a migrar el access point de la LAN a OPT2 (WIFI), hay que crear una regla para permitir el tráfico SSH desde el viejo controlador a la nueva IP que le asignemos al Access Point, o también podemos desvincularlo del controlador, migrarlo y luego adoptarlo en el nuevo controlador, esta opción también es válida.

Es aconsejable hacer reservas de direcciones IP para cada dispositivo en el DHCP del pfSense.

A continuación un paso a paso para montar el servidor.

1 - Instalar open-vm-tools

$ sudo apt-get install open-vm-tools

2 - Instalar los paquetes y dependencias requeridas

$ sudo apt-get update && sudo apt-get install ca-certificates apt-transport-https dirmngr gnupg gnupg1 gnupg2 software-properties-common

3 - Agregar GPG keys

$ sudo wget -O /etc/apt/trusted.gpg.d/unifi-repo.gpg https://dl.ui.com/unifi/unifi-repo.gpg

$ sudo wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -

$ wget -qO - https://www.mongodb.org/static/pgp/server-3.4.asc | sudo apt-key add -

4 - Agregar repositorios

$ echo "deb https://www.ui.com/downloads/unifi/debian stable ubiquiti" | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.list

$ echo "deb http://security.debian.org/debian-security jessie/updates main" | sudo tee /etc/apt/sources.list.d/jessie-updates.list

$ sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/

$ echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

5 - Actualizar

$ sudo apt update

6 - Instalar Java8

$ sudo apt install adoptopenjdk-8-hotspot

Verificar la instalacion:

$ java -version

La respuesta debería ser:

openjdk version "1.8.0_265"

OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)

OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)

7 - Instalar MongoDB 3.4

MongoDB 3.4 depende de libssl1.0:

$ sudo apt install libssl1.0

Instalar MongoDB:

$ sudo apt-get install -y mongodb-org

8 - Instalar Unifi Controller

$ sudo apt-get install -y unifi

9 - Crear carpeta /data/db y los archivos mongod.lock y system.properties

$ sudo mkdir -p /data/db

$ sudo touch /data/db/mongod.lock

$ sudo touch /data/system.properties

10 - Levantar el servicio unifi

$ sudo service unifi start

11 - Pruebas

Desde el Unifi Controller probar la conectividad hacia los DISPOSITIVOS con SSH.

Desde los DISPOSITIVOS probar la conectividad hacia el Unifi Controller con netcat (gracias Carlos Caro por la sugerencia):

# printf "HEAD /inform HTTP/1.0\r\n\r\n" | nc ip-of-controller 8080

# printf "HEAD /inform HTTP/1.1\r\nHost: TEST\r\n\r\n" | nc ip-of-controller 8080

En ambos casos vamos a obtener la siguiente respuesta:

HTTP/1.1 400

Esto significa que logramos consultar el servidor y nos responde que nuestra consulta está mal formada.

Si todas las pruebas de conectividad son exitosas, entonces vamos a poder migrar sin problemas el UniFi Controller.

Un especial agradecimiento a los colegas del grupo de Whatsapp pfSense - LATAM, quienes supieron responder desde su experiencia a todas mis consultas para la realización de esta tarea.