Admin Libre - Administración de sistemas y redes

relayd: invalid relay hash
Por Francisco Gaitán el 25 de Septiembre de 2024

Al configurar relayd con varios certificados TLS para alojar múltiples sitios, con la configuración por defecto al cabo de unas horas deja de funcionar tal y como se detalla en este reporte.

Para solucionarlo incrementé el límite de archivos a través de las variables openfiles-max y openfiles-cur en login.conf:

relayd:\
	:openfiles-max=4096:\
	:openfiles-cur=2048:\
	:stacksize-cur=32M:\
	:tc=daemon:

Aunque aparentemente soluciónó el problema relayd se ha vuelto a caer después de un par de meses:

Sep 24 00:00:03 stereo relayd[16126]: adding 1 hosts from table local:8080 (no check)
Sep 24 00:00:03 stereo relayd[18980]: ca: ca_dispatch_relay: invalid relay hash 'SHA256:c6fc8bd7bd7931f636de947b77d14794798117f33b10c1c394d08dbe9f86d51a'
Sep 24 00:00:03 stereo relayd[16126]: relay: pipe closed
Sep 24 00:00:03 stereo relayd[90503]: hce exiting, pid 90503
Sep 24 00:00:03 stereo relayd[50452]: pfe exiting, pid 50452
Sep 24 00:00:03 stereo relayd[25151]: ca exiting, pid 25151
Sep 24 00:00:03 stereo relayd[20078]: ca exiting, pid 20078
Sep 24 00:00:03 stereo relayd[24983]: ca exiting, pid 24983
Sep 24 00:00:03 stereo relayd[33451]: ca exiting, pid 33451
Sep 24 00:00:03 stereo relayd[16924]: parent: proc_dispatch: msgbuf_write: Broken pipe
Sep 24 00:00:03 stereo relayd[9654]: relay exiting, pid 9654
Sep 24 00:00:03 stereo relayd[92762]: relay exiting, pid 92762
Sep 24 00:00:03 stereo relayd[18816]: relay exiting, pid 18816
Sep 24 00:00:03 stereo relayd[63222]: relay exiting, pid 63222

Subiendo el límite de stacksize-cur obtengo este mensaje en el log:

Sep 24 00:05:16 stereo su: relayd: setting resource limit stacksize: Invalid argument

El parámetro que sí acepta es stacksize, por lo que la configuración queda así:

relayd:\
        :openfiles-max=8192:\
        :openfiles-cur=4096:\
        :stacksize=128M:\
        :tc=daemon:

Como precaución adicional, además de monitorizar con reed-alert he añadido una entrada crontab con el usuario root para que cada minuto intente arrancar relayd con el objetivo de minimizar el tiempo fuera de servicio si vuelve a ocurrir este problema:

#
SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
MAILTO=""
#
#minute hour    mday    month   wday    [flags] command
#
# just in case relayd poops itself and die
# (ca: ca_dispatch_relay: invalid relay hash)
*       *       *       *       *       rcctl start relayd

También separé el registro de mensajes de relayd a un archivo aparte en syslog.conf para que sea más fácil comprobar si vuelve a ocurrir este problema, añadiendo estas tres lineas al principio de /etc/syslog.conf y reiniciando syslogd:

!!relayd
*.*                                                     /var/log/relayd
!*

Destacado