MQTT over internet

Bonjour,

Je viens de « sauver » mon thermostat Nest 2nd Génération vie NoLongerEvil.
Le serveur peut discuter avec HA via MQTT.
Le détail, c’est qu’il faut que j’expose le service sur Internet pour que tout le monde puisse discuter…
Je n’ai aucune expérience sur MQTT…
J’utilise Cloudfared pour atteindre HA depuis l’exterieur.
Chat GPT me conseille cette approche :

✅ Solution recommandée (sécurisée) : MQTT over WebSocket via Cloudflare

C’est LA meilleure approche avec Cloudflare.

Principe
Client MQTT distant
   ↓ (WebSocket sécurisé WSS)
Cloudflare Tunnel
   ↓
Mosquitto (MQTT WS) → Home Assistant

1️⃣ Activer MQTT WebSocket dans Mosquitto

Dans Home Assistant (Mosquitto add-on) :

Configuration Mosquitto
listener 1883
protocol mqtt

listener 9001
protocol websockets


👉 9001 = port WebSocket

Redémarre l’add-on Mosquitto.

2️⃣ Exposer le port WebSocket via Cloudflare Tunnel

Dans ta config cloudflared (Ingress rules) :

ingress:
  - hostname: mqtt.ton-domaine.fr
    service: http://localhost:9001
  - service: http_status:404


⚠️ HTTP, pas TCP → Cloudflare convertit en WSS

3️⃣ Côté client MQTT (ESP32, Node-RED, PC…)

Connexion MQTT :

Paramètre	Valeur
Host	mqtt.ton-domaine.fr
Port	443
Protocol	WebSocket Secure (WSS)
Path	/mqtt (ou /)
Username	MQTT user
Password	MQTT password
TLS	✅
Exemple ESP32 (PubSubClient + WebSocket)
client.setServer("mqtt.ton-domaine.fr", 443);

4️⃣ Sécurisation OBLIGATOIRE 🔐
🔒 Authentification MQTT

Dans Mosquitto :

utilisateurs / mots de passe forts

interdire anonymous

allow_anonymous false
password_file /mosquitto/config/passwordfile

🔐 Cloudflare Access (recommandé)

Ajoute une policy Zero Trust :

Accès uniquement :

à ton compte Cloudflare

ou par IP

ou via service token

👉 bloque 100% des scans Internet

Est-ce que l’approche est (la) bonne ?

Merci pour vos retours.