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.