Atualmente tenho um programa que solicita dados de um servidor (digamos google.com) e obtém respostas desse mesmo servidor. Este aplicativo funciona em muitos dispositivos como Android, iOS e Windows. A implantação neste servidor é difícil, pois o back-end é enorme, então o que eu gostaria de fazer é interceptar esse tráfego e redirecioná-lo para um servidor local para fins de desenvolvimento em toda a rede para ver como ele funciona em todos os dispositivos que ele suporta .
A aplicação acessa o servidor e todos os seus subdomínios (portanto *.google.com
). O que eu gostaria de fazer é rotear todo esse tráfego do meu aplicativo para um servidor completamente diferente, ou seja, localhost, e então implantar o back-end depois que eu terminar de editá-lo no localhost para o servidor principal.
Todo o tráfego será semelhante a este diagrama aqui
Para todos os pedidos:
*.google.com ---------> localhost:8080
O aplicativo espera que esteja solicitando conteúdo,
*.google.com
mas na verdade está solicitando conteúdo do localhost na porta8080
Para respostas:
*.google.com <-------- localhost:8080
O aplicativo espera que esteja recebendo uma resposta,
*.google.com
mas obtém uma resposta do localhost na porta8080
. A solicitação é completamente do mesmo formato como se estivesse sendo obtida, de*.google.com
modo que o aplicativo não percebe a diferença além de conteúdo diferente.
Configurei meu servidor localhost para aceitar e reconhecer automaticamente todas as solicitações solicitadas pelo aplicativo, para que as respostas não sejam um problema.
O único problema que surge é redirecionar todo esse tráfego para toda a rede. No entanto, não acho impossível, pois já vi utilitários em toda a rede, como o pihole, fazer coisas semelhantes, onde eles usam um filtro para bloquear domínios específicos que lidam com anúncios. Não me importo de ter que alterar meu DNS em vários dispositivos, pois tudo o que quero é ter a capacidade de redirecionar qualquer tráfego conforme descrito acima.
Existe alguma ferramenta disponível que eu possa usar ou terei que criar a minha? Quais recursos estão disponíveis?
Você pode conseguir isso de diferentes maneiras:
Executando o NAT de destino em todos os endereços IP pertencentes ao serviço de destino. Isso permite reescrever a porta e o IP de destino dos pacotes.
Usando um servidor DNS com entradas estáticas. Isso só permitirá que você modifique o endereço de destino, não a porta.
Ambas as abordagens atendem ao requisito de alcançar o redirecionamento em toda a rede. No entanto, ambas as abordagens quebrarão o HTTPS. Para interceptar corretamente o HTTPS, você precisará:
Como você pode ver, provavelmente terá que abandonar o requisito de HTTPS ou de uma solução em toda a rede.
Além disso, é importante saber que, embora a abordagem baseada em DNS (por exemplo, pihole) deva funcionar para toda a rede, você está suscetível ao "problema do cliente burro". Os clientes não são realmente forçados a usar o DNS de seu sistema operacional. Por exemplo, alguns navegadores têm o DoH ativado por padrão; que contorna o DNS configurado no sistema operacional.