Digamos que temos:
- 192.168.0.1 roteador conectado à internet com IP global 1.2.3.4
- 192.168.0.10 máquina A com servidor web servindo na porta 80
- 192.168.0.20 máquina B (notebook)
O roteador está configurado no NAT para rotear tudo na porta 80 para 192.168.0.10.
Quando estou fora desta rede local, o http://1.2.3.4 funciona bem no navegador, é bem redirecionado para a máquina A, que atende a requisição.
Mas quando estou dentro da rede local (por exemplo com máquina B, um laptop conectado via WiFi ao roteador), fazer http://1.2.3.4 no navegador não funciona.
Eu esperava que funcionasse assim:
192.168.0.20 does a request to 1.2.3.4
the request arrives on router 192.168.0.1
router detects "1.2.3.4 is us!" so routing internally to 192.168.0.10
Aplicação: Tenho um domínio example.com
e o registro DNS A está definido como 1.2.3.4.
Acessando example.com
pelo navegador vai funcionar tudo... exceto se eu estiver na rede local da máquina A. Que pena!
Após mais pesquisas, descobri que esse recurso é chamado de Hairpinning ou loopback NAT, e nem todos os roteadores ISP o suportam.
No caso do meu roteador ISP, infelizmente não é suportado.