VPN-টি UART Wi-Fi মডিউলের পিছনে রাখুন, তার ভেতরে নয়
একটি UART Wi-Fi মডিউলের TCP সকেট দরকার, আর টানেলের মালিক গেটওয়ে। এর ঠিকানা নাম দিন, ফেরার পথ খোলা রাখুন এবং এনক্রিপশন কোথায় শুরু হয় তা জানুন।
UART Wi-Fi মডিউলসহ একটি মাইক্রোকন্ট্রোলারকে এর পিছনের কোনো সেবায় পৌঁছাতে VPN বাস্তবায়ন করতে হয় না। মডিউলটি ইতিমধ্যেই TCP/IP স্ট্যাক চালায় এবং সিরিয়াল পোর্টে সকেট প্রকাশ করে, আর একই ল্যানে থাকা একটি গেটওয়ে সেই ট্রাফিক টানেলের মধ্য দিয়ে নিতে পারে। নকশাটি কেবল তখনই কাজ করে যখন আপনি চারটি প্রশ্নের উত্তর ক্রমে দিতে পারেন, তাই এটিকে চেকলিস্ট হিসেবে ধরুন: ঠিকানা, সকেট, রুট, সীমা। যে প্রথম গেটে ব্যর্থ হয় সেখানেই থামুন, কারণ পরেরগুলো তা পূরণ করতে পারে না।
প্রতিটি স্তরে একটি কাজ নির্ধারণ করুন
UART লিঙ্কটি মাইক্রোকন্ট্রোলার ও মডিউলের মধ্যে AT কমান্ড ও পেলোড বহন করে। মডিউলটি Wi-Fi নেটওয়ার্কে যোগ দেয় এবং নিজের সোর্স ঠিকানাসহ 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
প্রথমে ফেরার পথ লক্ষ্য করুন। যে ফরওয়ার্ড করা প্যাকেট সেবায় পৌঁছে কখনো ফেরে না, তা গেটওয়েতে কোনো ত্রুটি ছাড়াই মডিউলে টাইমআউট তৈরি করে, আর এতে মানুষ ঘণ্টার পর ঘণ্টা Wi-Fi লিঙ্কের দিকে তাকিয়ে থাকে। conntrack এন্ট্রি বলে দেয় গেটওয়ে আদৌ উত্তরটি দেখেছিল কি না।
টানেলটি আসলে কোথায় শেষ হয় তা নির্ধারণ করুন
টানেল গেটওয়েতে শুরু হয়। এটি UART লিঙ্ক এনক্রিপ্ট করে না, এবং মডিউল থেকে গেটওয়ে পর্যন্ত ল্যান সেগমেন্টকে টানেলের অংশ বানায় না। ওই সেগমেন্টে যেকোনো কিছুর সুরক্ষা দরকার হলে তার নিজস্ব ব্যবস্থা দরকার, আর এই উদাহরণে সাধারণ TCP কোনো TLS নয়।
টানেল পড়ে গেলে কী হবে তাও নির্ধারণ করুন। যদি ডেলিভারি কেবল VPN দিয়ে হতে হয়, তবে ফরওয়ার্ডিং নীতিতে বিকল্প পথে একই গন্তব্য অনুমোদন করা যাবে না, কারণ ফলব্যাক রুট চুপচাপ শর্তটি ব্যর্থ করে। পুনঃসংযোগের আচরণ সীমিত করুন যাতে বিচ্ছিন্ন মডিউল সিরিয়াল লিঙ্ক বা দূরের সেবাকে পুনরায় চেষ্টায় ভাসিয়ে না দেয়।
চারটি উত্তর একসঙ্গে লিখে রাখুন: মডিউলের ঠিকানা, সকেটের লক্ষ্য, গেটওয়ের রুট এবং এনক্রিপশন কোথায় শুরু হয়। এই ডিভাইসটি পরে যিনি ডিবাগ করবেন তাঁর চারটিই লাগবে, আর কোনোটিই কেবল ফার্মওয়্যার থেকে অনুমান করা যায় না।