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
Нэг холболтын горим командын дарааллыг энгийн байлгаж, нэг үйлчилгээтэй ярьдаг нэг мэдрэгчид тохирох эхлэл юм. Олон холболтын горим дараагийн команд бүрийн синтаксийг өөрчилдөг тул өөр firmware хувилбараас жишээ хуулахаас өмнө аль горимд байгаагаа шийд.
Сокетыг модулиас нээ
Хаяг болон горим тогтоосны дараа модуль хувийн үйлчилгээ рүү TCP холболт нээж чадна. Доорх хаяг нь баримт бичгийн мужаас авсан жишээ; үүнийг өөрийнхөөр сольж, ижил хэлбэрийг хадгал.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Тэр AT команд нь энгийн TCP сокет нээдэг бөгөөд сокет нь туннель биш: дотор нь юу ч VPN үүсгэхгүй, юу ч ачааллыг шифрлэхгүй. Firmware-ийн TLS горим нь өөрийн команд, өөрийн гэрчилгээний зохицуулалттай тусдаа боломж бөгөөд дурын UART модуль хоёуланг нь дэмжихгүй байж болно. Дээрх синтаксийг түүнд хамаатай гэж үзэхийн оронд firmware-ийнхээ 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-ээр байх ёстой бол дамжуулах бодлого ижил очих газрыг өөр замаар зөвшөөрөх ёсгүй, учир нь нөөц зам шаардлагыг чимээгүйхэн устгана. Дахин холбогдох зан төлөвийг хязгаарлаж, салсан модуль цуваа холбоос эсвэл алслагдсан үйлчилгээг дахин оролдлогоор дүүргэхгүй байг.
Дөрвөн хариултыг хамт бич: модулийн хаяг, сокетын зорилго, гарцын зам, шифрлэлт хаанаас эхлэх. Энэ төхөөрөмжийг дараа нь алдаа олж засах хүнд дөрвүүлээ хэрэгтэй бөгөөд аль нэгийг нь зөвхөн firmware-ээс таамаглах боломжгүй.