🖥️ Instalar ZeroTier en TrueNas

· 4 min de lectura
🖥️ Instalar ZeroTier en TrueNas

Acababa de instalar mi nueva máquina con TrueNAS Core cuándo yo pensando que entre los plugins para la comunidad estaría ZeroTier pero no está para la versión Core, que para el que no lo sepa se trata de una mesh VPN gratuita en su capa más básica y muy recomendable aunque si profundizas llega a ser muy compleja, pero el caso es que no está disponible de momento ningún plugin que que facilite esto para hacerlo a golpe de ratón pues en ese caso hay que ponerse manos a la obra e instalarlo sobre terminal.

Cabe destacar que esto es válido sólo para la versión Core que es la basada en FreeBSD, esto no vale para la Scale además que para Scale si existe un contenedor fácil de desplegar.

Requisitos

  • Acceso a TrueNas desde la interfaz web.
  • Acceso por SSH con el usuario root, esto no viene por defecto y hay que hacerlo desde la interfaz web.

Instalación

Vamos a instalar los paquete necesarios partiendo de que estamos sobre FreeBSD

sed -i .orig 's/enabled: yes/enabled: no/' /usr/local/etc/pkg/repos/local.conf
sed -i .orig 's/enabled: no/enabled: yes/' /usr/local/etc/pkg/repos/FreeBSD.conf
pkg update
pkg install -y zerotier

Consultamos el estado del servicio

service zerotier onestatus

Que nos deberá de informar que no está corriendo, entonces lo iniciamos

service zerotier onestart

Ahora vemos que todo esté correcto

ls -1 /var/db/zerotier-one

Con esto deberemos de ver un listado de archivos que se han generado al iniciar zerotier.

Ahora vamos a mover los datos a un volumen persistente ya que sino con cada reinicio esto se perderá.

Para ello lo ideal es crear un dataset dentro de una de nuestras pool previamente creadas, en este caso lo vamos a llamar zerotier

Creamos un directorio y movemos los datos dentro

mkdir -p /mnt/RAID1/zerotier/db/
mv /var/db/zerotier-one/* /mnt/RAID1/zerotier/db/

Montamos el directorio sobre el que zerotier consultará al arrancar

/sbin/mount_nullfs /mnt/RAID1/zerotier/db/ /var/db/zerotier-one

Comprobamos que está correcto y nos muestra los archivos

ls -1 /var/db/zerotier-one

Añadimos la red Zerotier

Para ello usamos el comando

zerotier-cli join IDRED

Vamos a zerotier y lo autorizamos para que esté validado en la red.

Llegados a este punto ya estamos dentro de la red y estaría funcional pero debemos hacerlo persistente sino al reiniciar el sistema todo esto se perderá.

cp /usr/local/etc/rc.d/zerotier /mnt/RAID1/zerotier/zerotier.rc.d

Ahora vamos a crear un script que arranque todo esto, en mi caso encontré alguien que ya lo había hecho y funciona genial así que ahorré tiempo.

curl https://alan.norbauer.com/articles/zerotier-on-truenas/scripts/zerotier-start.sh -o /mnt/RAID1/zerotier/zerotier-start.sh
chmod +x /mnt/RAID1/zerotier/zerotier-start.sh
#!/bin/bash

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
DB_DIR=${SCRIPT_DIR}/db

# If you are running other daemons or require firewall rules to depend on
# zerotier interfaces being available at startup, you may need to uncomment
# the following line.
#
# This avoids a race condition where zerotier interfaces are created, but
# not up, prior to firewalls and services trying to use them.
#
# sysctl net.link.tap.up_on_open=1

# Remove the zerotier_enable rc.conf entry if you already
# have it. This will be set by our start script, as zerotier
# might start before the mountpoint is available, making
# zerotier create new keys at each boot. This is prevented by
# only enabling the service after the mountpoint is available.
if [ ! -f /etc/rc.conf.d/zerotier ]
then
    touch /etc/rc.conf.d/zerotier
    sysrc -f /etc/rc.conf.d/zerotier zerotier_enable=YES
fi

if [ ! -f /usr/local/etc/rc.d/zerotier ]
then
    ln -s ${SCRIPT_DIR}/zerotier.rc.d /usr/local/etc/rc.d/zerotier
    chmod +x /usr/local/etc/rc.d/zerotier
fi

# Stop zerotier so we can modify the db directory location
service zerotier stop

# Use the zfs pool to store the db (to survive reboots)
mkdir -p ${DB_DIR}
mkdir -p /var/db/zerotier-one
/sbin/mount_nullfs ${DB_DIR} /var/db/zerotier-one

# Start zerotier service
service zerotier start

Después de descargar y otorgarle permisos de ejecución vamos a asegurarnos que todo está correcto.

ls -1 /mnt/RAID1/zerotier

Con esto debemos ver varios archivos, entre ellos el que acabamos de descargar.

Creamos la tarea automatizada

Ya hemos terminado con la terminal y vamos al interfaz web para crear una tarea, muy fácil.

  • Tareas -> Init/Shutdown Scripts -> Añadir
  • Description = “ZeroTier Startup”
  • Type = “Script”
  • Select /mnt/RAID1/zerotier/zerotier-start.sh
  • When = “Post Init” Submit

Ahora sólo nos queda reiniciar y si todo ha ido bien al cargar el sistema debe de iniciar zerotier de manera automática, podemos comprobar sus estado

zerotier-cli info
ifconfig

Ambos comandos nos darán información.

Fuente Original