Mosquitto: Puentes

Cómo conectar servidores Mosquitto juntos (puente)

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero le ofrece un entorno Mosquitto MQTT en la nube totalmente gestionado, diseñado para ofrecer fiabilidad y flexibilidad:

  • Tráfico ilimitado de mensajes y transferencias de datos, para que sus flujos de trabajo nunca se vean limitados artificialmente.
  • Autenticación ilimitada de dispositivos a través de su propia API externa, facilitando la incorporación y la gestión de accesos.
  • ACLs avanzadas para un control detallado sobre topics, usuarios y acciones.
  • Un nombre de dominio personalizado con HTTPS integrado para endpoints seguros y con su propia marca (por ejemplo: https://mqtt.su-empresa.com).
  • Actualizaciones sin complicaciones: aplique mejoras o parches de seguridad con un solo clic.
  • Rendimiento constante y alta seguridad, con cada instancia ejecutándose en una infraestructura privada y dedicada.

Impulse sus proyectos IoT y reduzca la carga operativa. Puede tener una instancia de Mosquitto MQTT cloud hosting segura y lista para producción en solo unos minutos.

Conectar múltiples brokers MQTT permite un intercambio de datos fluido entre diferentes ubicaciones.

Imagine tener un servidor Mosquitto en un almacén con varios dispositivos conectados. Puede conectar este broker remoto a una instancia de Stackhero (Mosquitto MQTT) utilizando la función de "puente". Esta configuración permite que los dispositivos conectados a la instancia de Stackhero y los del almacén se comuniquen como si estuvieran conectados al mismo broker.

Para usos avanzados, puede personalizar qué temas necesitan ser compartidos. También puede añadir temas remotos a un subtema como "almacén", donde "almacén/#" capturará todos sus dispositivos remotos. Esto se logra utilizando la opción topic en mosquitto.conf. Aunque esta guía no cubre esta configuración avanzada, puede encontrar más información en la documentación oficial de Mosquitto.

En este ejemplo, un servidor remoto se conectará a una instancia de Stackhero utilizando un usuario dedicado con cifrado TLS para máxima seguridad.

Primero, cree un nuevo usuario en la instancia MQTT de Stackhero. Llamémoslo bridge-1, con la contraseña secretPassword.

A continuación, en el servidor Mosquitto remoto, puede editar el archivo de configuración mosquitto.conf (generalmente ubicado en /etc/mosquitto/mosquitto.conf) añadiendo las siguientes líneas al final:

# TODO: reemplace "<XXXXXX>.stackhero-network.com" y "<PORT_TLS>" con la información de su instancia de Stackhero
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>

# TODO: reemplace "bridge-1" y "secretPassword" con las credenciales del usuario recién creado
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword

start_type automatic
try_private true

# Temas a compartir, dirección y QOS.
# Note que "both" parece no funcionar por una razón desconocida.
topic # out 2
topic # in 2

# Habilitar conexión TLS para cifrar datos entre su servidor Mosquitto remoto y su instancia de Stackhero.
bridge_insecure false
bridge_capath /etc/ssl/certs

Antes de reiniciar Mosquitto con su nueva configuración, asegúrese de que los certificados TLS existan en su servidor remoto.

Verifique que el directorio /etc/ssl/certs exista y contenga archivos con el comando:

ls /etc/ssl/certs

Si existe y contiene archivos, puede simplemente reiniciar su servidor Mosquitto.

Si no existe, puede considerar ejecutar uno de estos comandos:

  • En Ubuntu/Debian, puede ejecutar:

    sudo apt-get install ca-certificates
    
  • En Alpine Linux, puede ejecutar:

    apk add ca-certificates
    

Alternativamente, puede descargar manualmente el certificado. Para hacerlo, descargue el certificado CA a /etc/mosquitto/isrgrootx1.pem usando el siguiente comando:

wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/mosquitto/isrgrootx1.pem

Luego, edite el archivo mosquitto.conf para reemplazar bridge_capath /etc/ssl/certs con bridge_cafile /etc/mosquitto/isrgrootx1.pem.

Finalmente, reinicie su servidor Mosquitto.

Para más información sobre la configuración de puentes, puede consultar la documentación oficial de Mosquitto.

Mosquitto no proporciona registros extensos para verificar que su puente esté funcionando.

La mejor manera de asegurar su funcionalidad es probarlo directamente.

Puede conectarse a su servidor remoto y suscribirse al tema testBridge utilizando un usuario existente (y contraseña) declarado en el servidor remoto:

mosquitto_sub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -v

En otro terminal, puede conectarse a su instancia de Mosquitto de Stackhero utilizando un usuario existente (y contraseña) declarado en su instancia de Mosquitto de Stackhero:

mosquitto_sub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -v

Abra un tercer terminal y envíe un mensaje de prueba utilizando su instancia de Stackhero (y un usuario correspondiente):

mosquitto_pub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -m "Message from Stackhero broker"

Debería ver el "Message from Stackhero broker" en sus dos primeros terminales.

Finalmente, envíe un mensaje de prueba utilizando su instancia de Mosquitto remota:

mosquitto_pub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -m "Message from remote broker"

¡Felicidades! Ahora tiene sus dos servidores MQTT conectados de manera segura, con autenticación y cifrado.