Ücretsiz3 dakikalık yazılım sağlık testi: önce neyi düzeltmeniz gerektiğini görün
Blog

Mosquitto MQTT Köprüleme Kullanımı ve Ayarları

3 dk okuma
  • MQTT
  • Mosquitto
  • IoT
İçindekiler

Mosquitto broker (sunucu), MQTT köprüsü olacak şekilde çalışabilir. Bir köprü, iki MQTT broker’ını birbirine bağlamanıza izin verir.

Köprüler genellikle sistemler arasında mesaj paylaşmak için kullanılır. Yaygın bir kullanım, sahadaki kenar (edge) broker’ları merkezi bir MQTT sunucusuna bağlamaktır: sensör verisi merkeze akar, merkezden gelen komutlar sahaya iner.

Yapılandırma dosyası

Ana mosquitto.conf dosyasını değiştirmek yerine köprü ayarlarını conf.d altında ayrı bir dosyada tutun. Varsayılan kurulum bu klasörü zaten include_dir ile okur; paket güncellemelerinde ayarlarınız da korunur.

sudo nano /etc/mosquitto/conf.d/bridge.conf

Kenar broker’da, merkeze bağlanan örnek bir köprü:

connection site-01-to-central
address mqtt.example.com:8883

# Kimlik doğrulama ve TLS
remote_clientid site-01
remote_username site-01
remote_password <parola>
bridge_cafile /etc/ssl/certs/ca-certificates.crt

# Yalnızca gereken konular, yön ve önekle
topic sensors/# out 1 "" site-01/
topic commands/# in 1 "" site-01/

cleansession false
notifications true

Konuları neden tek tek tanımlıyoruz?

topic # both gibi bir tanım, bütün mesajları iki yönde taşır. Karşı taraf da size köprü kurmuşsa ya da birden fazla köprü aynı konuları paylaşıyorsa, bir mesaj broker’lar arasında sonsuza kadar dönebilir. Bunu önlemek için:

  • Sensör verisi gibi yalnızca merkeze gidecek konuları out, komutlar gibi yalnızca sahaya inecekleri in olarak tanımlayın.
  • Uzak tarafa bir önek ekleyin (örnekte site-01/). Merkezde site-01/sensors/sicaklik olarak görünen mesaj sahada sensors/sicaklik olarak kalır; birden fazla saha birbirine karışmaz.
  • QoS 1 kullanın: bağlantı koptuğunda mesajlar kaybolmaz, bağlantı geri gelince iletilir. cleansession false bunun için oturumun korunmasını sağlar.

Güvenlik

Köprü internet üzerinden gidiyorsa şifresiz 1883 portunu kullanmayın. 8883 portunda TLS ile bağlanın ve merkezde her saha için ayrı kullanıcı adı ve parola tanımlayın. Böylece ele geçirilen bir saha cihazının erişimini tek başına kapatabilirsiniz.

Uygulamak ve kontrol etmek

sudo systemctl restart mosquitto
sudo journalctl -u mosquitto -f

notifications true sayesinde köprünün bağlantı durumu $SYS/broker/connection/site-01-to-central/state konusuna yayımlanır; merkezde bu konuyu dinleyerek hangi sahanın çevrimiçi olduğunu görebilirsiniz.

Güncelleme notu

Bu yazının ilk hali 2018’de Medium’da yayımlandı. O sürümdeki örnek, bütün konuları (#) iki yönde, şifresiz ve kimlik doğrulamasız taşıyordu; bu, mesaj döngülerine ve yetkisiz erişime açıktı. Burada konuları yön ve önekle sınırlayıp TLS ve kimlik doğrulama ekleyerek güncelledim.

İlgili yazılar