Mosquitto: Pontes
Como conectar servidores Mosquitto juntos (ponte)
👋 Bem-vindo à documentação da Stackhero!
A Stackhero oferece uma solução Mosquitto MQTT cloud pronta a usar que proporciona uma série de benefícios, incluindo:
- Trocas e transferências de mensagens ilimitadas.
- Autenticação de dispositivos ilimitada via uma API externa.
- ACLs avançadas em tópicos, utilizadores e ações.
- Nome de domínio personalizável seguro com HTTPS (por exemplo, https://mqtt.sua-empresa.com).
- Atualizações simplificadas com apenas um clique.
- Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.
Poupe tempo e simplifique a sua vida: leva apenas 5 minutos para experimentar a solução de Mosquitto MQTT cloud hosting da Stackhero!
Conectar múltiplos brokers MQTT permite uma troca de dados fluida entre diferentes locais.
Imagine ter um servidor Mosquitto num armazém com vários dispositivos conectados. Pode conectar este broker remoto a uma instância Stackhero (Mosquitto MQTT) usando a funcionalidade "bridge". Esta configuração permite que os dispositivos conectados à instância Stackhero e aqueles no armazém comuniquem como se estivessem conectados ao mesmo broker.
Para usos avançados, pode personalizar quais tópicos precisam ser partilhados. Também pode adicionar tópicos remotos a um sub-tópico como "warehouse", onde "warehouse/#" capturará todos os seus dispositivos remotos. Isto é feito usando a opção
topicnomosquitto.conf. Embora este guia não cubra esta configuração avançada, pode encontrar mais informações na documentação oficial do Mosquitto.
Configurar o Mosquitto para conectar a outro servidor (ponte)
Neste exemplo, um servidor remoto irá conectar-se a uma instância Stackhero usando um utilizador dedicado com encriptação TLS para máxima segurança.
Primeiro, crie um novo utilizador na instância MQTT Stackhero. Vamos chamá-lo de bridge-1, com a palavra-passe secretPassword.
Em seguida, no servidor Mosquitto remoto, pode editar o ficheiro de configuração mosquitto.conf (geralmente localizado em /etc/mosquitto/mosquitto.conf) adicionando as seguintes linhas no final:
# TODO: substituir "<XXXXXX>.stackhero-network.com" e "<PORT_TLS>" com as informações da sua instância Stackhero
connection <XXXXXX>.stackhero-network.com
address <XXXXXX>.stackhero-network.com:<PORT_TLS>
# TODO: substituir "bridge-1" e "secretPassword" com as credenciais do utilizador recém-criado
remote_clientid bridge-1
remote_username bridge-1
remote_password secretPassword
start_type automatic
try_private true
# Tópicos a partilhar, direção e QOS.
# Note que "both" parece não funcionar por uma razão desconhecida.
topic # out 2
topic # in 2
# Ativar a conexão TLS para encriptar dados entre o seu servidor Mosquitto remoto e a sua instância Stackhero.
bridge_insecure false
bridge_capath /etc/ssl/certs
Antes de reiniciar o Mosquitto com a sua nova configuração, certifique-se de que os certificados TLS existem no seu servidor remoto.
Verifique se o diretório /etc/ssl/certs existe e contém ficheiros com o comando:
ls /etc/ssl/certs
Se existir e contiver ficheiros, pode simplesmente reiniciar o seu servidor Mosquitto.
Se não existir, pode considerar executar um destes comandos:
-
No Ubuntu/Debian, pode executar:
sudo apt-get install ca-certificates -
No Alpine Linux, pode executar:
apk add ca-certificates
Alternativamente, pode descarregar manualmente o certificado. Para isso, descarregue o certificado CA para /etc/mosquitto/isrgrootx1.pem usando o seguinte comando:
wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/mosquitto/isrgrootx1.pem
Depois, edite o ficheiro mosquitto.conf para substituir bridge_capath /etc/ssl/certs por bridge_cafile /etc/mosquitto/isrgrootx1.pem.
Finalmente, reinicie o seu servidor Mosquitto.
Para mais informações sobre a configuração de pontes, pode consultar a documentação oficial do Mosquitto.
Testar a configuração da ponte Mosquitto
O Mosquitto não fornece logs extensivos para verificar se a sua ponte está a funcionar.
A melhor maneira de garantir o seu funcionamento é testá-la diretamente.
Pode conectar-se ao seu servidor remoto e subscrever ao tópico testBridge usando um utilizador existente (e palavra-passe) declarado no servidor remoto:
mosquitto_sub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -v
Noutro terminal, pode conectar-se à sua instância Mosquitto Stackhero usando um utilizador existente (e palavra-passe) declarado na sua instância Mosquitto Stackhero:
mosquitto_sub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -v
Abra um terceiro terminal e envie uma mensagem de teste usando a sua instância Stackhero (e um utilizador correspondente):
mosquitto_pub -h <XXXXXX>.stackhero-network.com -p <PORT_TLS> -u <user> -P <password> -t "testBridge" -m "Message from Stackhero broker"
Deverá ver a "Message from Stackhero broker" nos seus dois primeiros terminais.
Finalmente, envie uma mensagem de teste usando a sua instância Mosquitto remota:
mosquitto_pub -h 127.0.0.1 -u <user> -P <password> -t "testBridge" -m "Message from remote broker"
Parabéns! Agora tem os seus dois servidores MQTT conectados de forma segura, com autenticação e encriptação!