پورٹ فارورڈنگ کے بغیر ESP8266 کا کنٹرول: MQTT کا باہر جانے والا راستہ
انٹرنیٹ سے قابل رسائی بروکر گھریلو آلے کو اسی رابطے کے ذریعے کنٹرول کرنے دیتا ہے جو اس نے خود کھولا۔ یہ TLS میموری، موضوعات اور تکرار کے لیے کیا بدلتا ہے۔
آلہ گھر کے روٹر کے پیچھے ہے، نہ پورٹ فارورڈنگ ہے اور نہ عوامی پتہ، پھر بھی اسے چند سیکنڈ میں ترتیب ملنی چاہیے۔ ترکیب فائر وال میں سوراخ نہیں ہے۔ یہ وہ رابطہ ہے جو آلہ باہر کی طرف ایسے بروکر کی جانب کھولتا ہے جہاں وہ پہنچ سکتا ہے، اور وہ بروکر پھر اسی قائم شدہ راستے سے پیغامات واپس بھیجتا ہے۔ اس ڈیزائن میں لوگوں کو پسند آنے والی ہر خوبی اور اس میں موجود ہر جال اسی الٹ پھیر سے آتا ہے۔
NAT سے درحقیقت کیا گزرتا ہے
جب آلہ بروکر سے TCP رابطہ کھولتا ہے، گھر کا روٹر ایک نقشہ بناتا ہے اور بہاؤ کی زندگی بھر اسے زندہ رکھتا ہے۔ اس بہاؤ پر آنے والے جوابات آلے تک واپس آتے ہیں کیونکہ نقشہ پہلے سے موجود ہے۔ بروکر کبھی گھر کی طرف کچھ شروع نہیں کرتا، اس لیے روٹر کے مسترد کرنے کے لیے کوئی غیر مطلوبہ آنے والا پیکٹ نہیں ہوتا۔ یہی پوری نیٹ ورکنگ دلیل ہے، اور اسی لیے یہ طریقہ ان نیٹ ورکس پر کام کرتا ہے جنہیں آپ کنٹرول نہیں کرتے۔
آلے کو رابطہ زندہ رکھنا ہوگا یا دوبارہ قائم کرنا ہوگا، اور فن تعمیر طے ہونے کے بعد یہی بھروسے کا سوال بن جاتا ہے۔
بروکر موضوعات کو روٹ کرتا ہے، HTTP کی پراکسی نہیں کرتا
MQTT اشاعت اور رکنیت کے تبادلے متعین کرتا ہے: آلہ ایسے موضوع فلٹر کی رکنیت لیتا ہے جسے پڑھنے کی اسے اجازت ہے، اور مجاز کنٹرولر ملتے جلتے موضوع پر شائع کرتا ہے۔ بروکر اشاعتوں کو رکنیتوں سے ملاتا ہے اور نقول پہنچاتا ہے۔ اسے معلوم نہیں کہ براؤزر کی درخواست کیا ہے، اور یہ آلے کے ویب سرور پر HTTP GET نہیں بھیجے گا۔ اگر موجودہ فرم ویئر صرف HTTP بولتا ہے، تو بروکر ڈیزائن کو ایپلیکیشن تبدیلی یا جان بوجھ کر بنایا گیا ترجمہ کا حصہ درکار ہے۔
موضوعات کے نام بھی اجازت نہیں ہیں۔ بیشتر بروکر ہر کلائنٹ کے لیے رسائی کنٹرول فہرستیں فراہم کرتے ہیں، اور آلوں کو ایک عالمی نام کی جگہ بانٹنے کے بجائے اپنے ہی اشاعت اور رکنیت کے درختوں تک محدود رکھنا چاہیے۔
آلے کے وسائل TLS کی شکل طے کرتے ہیں
ESP8266 میں محدود RAM ہے، اور TLS ہاتھ ملانا اس کا سب سے مہنگا کام ہے۔ Arduino کور BearSSL بالکل اسی پابندی کی وجہ سے فراہم کرتا ہے، اور CA کی تصدیق کرنے اور فنگر پرنٹ پن کرنے کے درمیان انتخاب میموری کے نقش اور دوسرے نام کے لیے معتبر سند رکھنے والے حملہ آور کے کام، دونوں کو بدل دیتا ہے۔ جب ہیپ اجازت دے تو بروکر کا CA تصدیق کرنا زیادہ مضبوط آپشن ہے۔ پے لوڈ کا حجم بھی اہم ہے: MQTT کلائنٹ ایک بفر رکھتا ہے، اور اس سے بڑے پیغامات بفر جان بوجھ کر بڑھائے بغیر خاموشی سے کاٹ دیے جاتے ہیں۔
کیپ الائیو اور ساکٹ کی وقتی حدیں اسی بجٹ کا حصہ ہیں، کیونکہ مردہ رابطے کو کبھی نہ دیکھنے والا کلائنٹ غلطی بتائے بغیر حکم وصول کرنا بند کر دیتا ہے۔
کاٹنے والی پیغام معنی
محفوظ پیغام بروکر ذخیرہ کرتا ہے اور بعد میں ملتے جلتے رکنیت داروں کو دیتا ہے، جو موجودہ حالت کے لیے بہترین اور ایک بار کے احکام کے لیے خطرناک ہے: دوبارہ جڑنے والا آلہ کل کا حکم نیا سمجھ کر لے سکتا ہے۔ QoS 1 کم از کم ایک بار پہنچانے کی ضمانت دیتا ہے، اس لیے نقول عام ہیں اور ایپلیکیشن کو تکرار سے محفوظ ہونا چاہیے، بہتر یہ کہ ایسے شناخت کنندہ یا وقت کے نشان کے ساتھ جسے وہ مسترد کر سکے۔ آخری وصیت آلے کے گرنے پر آپ کو حالت کا اشارہ دیتی ہے، لیکن صرف اسی صورت میں جب رابطہ لٹکنے کے بجائے واقعی ناکام ہو۔
صاف نشست کا رویہ طے کرتا ہے کہ آپ کی غیر موجودگی میں بروکر آپ کی رکنیتیں رکھتا ہے یا نہیں، اور یہاں غلطی کرنا ہی وجہ ہے کہ کچھ آلات ہر دوبارہ جڑنے کے بعد پہلا پیغام کھو دیتے ہیں۔
TLS بروکر تک کے حصے کی حفاظت کرتا ہے۔ یہ بروکر کے منتظم کے خلاف پے لوڈ کی سرے سے سرے تک خفیہ کاری نہیں ہے، جو آپ کی اس کے ذریعے شائع کردہ ہر چیز پڑھ سکتا ہے۔
زندگی کے دورانیے کو محدود کریں اور اسے بے ضرر ڈیٹا سے جانچیں
دوبارہ جڑنے کا منصوبہ سخت بار بار کوشش کے بجائے پسپائی کے ساتھ بنائیں، اگر نشست مستقل نہیں تو واضح طور پر دوبارہ رکنیت لیں، اور رابطے کا نتیجہ لاگ کریں تاکہ خاموش آف لائن آلہ ثبوت چھوڑے۔ دوبارہ جڑنے کا راستہ ایسے نمونہ پے لوڈ سے جانچیں جو کچھ نہیں کرتے، کیونکہ حکم کے چینل کا پہلا پیداواری امتحان حقیقی حکم نہیں ہونا چاہیے۔ پھر تصدیق کریں کہ پرانا محفوظ پیغام دوبارہ جڑنے پر کیا کرتا ہے، اور طے کریں کہ یہ رویہ ہر موضوع کے لیے قابل قبول ہے یا نہیں۔
اس طرح کرنے سے، ڈیزائن ایک آنے والی نیٹ ورک ضرورت ہٹا دیتا ہے اور آلے کا سافٹ ویئر، بروکر کی پالیسی اور پیغام کا معنی چھپے ہوئے مفروضوں کے بجائے نظر آنے والے کام کے طور پر چھوڑ دیتا ہے۔