Estoy tratando de abrir el puerto 3000 en Ubuntu 12.04, porque tengo un servidor web escuchando allí. Estoy un poco fuera de mi zona de confort aquí, y pasé muchas horas tratando de resolver el problema sin éxito.
El puerto parece estar abierto en el firewall:
$> sudo ufw status
Status: active
To Action From
-- ------ ----
...
3000/tcp ALLOW Anywhere
3000/tcp ALLOW Anywhere (v6)
El servidor está escuchando bien en ese puerto:
$> netstat -an | grep "LISTEN "
...
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN
...
E incluso puedo wget
dejar la página de índice:
$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK
Y el archivo recibido contiene lo que espero ("hola mundo" :).
Sin embargo, cuando intento desde otra computadora, o si wget mydomain.com:3000
obtengo "connection refused"
, y nmap me dice que el puerto no está abierto:
$> 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
¿Alguna idea de lo que debería probar a continuación?
EDITAR
Esto es lo que da traceroute:
$> 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
la computadora remota. Puede ** eliminar los dos últimos octetos de la última IP (servidor) por privacidad.Respuestas:
Si su servidor está escuchando solo en la interfaz localhost, no podrá acceder desde una computadora remota. Este parece ser su problema principal, ya que solo 127.0.0.1:3000 aparece en su salida de netstat.
También deberá asegurarse de que "mydomain.com" se resuelva en la dirección IP correcta para su máquina, de modo que la conexión a esta resulte en una comunicación con la interfaz externa de esa máquina.
fuente
eth0
, o algo así), dirección IP (192.168.1.99, o algo así), o la dirección MAC. Esto depende del programa.Recientemente tuve este problema con un servidor HTTPS de nodejs, y la solución fue no usar "localhost", "127.0.0.1" o incluso el nombre de dominio. Fue para usar "0.0.0.0"
Creo que esto actúa como un comodín, ahora permite la resolución pública a través del nombre de dominio y también funciona con "localhost"
Editar: Aquí hay un enlace a una página predeterminada del servidor sobre el tema 0.0.0.0: /server/78048/whats-the-difference-between-ip-address-0-0-0-0-and- 127-0-0-1
fuente
}).listen(3000, '127.0.0.1');
a}).listen(3000, '0.0.0.0');
en mi código.¿Existe alguna posibilidad de que esté utilizando AWS o algún otro servicio en la nube? En ese caso, el puerto debe abrirse en el nivel de configuración de incance (OS) o posterior. En particular, en AWS debe buscar "Grupos de seguridad" donde debe abrir el acceso al puerto 3000
fuente