GBR: ADR-0008 Arquitetura do Túnel Reverso P2P (`gbr_tunnel`) e Mitigação de Vazamento de Protocolos | Wiki
GBR: ADR-0008 Arquitetura do Túnel Reverso P2P (gbr_tunnel) e Mitigação de Vazamento de Protocolos
*Status:* Aceito *Data:* 2026-05-01
*Contexto:*
Para viabilizar operações de suporte seguro (como acesso remoto a bancos de dados ou servidores HTTP de desenvolvimento locais) sem a abertura de portas no firewall dos clientes, o ecossistema necessitava de uma solução de túnel reverso assemelhada ao Ngrok. A implementação nativa sobre a malha Yamux apresentou dois problemas de rede de baixo nível:
1. *Violação de Ownership do Subject:* Ao delegar o manuseamento de sockets TCP a atores instanciados dinamicamente via a biblioteca padrão OTP, ocorriam falhas com a mensagem Cannot receive with a subject owned by another process.
2. *Vazamento de Protocolo (Protocol Leakage):* As respostas de confirmação de negociação da camada de aplicação do libp2p (ex: /tunnel/1.0\n) eram roteadas incidentalmente para o navegador HTTP que acionou o Gateway, causando erros do tipo ERR_INVALID_HTTP_RESPONSE.
*Decisão:*
-
*Padrão "Subject-First Proxy":* Em vez de instanciar atores genéricos para ouvir as respostas de rede, o fluxo do servidor adota uma abordagem de laço recursivo nativo. O processo de escuta TCP local assume, ele próprio, a criação da caixa de correio (Subject) antes de invocar a abertura de fluxo (Stream) no P2P, executando logo em seguida um
process.receivedireto em seu próprio Subject, garantindo integridade de memória e eliminando violações da árvore de processos Erlang. -
**Ator
Pipere Filtro de Ruído (Noise Gate):** O gerenciador do túnel implementa um mecanismo explícito de filtragem no byte-stream. Qualquer pacote entrante cujo byte inicial seja o caractere barra (/, código ASCII 47) é sumariamente descartado (assumido como string de controle multistream), assegurando que o navegador do cliente receba apenas cargas HTTP válidas (iniciando tipicamente porH, ex:HTTP/1.1 200 OK).
*Consequências:*
-
*Positivas:* Permite o tunelamento de tráfego de camada 7 e de camada de enlace (HTTP, WebSockets, tráfego PostgreSQL) totalmente contido e criptografado pela rede P2P
gbr_p2p. A independência tecnológica (desobrigação de dependências SaaS externas como Ngrok ou Cloudflare) aprimora a proposta de valor FinOps e garante privacidade ponta-a-ponta (Zero-Trust). -
*Negativas/Riscos:* A adoção de filtragem heurística baseada no primeiro caractere pode gerar falsos positivos se um pacote HTTP quebrado fragmentar exatamente no símbolo da barra inicial (
/). Monitoramento intensivo do fluxo será exigido em redes que realizem inspeção profunda de pacotes (DPI).