Coloque a VPN atrás de um módulo Wi-Fi UART, não dentro dele
Um módulo Wi-Fi UART precisa de um socket TCP, e é o gateway que possui o túnel. Nomeie o endereço dele, mantenha o caminho de retorno aberto e saiba onde começa a cifragem.
Um microcontrolador com um módulo Wi-Fi UART não precisa de implementar uma VPN para chegar a um serviço situado atrás. O módulo já executa uma pilha TCP/IP e expõe sockets pela porta série, e um gateway na mesma LAN pode transportar esse tráfego pelo túnel. O projeto só funciona se conseguir responder a quatro perguntas por ordem, por isso trate-o como uma lista de verificação: endereço, socket, rota, limite. Pare no primeiro portão que falhar, porque os seguintes não o podem compensar.
Atribua uma tarefa por camada
A ligação UART transporta comandos AT e carga útil entre o microcontrolador e o módulo. O módulo junta-se à rede Wi-Fi e possui a ligação IP, incluindo o seu endereço de origem. O gateway possui o túnel, as credenciais e a política de encaminhamento. Manter estas tarefas separadas é o que torna o projeto depurável em cada etapa.
A separação também altera a forma como se escreve a política do gateway. Uma regra de origem deve nomear o endereço LAN do módulo, não um endereço imaginário para o microcontrolador atrás da ligação série. O microcontrolador não tem identidade IP própria neste projeto, e fingir que tem produz uma regra que nunca corresponde.
Dê ao módulo um endereço estável através do mecanismo de reserva que a rede suportar, ou coloque os dispositivos no seu próprio segmento e deixe o gateway corresponder por interface. Um endereço de conjunto que muda após um reinício acabará por quebrar uma política que estava correta quando a escreveu.
O gateway pode nomear o endereço do módulo?
Antes de se abrir qualquer socket, confirme que o módulo está associado, tem endereço e que o gateway o vê na interface esperada. Este é o portão que falha mais vezes em silêncio, porque o módulo relata de bom grado uma tentativa de ligação que nunca saiu da LAN.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
O modo de ligação única mantém a sequência de comandos simples, e é o ponto de partida correto para um sensor que fala com um único serviço. O modo de várias ligações altera a sintaxe de cada comando posterior, por isso decida em qual está antes de copiar um exemplo de outra versão de firmware.
Abra o socket a partir do módulo
Com o endereço e o modo definidos, o módulo pode abrir uma ligação TCP ao serviço privado. O endereço abaixo é um exemplo de um intervalo de documentação; substitua-o pelo seu e mantenha a mesma forma.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Esse comando AT abre um socket TCP simples, e um socket não é um túnel: nada nele cria uma VPN e nada nele cifra a carga útil. O modo TLS do firmware é uma funcionalidade separada, com o seu próprio comando e a sua própria gestão de certificados, e um módulo UART arbitrário pode não suportar nenhum dos dois. Consulte a referência de comandos AT de TCP/IP do seu firmware em vez de assumir que a sintaxe acima se lhe aplica.
O comprimento da carga útil em AT+CIPSEND tem de corresponder ao que envia realmente, senão o módulo fica à espera de bytes que nunca chegam e a ligação parece bloquear. Essa falha parece um problema de rede e é quase sempre um erro de uma unidade no comprimento.
Encaminhe a ligação através do gateway
O gateway precisa de uma rota para o destino privado, de permissão para encaminhar da rede de dispositivos para dentro do túnel e de um caminho de retorno que chegue ao módulo. Se o lado remoto não encaminhar de volta para a sub-rede de dispositivos, o projeto precisa de uma regra de tradução deliberada, e essa regra altera a identidade de origem que o serviço vê.
ip route get 10.90.0.20 sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000' sudo conntrack -L | grep 9000
Vigie primeiro o caminho de retorno. Um pacote encaminhado que chega ao serviço e nunca regressa produz um tempo limite no módulo sem qualquer erro no gateway, o que leva as pessoas a olhar para a ligação Wi-Fi durante horas. A entrada de conntrack diz-lhe se o gateway chegou a ver a resposta.
Decida onde o túnel termina realmente
O túnel começa no gateway. Não cifra a ligação UART, e não transforma o segmento LAN entre módulo e gateway numa parte do túnel. Tudo o que precise de proteção nesse segmento precisa do seu próprio mecanismo, e o TCP simples deste exemplo não é TLS.
Decida também o que acontece quando o túnel cai. Se a entrega tiver de ser apenas por VPN, a política de encaminhamento não pode permitir o mesmo destino por uma via alternativa, porque uma rota de recurso anula o requisito em silêncio. Limite o comportamento de reconexão para que um módulo desligado não inunde a ligação série nem o serviço remoto com tentativas.
Registe as quatro respostas em conjunto: o endereço do módulo, o alvo do socket, a rota do gateway e onde começa a cifragem. A próxima pessoa que depurar este dispositivo vai precisar das quatro, e nenhuma delas pode ser deduzida apenas do firmware.