Ang isang microcontroller na may Wi-Fi UART na module ay hindi kailangang magpatupad ng VPN para maabot ang isang serbisyong nasa likod nito. Pinapatakbo na ng module ang isang TCP/IP stack at naglalabas ito ng mga socket sa serial port, at ang gateway sa parehong LAN ay maaaring magdala ng trapik na iyon sa tunnel. Gumagana lamang ang disenyo kung masasagot mo ang apat na tanong nang sunod-sunod, kaya ituring itong checklist: address, socket, ruta, hangganan. Huminto sa unang tarangkahan na pumalya, dahil hindi ito mababayaran ng mga susunod.

Bigyan ng isang tungkulin ang bawat layer

Dinadala ng UART link ang mga AT command at payload sa pagitan ng microcontroller at module. Sumasali ang module sa Wi-Fi network at nagmamay-ari ito ng koneksyon sa IP, kasama ang source address nito. Ang gateway ang may-ari ng tunnel, ng mga kredensyal at ng patakaran sa pagpapasa. Ang paghihiwalay ng mga tungkuling ito ang nagpapahintulot na ma-debug ang disenyo sa bawat yugto.

Binabago rin ng paghihiwalay na ito kung paano mo isinusulat ang patakaran ng gateway. Dapat pangalanan ng panuntunan sa source ang LAN address ng module, hindi isang likhang address para sa microcontroller sa likod ng serial link. Walang sariling pagkakakilanlang IP ang microcontroller sa disenyong ito, at ang pagpapanggap na mayroon ito ay lumilikha ng panuntunang hindi kailanman tumutugma.

Bigyan ang module ng matatag na address sa anumang mekanismo ng reserbasyon na sinusuportahan ng network, o ilagay ang mga device sa sarili nilang segment at hayaang tumugma ang gateway sa interface. Ang address mula sa pool na nagbabago pagkatapos ng restart ay sa huli ay sisira ng patakarang tama noong isinulat mo ito.

Mapapangalanan ba ng gateway ang address ng module?

Bago magbukas ang anumang socket, tiyakin na konektado ang module, may address ito at nakikita ito ng gateway sa inaasahang interface. Ito ang tarangkahang kadalasang pumapalyang tahimik, dahil masayang ire-report ng module ang isang pagtatangkang kumonekta na hindi kailanman lumabas sa LAN.

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

Ang mode na isang koneksyon ay nagpapanatiling simple ng pagkakasunod-sunod ng mga command, at ito ang tamang simula para sa isang sensor na nakikipag-usap sa isang serbisyo. Binabago ng mode na maraming koneksyon ang sintaks ng bawat susunod na command, kaya magpasya kung alin ang kinalalagyan mo bago kopyahin ang halimbawa mula sa ibang bersyon ng firmware.

Buksan ang socket mula sa module

Kapag napagpasyahan na ang address at mode, makakapagbukas ang module ng koneksyong TCP patungo sa pribadong serbisyo. Ang address sa ibaba ay halimbawa mula sa isang saklaw sa dokumentasyon; palitan ito ng sa iyo at panatilihin ang parehong hugis.

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

Ang AT command na iyon ay nagbubukas ng ordinaryong TCP socket, at ang socket ay hindi tunnel: walang gumagawa ng VPN sa loob nito at walang nag-e-encrypt ng payload dito. Ang TLS mode ng firmware ay hiwalay na tampok na may sariling command at sariling paghawak ng sertipiko, at ang isang basta-bastang UART module ay maaaring hindi sumuporta sa alinman sa dalawa. Tingnan ang sanggunian ng AT command para sa TCP/IP ng iyong firmware sa halip na ipagpalagay na ang sintaks sa itaas ay naaangkop dito.

Dapat tumugma ang haba ng payload sa AT+CIPSEND sa aktwal na ipinapadala mo, kung hindi ay maghihintay ang module sa mga byte na hindi kailanman darating at magmumukhang nakabitin ang koneksyon. Ang pagkabigong iyon ay mukhang problema sa network at halos palaging isang pagkakamaling isa sa haba.

Ipaagos ang koneksyon sa gateway

Kailangan ng gateway ng ruta patungo sa pribadong patutunguhan, pahintulot na magpasa mula sa network ng mga device papasok sa tunnel at daang pabalik na umaabot sa module. Kung hindi nagruruta pabalik sa subnet ng mga device ang malayong panig, kailangan ng disenyo ng sadyang tuntunin sa pagsasalin, at binabago ng tuntuning iyon ang pinagmulang pagkakakilanlan na nakikita ng serbisyo.

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

Unahing bantayan ang daang pabalik. Ang ipinasang packet na umaabot sa serbisyo at hindi kailanman bumabalik ay gumagawa ng timeout sa module na walang anumang error sa gateway, na nagtutulak sa mga tao na titigan ang Wi-Fi link nang ilang oras. Sinasabi ng entry sa conntrack kung nakita man ng gateway ang sagot.

Magpasya kung saan talaga nagtatapos ang tunnel

Nagsisimula ang tunnel sa gateway. Hindi nito ini-encrypt ang UART link, at hindi nito ginagawang bahagi ng tunnel ang LAN segment sa pagitan ng module at gateway. Anumang nangangailangan ng proteksyon sa segment na iyon ay nangangailangan ng sarili nitong mekanismo, at ang ordinaryong TCP sa halimbawang ito ay hindi TLS.

Magpasya rin kung ano ang mangyayari kapag bumagsak ang tunnel. Kung kailangang dumaan lamang sa VPN ang paghahatid, hindi dapat payagan ng patakaran sa pagpapasa ang parehong patutunguhan sa alternatibong daan, dahil tahimik na sinisira ng reserbang ruta ang pangangailangan. Limitahan ang pag-uugali sa muling pagkonekta upang ang nadiskonektang module ay hindi magbaha sa serial link o sa malayong serbisyo ng mga pagtatangka.

Isulat ang apat na sagot nang magkasama: ang address ng module, ang target ng socket, ang ruta ng gateway at kung saan nagsisimula ang encryption. Ang susunod na taong magde-debug ng device na ito ay mangangailangan ng apat, at wala sa mga ito ang mahihinuha mula sa firmware lamang.

Kaugnay na mga artikulo