Ein mikrokontrollar med ein UART Wi-Fi-modul treng ikkje å implementere ein VPN for å nå ei teneste bak ein. Modulen køyrer allereie ein TCP/IP-stack og eksponerer socketar over serieporten, og ein gateway på same LAN kan føre den trafikken gjennom tunnelen. Designet verkar berre om du kan svare på fire spørsmål i rekkjefølgje, så handsam det som ei sjekkliste: adresse, socket, rute, grense. Stopp ved den fyrste porten som sviktar, for dei seinare kan ikkje kompensere for han.

Gi kvart lag éi oppgåve

UART-sambandet ber AT-kommandoar og nyttelast mellom mikrokontrollaren og modulen. Modulen koplar seg til Wi-Fi-nettet og eig IP-sambandet, medrekna kjeldeadressa si. Gatewayen eig tunnelen, påloggingsinformasjonen og videresendingspolitikken. Det er å halde desse oppgåvene åtskilde som gjer designet feilsøkbart på kvart trinn.

Åtskilnaden endrar også korleis du skriv gatewaypolitikken. Ein kjeldenegel skal nemne LAN-adressa til modulen, ikkje ei tenkt adresse for mikrokontrollaren bak seriesambandet. Mikrokontrollaren har inga eiga IP-identitet i dette designet, og å late som han har det gir ei regel som aldri passar.

Gi modulen ei stabil adresse gjennom den reservasjonsmekanismen nettet støttar, eller set einingane på sitt eige segment og lat gatewayen matche etter grensesnitt. Ei pooladresse som endrar seg etter ein omstart vil før eller seinare bryte ein politikk som var riktig då du skreiv han.

Kan gatewayen nemne adressa til modulen?

Før nokon socket vert opna, stadfest at modulen er tilkopla, har ei adresse og at gatewayen ser han på det venta grensesnittet. Dette er porten som oftast sviktar lydlaust, fordi modulen gjerne rapporterer eit tilkoplingsforsøk som aldri forlét LAN-et.

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

Modusen med éi tilkopling held kommandorekkja enkel, og det er rett utgangspunkt for éin sensor som snakkar med éi teneste. Modusen med fleire tilkoplingar endrar syntaksen til kvar seinare kommando, så avgjer kva for ein du er i før du kopierer eit døme frå ein annan fastvareversjon.

Opne socketen frå modulen

Når adresse og modus er fastsette, kan modulen opne ein TCP-samband til den private tenesta. Adressa nedanfor er eit døme frå eit dokumentasjonsområde; byt ho ut med di eiga og hald same form.

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

Den AT-kommandoen opnar ein vanleg TCP-socket, og ein socket er ikkje ein tunnel: ingenting i han lagar ein VPN og ingenting i han krypterer nyttelasta. TLS-modusen til fastvaren er ein eigen funksjon med sin eigen kommando og si eiga sertifikathandtering, og ein vilkårleg UART-modul støttar kanskje ingen av dei. Slå opp i TCP/IP AT-kommandoreferansen for fastvaren din i staden for å tru at syntaksen ovanfor gjeld for han.

Nyttelastlengda i AT+CIPSEND må stemme med det du faktisk sender, elles ventar modulen på byte som aldri kjem, og sambandet vil sjå ut som det heng. Den feilen ser ut som eit nettverksproblem og er nesten alltid ein off-by-one i lengda.

Rut sambandet gjennom gatewayen

Gatewayen treng ei rute til den private destinasjonen, løyve til å videresende frå eininganettet inn i tunnelen og ein returveg som når modulen. Om fjernsida ikkje rutar tilbake til einingasubnettet, treng designet ein medviten omsetjingsregel, og den regelen endrar kjeldeidentiteten tenesta ser.

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

Fylg med på returvegen fyrst. Ein videresend pakke som når tenesta og aldri kjem tilbake gir ein tidsavbrot ved modulen utan nokon feil på gatewayen, noko som får folk til å stire på Wi-Fi-sambandet i timevis. conntrack-oppføringa fortel deg om gatewayen så svaret i det heile.

Avgjer kvar tunnelen faktisk sluttar

Tunnelen byrjar ved gatewayen. Han krypterer ikkje UART-sambandet, og han gjer ikkje LAN-segmentet mellom modul og gateway til ein del av tunnelen. Alt som treng vern på det segmentet treng sin eigen mekanisme, og vanleg TCP i dette dømet er ikkje TLS.

Avgjer også kva som skjer når tunnelen fell. Om levering må skje berre over VPN, må videresendingspolitikken ikkje tillate same destinasjon via ein alternativ veg, fordi ein reserveveg stille undergrev kravet. Avgrense åtferda ved gjenoppkopling slik at ein fråkopla modul ikkje oversvømmer seriesambandet eller den eksterne tenesta med forsøk.

Skriv ned dei fire svara saman: adressa til modulen, målet for socketen, ruta til gatewayen og kvar krypteringa byrjar. Den neste som feilsøkjer denne eininga treng alle fire, og ingen av dei kan utleiast berre frå fastvaren.

Relaterte artiklar