UART Wi-Fi मॉड्यूल वाले माइक्रोकंट्रोलर को उसके पीछे की सेवा तक पहुँचने के लिए VPN लागू करने की ज़रूरत नहीं है। मॉड्यूल पहले से TCP/IP स्टैक चलाता है और सीरियल पोर्ट पर सॉकेट देता है, और उसी लैन पर स्थित गेटवे उस ट्रैफ़िक को सुरंग से ले जा सकता है। यह डिज़ाइन तभी काम करता है जब आप चार सवालों के जवाब क्रम से दे सकें, इसलिए इसे जाँच-सूची मानें: पता, सॉकेट, मार्ग, सीमा। जो पहला द्वार विफल हो वहीं रुकें, क्योंकि बाद वाले उसकी भरपाई नहीं कर सकते।

हर परत को एक काम दें

UART लिंक माइक्रोकंट्रोलर और मॉड्यूल के बीच AT कमांड और पेलोड ले जाता है। मॉड्यूल वाई-फ़ाई नेटवर्क से जुड़ता है और अपने स्रोत पते सहित IP कनेक्शन का स्वामी है। गेटवे सुरंग, क्रेडेंशियल और फ़ॉरवर्डिंग नीति का स्वामी है। इन कामों को अलग रखना ही डिज़ाइन को हर चरण पर डिबग करने योग्य बनाता है।

यह अलगाव गेटवे नीति लिखने का तरीका भी बदलता है। स्रोत नियम में मॉड्यूल का लैन पता होना चाहिए, सीरियल लिंक के पीछे बैठे माइक्रोकंट्रोलर का कोई काल्पनिक पता नहीं। इस डिज़ाइन में माइक्रोकंट्रोलर की अपनी कोई IP पहचान नहीं है, और ऐसा दिखावा करना ऐसा नियम बनाता है जो कभी मेल नहीं खाता।

नेटवर्क जो भी आरक्षण तंत्र समर्थित करता है उसके ज़रिए मॉड्यूल को स्थिर पता दें, या उपकरणों को उनके अपने सेगमेंट में रखें और गेटवे को इंटरफ़ेस के अनुसार मिलान करने दें। रीबूट के बाद बदलने वाला पूल पता आख़िरकार उस नीति को तोड़ देगा जो लिखते समय सही थी।

क्या गेटवे मॉड्यूल का पता नाम दे सकता है?

कोई भी सॉकेट खुलने से पहले पुष्टि करें कि मॉड्यूल जुड़ा है, उसका पता है और गेटवे उसे अपेक्षित इंटरफ़ेस पर देख रहा है। यही वह द्वार है जो सबसे अधिक चुपचाप विफल होता है, क्योंकि मॉड्यूल ख़ुशी से ऐसे कनेक्शन प्रयास की सूचना देगा जो कभी लैन से बाहर नहीं निकला।

AT+CWMODE=1
AT+CWJAP="lab-wifi","passphrase"
AT+CIPSTA?
AT+CIPMUX=0

एकल-कनेक्शन मोड कमांड क्रम को सरल रखता है, और एक ही सेवा से बात करने वाले एक सेंसर के लिए यही सही शुरुआत है। बहु-कनेक्शन मोड बाद के हर कमांड का सिंटैक्स बदल देता है, इसलिए किसी दूसरे फ़र्मवेयर संस्करण से उदाहरण कॉपी करने से पहले तय करें कि आप किस मोड में हैं।

मॉड्यूल से सॉकेट खोलें

पता और मोड तय होने पर मॉड्यूल निजी सेवा के साथ TCP कनेक्शन खोल सकता है। नीचे दिया पता दस्तावेज़ी रेंज का उदाहरण है; उसके स्थान पर अपना रखें और वही आकार बनाए रखें।

AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}

वह AT कमांड सादा TCP सॉकेट खोलता है, और सॉकेट सुरंग नहीं है: इसमें कुछ भी VPN नहीं बनाता और कुछ भी पेलोड को एन्क्रिप्ट नहीं करता। फ़र्मवेयर का TLS मोड अलग विशेषता है जिसका अपना कमांड और अपना प्रमाणपत्र प्रबंधन है, और कोई भी UART मॉड्यूल दोनों में से एक भी समर्थित न करे। ऊपर का सिंटैक्स उस पर लागू होता है यह मानने के बजाय अपने फ़र्मवेयर के TCP/IP AT कमांड संदर्भ देखें।

AT+CIPSEND में पेलोड की लंबाई उससे मेल खानी चाहिए जो आप वास्तव में भेजते हैं, वरना मॉड्यूल ऐसे बाइट का इंतज़ार करेगा जो कभी नहीं आते और कनेक्शन अटका हुआ लगेगा। यह विफलता नेटवर्क समस्या जैसी दिखती है और लगभग हमेशा लंबाई में एक की गलती होती है।

कनेक्शन को गेटवे से होकर भेजें

गेटवे को निजी गंतव्य तक मार्ग, उपकरण नेटवर्क से सुरंग में फ़ॉरवर्ड करने की अनुमति और मॉड्यूल तक पहुँचने वाला वापसी मार्ग चाहिए। अगर दूर का पक्ष उपकरण सबनेट की ओर वापस रूट नहीं करता, तो डिज़ाइन को जानबूझकर बनाया गया अनुवाद नियम चाहिए, और वह नियम उस स्रोत पहचान को बदल देता है जो सेवा देखती है।

ip route get 10.90.0.20
sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000'
sudo conntrack -L | grep 9000

पहले वापसी मार्ग पर ध्यान दें। फ़ॉरवर्ड किया गया पैकेट जो सेवा तक पहुँचकर कभी वापस नहीं आता, गेटवे पर किसी त्रुटि के बिना मॉड्यूल में समय-सीमा पैदा करता है, जिससे लोग घंटों वाई-फ़ाई लिंक को देखते रह जाते हैं। conntrack प्रविष्टि बताती है कि गेटवे ने जवाब देखा भी या नहीं।

तय करें कि सुरंग वास्तव में कहाँ समाप्त होती है

सुरंग गेटवे पर शुरू होती है। यह UART लिंक को एन्क्रिप्ट नहीं करती, और मॉड्यूल से गेटवे तक के लैन सेगमेंट को सुरंग का हिस्सा नहीं बनाती। उस सेगमेंट पर जिसे भी सुरक्षा चाहिए उसे अपना तंत्र चाहिए, और इस उदाहरण में सादा TCP कोई TLS नहीं है।

यह भी तय करें कि सुरंग गिरने पर क्या होगा। अगर डिलीवरी केवल VPN से ही होनी चाहिए, तो फ़ॉरवर्डिंग नीति को वैकल्पिक मार्ग से वही गंतव्य अनुमत नहीं करना चाहिए, क्योंकि फ़ॉलबैक मार्ग शर्त को चुपचाप विफल कर देता है। पुनः-कनेक्शन व्यवहार सीमित करें ताकि कटा हुआ मॉड्यूल सीरियल लिंक या दूर की सेवा को बार-बार प्रयासों से न भर दे।

चारों जवाब साथ लिखें: मॉड्यूल का पता, सॉकेट का लक्ष्य, गेटवे का मार्ग और एन्क्रिप्शन कहाँ शुरू होता है। इस उपकरण को आगे डिबग करने वाले को चारों चाहिए होंगे, और इनमें से कोई भी केवल फ़र्मवेयर से अनुमानित नहीं किया जा सकता।

संबंधित लेख