Perangkat berada di belakang router rumah tanpa port forwarding dan tanpa alamat publik, namun tetap harus menerima konfigurasi dalam hitungan detik. Triknya bukan lubang di firewall. Ini koneksi yang dibuka perangkat ke luar menuju broker yang dapat dijangkau, yang lalu mengirim pesan kembali melalui jalur yang sudah terbentuk itu. Setiap sifat yang disukai orang pada desain ini, dan setiap jebakan di dalamnya, berasal dari pembalikan itu.

Apa yang sebenarnya melewati NAT

Saat perangkat membuka koneksi TCP ke broker, router rumah membuat pemetaan dan menjaganya tetap hidup selama aliran berlangsung. Balasan pada aliran itu kembali ke perangkat karena pemetaan sudah ada. Broker tidak pernah memulai apa pun ke arah rumah, jadi tidak ada paket masuk tak diminta yang harus ditolak router. Itulah seluruh argumen jaringan, dan itulah sebabnya pendekatan ini bekerja pada jaringan yang tidak Anda kendalikan.

Perangkat harus menjaga koneksi tetap hidup atau membentuknya ulang, yang menjadi pertanyaan keandalan setelah arsitekturnya ditetapkan.

Broker merutekan topik, ia tidak memproksi HTTP

MQTT mendefinisikan pertukaran terbit dan berlangganan: perangkat berlangganan filter topik yang boleh dibacanya, dan pengendali yang berwenang menerbitkan ke topik yang cocok. Broker mencocokkan terbitan dengan langganan dan mengirimkan salinannya. Ia tidak tahu apa itu permintaan peramban, dan tidak akan meneruskan HTTP GET ke server web perangkat. Jika firmware yang ada hanya berbicara HTTP, desain broker memerlukan perubahan aplikasi atau komponen penerjemahan yang disengaja.

Nama topik juga bukan otorisasi. Sebagian besar broker mendukung daftar kendali akses per klien, dan perangkat harus dibatasi pada pohon terbit dan langganannya sendiri alih-alih berbagi satu ruang nama global.

Sumber daya perangkat menentukan bentuk TLS

ESP8266 memiliki RAM terbatas, dan jabat tangan TLS adalah hal termahal yang dilakukannya. Inti Arduino menyertakan BearSSL justru untuk batasan ini, dan pilihan antara memverifikasi CA dan menyematkan sidik jari mengubah jejak memori sekaligus apa yang bisa dilakukan penyerang dengan sertifikat sah untuk nama lain. Memverifikasi CA broker adalah opsi yang lebih kuat ketika heap mengizinkannya. Ukuran muatan juga penting: klien MQTT menyimpan buffer, dan pesan yang lebih besar darinya dipotong diam-diam kecuali buffer dinaikkan dengan sengaja.

Keepalive dan batas waktu soket adalah bagian dari anggaran yang sama, karena klien yang tidak pernah menyadari koneksi mati berhenti menerima perintah tanpa melaporkan kesalahan.

Semantik pesan yang menggigit

Pesan yang dipertahankan disimpan oleh broker dan dikirim ke pelanggan yang cocok di kemudian hari, yang sangat baik untuk keadaan saat ini dan berbahaya untuk perintah sekali pakai: perangkat yang menyambung ulang dapat menerima perintah kemarin seolah-olah baru. QoS 1 menjamin pengiriman setidaknya sekali, jadi duplikat itu normal dan aplikasi harus aman terhadap pengulangan, idealnya dengan pengenal atau stempel waktu yang dapat ditolaknya. Wasiat terakhir memberi Anda sinyal status saat perangkat mati, tetapi hanya jika koneksi benar-benar gagal alih-alih menggantung.

Perilaku sesi bersih menentukan apakah broker menyimpan langganan Anda saat Anda pergi, dan kesalahan di situ adalah alasan sebagian perangkat melewatkan pesan pertama setelah setiap penyambungan ulang.

TLS melindungi ruas menuju broker. Ini bukan enkripsi muatan ujung ke ujung terhadap operator broker, yang dapat membaca semua yang Anda terbitkan melaluinya.

Batasi siklus hidup dan ujilah dengan data yang tidak berbahaya

Rencanakan penyambungan ulang dengan backoff alih-alih putaran percobaan ulang yang ketat, berlangganan ulang secara eksplisit jika sesi tidak persisten, dan catat hasil koneksi agar perangkat offline yang sunyi meninggalkan bukti. Uji jalur penyambungan ulang dengan muatan contoh yang tidak melakukan apa pun, karena uji produksi pertama sebuah kanal perintah tidak boleh berupa perintah sungguhan. Lalu pastikan apa yang dilakukan pesan dipertahankan yang basi saat menyambung ulang, dan putuskan apakah perilaku itu dapat diterima untuk setiap topik.

Dilakukan dengan cara ini, desainnya menghapus satu persyaratan jaringan masuk dan meninggalkan perangkat lunak perangkat, kebijakan broker, dan semantik pesan sebagai pekerjaan yang terlihat alih-alih asumsi tersembunyi.

Artikel terkait