Para que isso funcione, seu roteador precisa suportar um recurso chamado NAT suspenso. Basicamente, ele tem que realizar a tradução NAT, mesmo que o pacote não esteja na interface WAN (que é a interface onde o NAT é normalmente aplicado). Alguns roteadores suportam isso, outros não. Linux, por exemplo, não faz, e muitos roteadores domésticos são construídos com o Linux. Você deve ter um dos que não o faz.
Esteja ciente de que, mesmo que o NAT hairpin funcione, todo o tráfego nesse cenário é forçado a passar pelo roteador, enquanto se você se comunicar diretamente com o IP interno do servidor web, o tráfego pode ir diretamente para o servidor web na camada 2. Por esse motivo, sua solução dnsmasq
é melhor. Essa solução nem sempre é possível (por exemplo, se alguns hosts atrás do NAT forem estaticamente configurados para usar um servidor de nomes diferente daquele fornecido pelo servidor DHCP), mas se funcionar para você, você deve ir com ele.