Supondo que a configuração de encaminhamento de porta no seu roteador está correta, você precisa garantir algumas coisas:
- A máquina 192.168.0.4 tem um servidor web em execução (OK).
- Está escutando 192.168.0.4:80 ou 0.0.0.0:80 (OK).
- O firewall que pode estar sendo executado nele permite conexões de entrada na porta 80 / tcp (UNKNOWN).
Com relação ao último ponto - não sei quais são as regras do iptables. Por favor poste a saída de
sudo iptables -vL INPUT -n
Se as conexões de entrada em 80 / tcp forem de fato permitidas, mas de alguma forma você não conseguir acessar seu servidor da web de fora da rede, talvez você queira fazer login no servidor web e usar tcpdump para capturar tráfego de entrada para ver se algum tentativas de conexão estão chegando a ele.
Uso:
export ext_if=$(ip ro | awk '/^default via/ {print }')
sudo tcpdump -i ${ext_if} port 80
Se você não vir nenhuma conexão quando estiver tentando se conectar ao seu servidor da Web de fora da sua rede, precisará corrigi-lo primeiro.
Se o firewall em sua máquina não permitir que as conexões de entrada atinjam a porta 80 / tcp, corrija isso executando o comando abaixo e verifique:
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
UPDATE: você também mencionou:
Esta é a saída do tcpdump depois de fazer um pedido ao meu ip público de a mesma máquina em que o servidor está sendo executado
Isso provavelmente não funcionará. O caminho do seu pedido é:
192.168.0.4 =>
<public_ip> (doing source and destination NAT, aka port forwarding) =>
192.168.0.4
Como você pode ver na saída do tcpdump, existem 3 solicitações HTTP iniciadas por qualquer ferramenta usada para abrir a conexão com seu servidor web, o roteador rejeita todas as conexões respondendo com pacotes com RST ("reset", ie " vá embora, feche a conexão ") flag set.
Até onde eu sei, muitos dispositivos que fornecem NAT não permitem que você inicie uma solicitação dentro da rede por trás do NAT para seu endereço IP público e depois para o host por trás do mesmo NAT por meio do encaminhamento de porta (destino NAT ).
Você deve tentar fazer uma solicitação de fora da sua rede. Se você não tiver um host externo em que possa efetuar login e usar, por exemplo, wget / curl para fazer a solicitação, tente algumas das muitas ferramentas baseadas na Web para fazê-lo, como link
Se isso funcionar e você obtiver um resultado que contenha pelo menos o código de status da solicitação HTTP (por exemplo, 200, 302, 404 etc.) e alguns cabeçalhos de resposta, como Server, Content-Type, isso confirmará que:
- seu IP público é acessível de fora
- o encaminhamento de porta configurado funciona
- o servidor da sua rede realmente recebe a solicitação e responde a ela.
Se você quiser acessar seu servidor da web usando seu IP público na mesma rede, você pode:
- adicione uma entrada apropriada ao seu arquivo / etc / hosts, apontando o nome do domínio do servidor para o endereço particular do seu servidor da web (um hack temporário).
- execute o chamado servidor split-dns (preferido, mas não vale a pena se for apenas para você)
- reconfigure seu roteador para permitir essas conexões. Isso pode ser feito, mas é improvável que o seu roteador doméstico (se é isso que você tem) possa fazer isso.