Puneți VPN-ul în spatele unui modul Wi-Fi UART, nu în interiorul lui
Un modul Wi-Fi UART are nevoie de un socket TCP, iar tunelul aparține gateway-ului. Numiți adresa lui, țineți deschisă calea de întoarcere și știți unde începe criptarea.
Un microcontroler cu un modul Wi-Fi UART nu trebuie să implementeze un VPN ca să ajungă la un serviciu aflat în spatele lui. Modulul rulează deja o stivă TCP/IP și expune socket-uri prin portul serial, iar un gateway din aceeași rețea locală poate transporta acel trafic prin tunel. Proiectul funcționează doar dacă puteți răspunde la patru întrebări în ordine, așa că tratați-l ca pe o listă de verificare: adresă, socket, rută, limită. Opriți-vă la prima poartă care eșuează, pentru că următoarele nu o pot compensa.
Atribuiți o sarcină pentru fiecare strat
Legătura UART transportă comenzi AT și încărcătură utilă între microcontroler și modul. Modulul se alătură rețelei Wi-Fi și deține conexiunea IP, inclusiv adresa sa sursă. Gateway-ul deține tunelul, acreditările și politica de redirecționare. Tocmai separarea acestor sarcini face proiectul depurabil în fiecare etapă.
Separarea schimbă și modul în care scrieți politica gateway-ului. O regulă de sursă trebuie să numească adresa LAN a modulului, nu o adresă imaginară pentru microcontrolerul din spatele legăturii seriale. Microcontrolerul nu are identitate IP proprie în acest proiect, iar a pretinde că are produce o regulă care nu se potrivește niciodată.
Dați modulului o adresă stabilă prin orice mecanism de rezervare acceptat de rețea, sau puneți dispozitivele în propriul segment și lăsați gateway-ul să potrivească după interfață. O adresă din pool care se schimbă după o repornire va rupe în cele din urmă o politică ce era corectă când ați scris-o.
Poate gateway-ul să numească adresa modulului?
Înainte de a se deschide vreun socket, confirmați că modulul este asociat, are adresă și că gateway-ul îl vede pe interfața așteptată. Aceasta este poarta care eșuează cel mai des în tăcere, pentru că modulul va raporta bucuros o încercare de conexiune care nu a părăsit niciodată rețeaua locală.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Modul cu o singură conexiune păstrează secvența de comenzi simplă și este punctul de plecare corect pentru un senzor care vorbește cu un singur serviciu. Modul cu mai multe conexiuni schimbă sintaxa fiecărei comenzi ulterioare, așa că decideți în care sunteți înainte de a copia un exemplu dintr-o altă versiune de firmware.
Deschideți socket-ul din modul
Odată stabilite adresa și modul, modulul poate deschide o conexiune TCP către serviciul privat. Adresa de mai jos este un exemplu dintr-un interval de documentație; înlocuiți-o cu a dumneavoastră și păstrați aceeași formă.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Acea comandă AT deschide un socket TCP simplu, iar un socket nu este un tunel: nimic din el nu creează un VPN și nimic nu criptează încărcătura utilă. Modul TLS al firmware-ului este o funcție separată, cu propria comandă și propria gestionare a certificatelor, iar un modul UART oarecare poate să nu le accepte pe niciuna. Consultați referința comenzilor AT pentru TCP/IP a firmware-ului dumneavoastră în loc să presupuneți că sintaxa de mai sus i se aplică.
Lungimea încărcăturii utile din AT+CIPSEND trebuie să corespundă cu ce trimiteți efectiv, altfel modulul va aștepta octeți care nu sosesc niciodată și conexiunea va părea blocată. Acea defecțiune arată ca o problemă de rețea și este aproape întotdeauna o eroare de o unitate la lungime.
Direcționați conexiunea prin gateway
Gateway-ul are nevoie de o rută către destinația privată, de permisiunea de a redirecționa din rețeaua dispozitivelor în tunel și de o cale de întoarcere care ajunge la modul. Dacă partea îndepărtată nu rutează înapoi în subrețeaua dispozitivelor, proiectul are nevoie de o regulă de traducere deliberată, iar acea regulă schimbă identitatea sursă pe care o vede serviciul.
ip route get 10.90.0.20 sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000' sudo conntrack -L | grep 9000
Urmăriți mai întâi calea de întoarcere. Un pachet redirecționat care ajunge la serviciu și nu se întoarce niciodată produce un timeout la modul fără nicio eroare pe gateway, ceea ce îi face pe oameni să se uite ore întregi la legătura Wi-Fi. Intrarea din conntrack vă spune dacă gateway-ul a văzut răspunsul.
Decideți unde se termină de fapt tunelul
Tunelul începe la gateway. Nu criptează legătura UART și nu transformă segmentul LAN dintre modul și gateway într-o parte a tunelului. Tot ce are nevoie de protecție pe acel segment are nevoie de propriul mecanism, iar TCP simplu din acest exemplu nu este TLS.
Decideți și ce se întâmplă când tunelul cade. Dacă livrarea trebuie să se facă doar prin VPN, politica de redirecționare nu trebuie să permită aceeași destinație pe o cale alternativă, pentru că o rută de rezervă anulează cerința în tăcere. Limitați comportamentul de reconectare astfel încât un modul deconectat să nu inunde legătura serială sau serviciul aflat la distanță cu încercări repetate.
Notați cele patru răspunsuri împreună: adresa modulului, ținta socket-ului, ruta gateway-ului și unde începe criptarea. Următoarea persoană care va depana acest dispozitiv va avea nevoie de toate patru, iar niciunul nu poate fi dedus doar din firmware.