Sätt VPN:en bakom en UART Wi-Fi-modul, inte inuti den
En UART Wi-Fi-modul behöver en TCP-socket, och gatewayen äger tunneln. Namnge dess adress, håll returvägen öppen och vet var krypteringen börjar.
En mikrokontroller med en UART Wi-Fi-modul behöver inte implementera en VPN för att nå en tjänst bakom en. Modulen kör redan en TCP/IP-stack och exponerar sockets över serieporten, och en gateway i samma LAN kan föra den trafiken genom tunneln. Designen fungerar bara om du kan svara på fyra frågor i ordning, så behandla den som en checklista: adress, socket, rutt, gräns. Stanna vid den första porten som fallerar, för de senare kan inte kompensera för den.
Ge varje lager en uppgift
UART-länken bär AT-kommandon och nyttolast mellan mikrokontrollern och modulen. Modulen ansluter till Wi-Fi-nätet och äger IP-anslutningen, inklusive sin källadress. Gatewayen äger tunneln, inloggningsuppgifterna och vidarebefordringspolicyn. Det är att hålla dessa uppgifter åtskilda som gör designen felsökbar i varje steg.
Åtskillnaden ändrar också hur du skriver gatewaypolicyn. En källregel ska namnge modulens LAN-adress, inte en påhittad adress för mikrokontrollern bakom serielänken. Mikrokontrollern har ingen egen IP-identitet i den här designen, och att låtsas att den har det ger en regel som aldrig matchar.
Ge modulen en stabil adress via den reserveringsmekanism som nätverket stöder, eller placera enheterna på ett eget segment och låt gatewayen matcha efter gränssnitt. En poöladress som ändras efter en omstart kommer förr eller senare att bryta en policy som var korrekt när du skrev den.
Kan gatewayen namnge modulens adress?
Innan någon socket öppnas ska du bekräfta att modulen är ansluten, har en adress och att gatewayen ser den på det förväntade gränssnittet. Det här är porten som oftast fallerar tyst, eftersom modulen gärna rapporterar ett anslutningsförsök som aldrig lämnade LAN-et.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Läget med en anslutning håller kommandosekvensen enkel, och det är rätt utgångspunkt för en sensor som talar med en enda tjänst. Läget med flera anslutningar ändrar syntaxen för varje senare kommando, så bestäm vilket du är i innan du kopierar ett exempel från en annan firmwareversion.
Öppna socketen från modulen
När adress och läge är fastställda kan modulen öppna en TCP-anslutning till den privata tjänsten. Adressen nedan är ett exempel från ett dokumentationsområde; byt ut den mot din egen och behåll samma form.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Det AT-kommandot öppnar en vanlig TCP-socket, och en socket är inte en tunnel: ingenting i den skapar en VPN och ingenting i den krypterar nyttolasten. Firmwarens TLS-läge är en separat funktion med eget kommando och egen certifikathantering, och en godtycklig UART-modul stöder kanske ingen av dem. Slå upp i TCP/IP AT-kommandoreferensen för din firmware i stället för att anta att syntaxen ovan gäller för den.
Nyttolastens längd i AT+CIPSEND måste stämma med det du faktiskt skickar, annars väntar modulen på byte som aldrig kommer och anslutningen ser ut att hänga. Det felet ser ut som ett nätverksproblem och är nästan alltid en off-by-one i längden.
Routa anslutningen genom gatewayen
Gatewayen behöver en rutt till den privata destinationen, tillstånd att vidarebefordra från enhetsnätet in i tunneln och en returväg som når modulen. Om fjärrsidan inte routar tillbaka till enhetssubnätet behöver designen en medveten översättningsregel, och den regeln ändrar den källidentitet som tjänsten 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
Håll först koll på returvägen. Ett vidarebefordrat paket som når tjänsten och aldrig kommer tillbaka ger en timeout vid modulen utan något fel på gatewayen, vilket får folk att stirra på Wi-Fi-länken i timmar. conntrack-posten berättar om gatewayen såg svaret över huvud taget.
Avgör var tunneln faktiskt slutar
Tunneln börjar vid gatewayen. Den krypterar inte UART-länken, och den gör inte LAN-segmentet mellan modul och gateway till en del av tunneln. Allt som behöver skydd på det segmentet behöver sin egen mekanism, och vanlig TCP i det här exemplet är inte TLS.
Avgör också vad som händer när tunneln fallerar. Om leverans måste ske enbart via VPN får vidarebefordringspolicyn inte tillåta samma destination via en alternativ väg, eftersom en reservväg tyst undergräver kravet. Begränsa återanslutningsbeteendet så att en frånkopplad modul inte översvämmar serielänken eller fjärrtjänsten med försök.
Skriv ner de fyra svaren tillsammans: modulens adress, socketens mål, gatewayens rutt och var krypteringen börjar. Nästa person som felsöker den här enheten behöver alla fyra, och ingen av dem kan härledas bara från firmwaren.