Estou tentando abrir a porta 3000 no Ubuntu 12.04, porque tenho um servidor web ouvindo lá. Estou um pouco fora da minha zona de conforto aqui e passei muitas horas tentando resolver o problema sem sucesso.
A porta parece estar aberta no firewall:
$> sudo ufw status
Status: active
To Action From
-- ------ ----
...
3000/tcp ALLOW Anywhere
3000/tcp ALLOW Anywhere (v6)
O servidor está escutando bem nessa porta:
$> netstat -an | grep "LISTEN "
...
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN
...
E eu posso até wget
ficar bem na página de índice:
$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK
E o arquivo recebido contém o que eu espero ("olá mundo" :).
No entanto, ao tentar em outro computador, ou se wget mydomain.com:3000
eu receber "connection refused"
, e o nmap me diz que a porta não está aberta:
$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux
Alguma idéia do que devo tentar a seguir ???
EDITAR
Aqui está o que o traceroute fornece:
$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 hops max, 60 byte packets
1 mydomain.com (176.31.x.x) 0.034 ms 0.013 ms 0.010 ms
traceroute mydomain.com
computador remoto. Você pode ** out os dois últimos octetos do último IP (servidor) para privacidade.Respostas:
Se o servidor estiver escutando apenas na interface do host local, você não poderá acessá-lo em um computador remoto. Esse parece ser o seu principal problema, pois apenas 127.0.0.1:3000 está listado na sua saída netstat.
Você também precisará garantir que "mydomain.com" resolva para o endereço IP correto da sua máquina, para que a conexão a ela resulte em comunicação com a interface externa dessa máquina.
fonte
eth0
ou algo assim), endereço IP (192.168.1.99 ou algo assim) ou pelo endereço MAC. Isso depende do programa.Recentemente, tive um problema com um servidor HTTPS do nodejs, e a solução foi não usar "localhost", "127.0.0.1" ou mesmo o nome de domínio. Era para usar "0.0.0.0"
Eu acredito que isso funciona como um curinga, agora permitindo a resolução pública por meio do nome de domínio e também funciona com "localhost"
Edit: Aqui está um link para uma página de falha do servidor no tópico 0.0.0.0: /server/78048/whats-the-difference-between-ip-address-0-0-0-0-and- 127-0-0-1
fonte
}).listen(3000, '127.0.0.1');
para}).listen(3000, '0.0.0.0');
no meu código.Existe alguma chance de você estar usando a AWS ou qualquer outro serviço em nuvem? Nesse caso, a porta deve ser aberta no nível de configuração da instância (SO) ou depois. Em particular na AWS, você deve procurar "Grupos de Segurança", onde deve abrir o acesso à porta 3000
fonte