A mikrobeheerder met 'n UART-Wi-Fi-module hoef nie 'n VPN te implementeer om 'n diens agter een te bereik nie. Die module laat loop reeds 'n TCP/IP-stapel en bied sokkette oor die reekspoort aan, en 'n gateway op dieselfde LAN kan daardie verkeer deur die tonnel dra. Die ontwerp werk net as jy vier vrae in volgorde kan antwoord, so behandel dit as 'n kontrolelys: adres, sok, roete, grens. Stop by die eerste hek wat faal, want die latere kan dit nie vergoed nie.

Gee elke laag een taak

Die UART-koppeling dra AT-opdragte en nutsvrag tussen die mikrobeheerder en die module. Die module sluit by die Wi-Fi-netwerk aan en besit die IP-verbinding, insluitend sy bronadres. Die gateway besit die tonnel, die geloofsbriewe en die deurvoerbeleid. Om daardie take apart te hou, is wat die ontwerp by elke stadium ontfoutbaar maak.

Die skeiding verander ook hoe jy die gateway-beleid skryf. 'n Bronreël moet die module se LAN-adres noem, nie 'n denkbeeldige adres vir die mikrobeheerder agter die reekskoppeling nie. Die mikrobeheerder het geen eie IP-identiteit in hierdie ontwerp nie, en om te maak of hy een het, lewer 'n reël wat nooit pas nie.

Gee die module 'n stabiele adres deur watter reserveringsmeganisme die netwerk ook al ondersteun, of plaas die toestelle op hul eie segment en laat die gateway per koppelvlak pas. 'n Poeladres wat ná 'n herbegin verander, sal uiteindelik 'n beleid breek wat korrek was toe jy dit geskryf het.

Kan die gateway die module se adres noem?

Voordat enige sok oopgaan, bevestig dat die module geassosieer is, 'n adres het, en dat die gateway dit op die verwagte koppelvlak sien. Dit is die hek wat die maklikste stil faal, want die module sal graag 'n verbindingspoging rapporteer wat nooit die LAN verlaat het nie.

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

Enkelverbindingsmodus hou die opdragreeks eenvoudig, en dit is die regte beginpunt vir een sensor wat met een diens praat. Multi-verbindingsmodus verander die sintaksis van elke latere opdrag, so besluit in watter een jy is voordat jy 'n voorbeeld uit 'n ander firmware-weergawe kopieer.

Open die sok vanaf die module

Met 'n adres en 'n modus vasgestel, kan die module 'n TCP-verbinding na die private diens oopmaak. Die adres hieronder is 'n voorbeeld uit 'n dokumentasie-reeks; vervang dit met jou eie en hou dieselfde vorm.

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

Wat daardie AT-opdrag doen, is om 'n gewone TCP-sok oop te maak, en 'n sok is nie 'n tonnel nie: niks daarin skep 'n VPN nie en niks daarin enkripteer die nutsvrag nie. Die firmware se TLS-modus is 'n aparte kenmerk met sy eie opdrag en sy eie sertifikaathanterinq, en 'n willekeurige UART-module mag nie een van die twee ondersteun nie. Kyk na die TCP/IP AT-opdragverwysing vir jou firmware eerder as om aan te neem dat die sintaksis hierbo daarop van toepassing is.

Die nutsvraglengte in AT+CIPSEND moet pas by wat jy werklik stuur, anders wag die module vir grepe wat nooit kom nie en lyk dit of die verbinding hang. Daardie fout lyk soos 'n netwerkprobleem en is byna altyd 'n een-tel-fout in die lengte.

Roeteer die verbinding deur die gateway

Die gateway het 'n roete na die private bestemming nodig, toestemming om van die toestelnetwerk in die tonnel deur te voer, en 'n terugpad wat die module bereik. As die afgeleë kant nie terug na die toestelsubnet roeteer nie, het die ontwerp 'n doelbewuste vertaalreël nodig, en daardie reël verander die bronidentiteit wat die diens sien.

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

Let eerste op die terugpad. 'n Deurgevoerde pakket wat die diens bereik en nooit terugkom nie, lewer 'n tydsverloop by die module sonder enige fout by die gateway, wat mense vir ure na die Wi-Fi-koppeling laat kyk. Die conntrack-inskrywing vertel jou of die gateway die antwoord hoegenaamd gesien het.

Bepaal waar die tonnel werklik eindig

Die tonnel begin by die gateway. Dit enkripteer nie die UART-koppeling nie, en dit maak nie die module-tot-gateway-LAN-segment deel van die tonnel nie. Enigiets wat op daardie segment beskerming nodig het, het sy eie meganisme nodig, en gewone TCP in hierdie voorbeeld is nie TLS nie.

Bepaal ook wat gebeur wanneer die tonnel val. As aflewering slegs via die VPN mag gebeur, mag die deurvoerbeleid nie dieselfde bestemming deur 'n alternatiewe pad toelaat nie, want 'n terugvalroete verydel die vereiste stilweg. Begrens die herverbindingsgedrag sodat 'n ontkoppelde module nie die reekskoppeling of die afgeleë diens met herpogings oorstroom nie.

Teken die vier antwoorde saam op: die module se adres, die sokteiken, die gateway-roete en waar die enkripsie begin. Die volgende persoon wat hierdie toestel ontfout, het al vier nodig, en nie een daarvan kan uit die firmware alleen afgelei word nie.

Verwante artikels