VPN را پشت ماژول Wi-Fi با درگاه UART بگذارید، نه درون آن
ماژول Wi-Fi با درگاه UART به یک سوکت TCP نیاز دارد و تونل از آنِ دروازه است. نشانی آن را نام ببرید، مسیر بازگشت را باز نگه دارید و بدانید رمزنگاری از کجا آغاز میشود.
ریزکنترلکنندهای که ماژول Wi-Fi با درگاه UART دارد، برای رسیدن به خدمتی در پشت آن نیازی به پیادهسازی VPN ندارد. ماژول از پیش پشتهی TCP/IP را اجرا میکند و سوکتها را روی درگاه سری عرضه میکند، و دروازهای در همان شبکهی محلی میتواند این ترافیک را از دل تونل بگذراند. این طرح تنها وقتی کار میکند که بتوانید به چهار پرسش به ترتیب پاسخ دهید، پس آن را یک فهرست بازبینی بدانید: نشانی، سوکت، مسیر، مرز. در نخستین دروازهای که رد میشود بایستید، زیرا دروازههای بعدی نمیتوانند آن را جبران کنند.
به هر لایه یک وظیفه بدهید
پیوند UART فرمانهای AT و بار داده را میان ریزکنترلکننده و ماژول جابهجا میکند. ماژول به شبکهی Wi-Fi میپیوندد و مالک اتصال IP است، از جمله نشانی مبدأ آن. دروازه مالک تونل، اعتبارنامهها و سیاست ارسال است. جدا نگه داشتن این وظایف همان چیزی است که طرح را در هر مرحله قابل اشکالزدایی میکند.
این جداسازی شیوهی نوشتن سیاست دروازه را نیز تغییر میدهد. قاعدهی مبدأ باید نشانی ماژول در شبکهی محلی را نام ببرد، نه نشانی خیالی برای ریزکنترلکنندهای که پشت پیوند سری است. ریزکنترلکننده در این طرح هویت IP مستقل ندارد، و وانمود کردن به داشتن آن قاعدهای میسازد که هرگز منطبق نمیشود.
به ماژول نشانی پایداری بدهید، با هر سازوکار رزروی که شبکه پشتیبانی میکند، یا دستگاهها را در بخش جداگانهی خودشان بگذارید و بگذارید دروازه بر پایهی رابط تطبیق دهد. نشانی حوضچهای که پس از راهاندازی دوباره تغییر میکند، سرانجام سیاستی را میشکند که هنگام نوشتن درست بود.
آیا دروازه میتواند نشانی ماژول را نام ببرد؟
پیش از باز شدن هر سوکتی، تأیید کنید که ماژول متصل است، نشانی دارد و دروازه آن را روی رابط مورد انتظار میبیند. این همان دروازهای است که بیش از همه بیصدا رد میشود، زیرا ماژول با خوشحالی تلاش اتصالی را گزارش میدهد که هرگز از شبکهی محلی بیرون نرفته است.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
حالت تکاتصالی توالی فرمانها را ساده نگه میدارد و نقطهی آغاز درست برای یک حسگر است که با یک خدمت سخن میگوید. حالت چنداتصالی نحو هر فرمان بعدی را تغییر میدهد، پس پیش از کپی کردن نمونهای از نسخهی دیگر firmware، روشن کنید در کدام حالت هستید.
سوکت را از ماژول باز کنید
وقتی نشانی و حالت روشن شد، ماژول میتواند اتصال TCP به خدمت خصوصی باز کند. نشانی زیر نمونهای از یک بازهی مستندات است؛ آن را با نشانی خودتان جایگزین کنید و همان شکل را نگه دارید.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
آن فرمان AT یک سوکت سادهی TCP باز میکند، و سوکت تونل نیست: هیچ چیز در آن VPN نمیسازد و هیچ چیز بار داده را رمز نمیکند. حالت TLS در firmware ویژگی جداگانهای با فرمان خودش و مدیریت گواهی خودش است، و یک ماژول UART دلخواه ممکن است هیچکدام را پشتیبانی نکند. به جای فرض اینکه نحو بالا برای آن معتبر است، مرجع فرمانهای AT برای TCP/IP firmware خود را ببینید.
طول بار داده در 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 باشد، سیاست ارسال نباید همان مقصد را از مسیری جایگزین اجازه دهد، زیرا مسیر پشتیبان بیصدا آن شرط را باطل میکند. رفتار اتصال دوباره را محدود کنید تا ماژول قطعشده پیوند سری یا خدمت دور را با تلاشهای مکرر پر نکند.
چهار پاسخ را با هم ثبت کنید: نشانی ماژول، مقصد سوکت، مسیر دروازه و جایی که رمزنگاری آغاز میشود. شخص بعدی که این دستگاه را اشکالزدایی میکند به هر چهار نیاز دارد و هیچیک تنها از firmware استنباط نمیشود.