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 zerotierConsultamos el estado del servicio
service zerotier onestatusQue nos deberá de informar que no está corriendo, entonces lo iniciamos
service zerotier onestartAhora vemos que todo esté correcto
ls -1 /var/db/zerotier-oneCon 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-oneComprobamos que está correcto y nos muestra los archivos
ls -1 /var/db/zerotier-oneAñadimos la red Zerotier
Para ello usamos el comando
zerotier-cli join IDREDVamos 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.dAhora 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 startDespués de descargar y otorgarle permisos de ejecución vamos a asegurarnos que todo está correcto.
ls -1 /mnt/RAID1/zerotierCon 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
ifconfigAmbos comandos nos darán información.