No se puede acceder a localhost a través de IP local

Quiero conectarme a mi servidor web local (servidor NodeJS) que se ejecuta en mi MacBook con mi iPhone.

En mi Mac puedo acceder al servidor a través de http://localhost:3000/. Ahora todo lo que debería tomar es reemplazar localhost con la dirección IP local de mi Mac de esta manera http://192.168.0.13:3000/. Sin embargo, en mi iPhone no puedo acceder al servidor de esta manera e incluso cuando intento abrir http://192.168.0.13:3000/en mi Mac no se establece ninguna conexión.

Este es definitivamente un problema con mi Mac y no con mi programa porque cuando ejecuto el servidor en Windows e intento conectarme con la dirección IP local, funciona bien.

También probar esto en otra red Wi-Fi no ayuda o cambiar el puerto tampoco cambia nada.

Estoy usando Mac OSX 10.11.5 y mi firewall está desactivado.

¿Como puedó resolver esté problema?

Tablas de enrutamiento ( netstat -r)

(Eliminado)

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
Tuve la tentación de votar para cerrar como demasiado amplio, pero de todos los comentarios, veamos si una descripción general de cómo determinar si el OP piensa que realmente está en la Mac es, de hecho, la causa.
Hola HansMu158, ¿alguna vez se dio cuenta de por qué no funcionaba la navegación a la dirección IP de su servidor? Es posible que tenga un problema similar al tuyo y me pregunto si tienes sugerencias. ¡Gracias! Consulte: apple.stackexchange.com/q/284762/53510
@Ryan Sí, descubrí que el problema fue causado por un antiguo programa antivirus (Eset) que tenía en mi Mac que, aunque no estaba activo ni en ejecución, tenía un firewall que bloqueaba casi todo el tráfico entrante. Eché un breve vistazo a su problema... Cuando está desarrollando con un servidor local, es necesario establecer el nombre de host del servidor en "0.0.0.0" para permitir el acceso desde su red. Tal vez su entorno de desarrollo no esté haciendo eso por sí mismo, por lo que podría echarle un vistazo.
Descubrí que ninguna de las respuestas a continuación funcionaba con el navegador Safari, pero cuando cambié a Chrome, pude ver el servidor en myname.local:3000, donde está mynameel nombre de la máquina que ejecuta el servidor.

Respuestas (3)

Por lo que puedo decir, el comportamiento es correcto. Un servidor web de nodo básico usa dns.js para resolver cualquier nombre de host, que a su vez usa el método de resolución de DNS del sistema.

El respondedor mDNS de OS X no puede resolver un nombre de host "127.0.0.1" ni "localhost" (ni inverso ni inverso).

Entonces, use la IP de su Mac (es decir, 192.168.0.13) o su nombre de host (por ejemplo, tims-macbook-pro) como nombre de host. Para anunciar el servicio en Bonjour tienes que usar dns-sd .

O cree varias direcciones IP de escucha como en estas preguntas y respuestas .

Eso puede ser correcto, pero tampoco funciona con un servidor MAMP Apache. También la misma configuración funciona en Windows, lo cual es algo que no entiendo muy bien.
@HansMu158 Haga una segunda pregunta sobre su configuración y nodo MAMP. Si es posible, incluya algunas partes relevantes de los archivos de configuración (por ejemplo, apache), un archivo *.js de alguna manera eliminado que contenga la http.createServer(handler).listenparte y los detalles de configuración de MAMP.
Realmente creo que este problema no es específico de MAMP y mi servidor Node JS. En primer lugar, el servidor de nodos se puede ejecutar y acceder a través de una IP local en Windows. Además, incluso ssh-ing en mi MacBook (que está habilitado para compartir) solo funciona con el host local, no con la IP local. Así que ssh Tim@localhostfunciona bien, mientras que ssh Tim@192.168.0.13me da el siguiente error:ssh_exchange_identification: Connection closed by remote host
¿Hay alguna forma de ver qué conexiones están entrando en la Mac y cuáles están permitidas o bloqueadas?
Y como respuesta al problema de ssh: no uso soluciones ssh que no sean OSX y /etc/hosts.denyno /etc/hosts.allowexisten. Después de eliminar todo el ~/.ssh/known_hostsarchivo, ssh sigue sin funcionar y me da el mismo error. El archivo ~/.ssh/authorized_keystampoco sale.
Sí, pero me gustaría verificar si el host remoto puede acceder a la Mac y, por lo tanto, sería útil monitorear la conexión entrante, pensé.
@HansMu158 Recomiendo usar nc (netcat) y nmap en su Mac y en un host remoto. nc puede crear un puerto abierto arbitrario y nmap verifica esto. lsof también es útil. ¡Y sin olvidar Wireshark!
Ok, gracias, lo intentaré a ver qué resultado.
Entonces, después de experimentar un poco, todavía no conseguí que funcionara. Todo lo que descubrí es que mi servidor no se ve cuando se ejecuta sudo netstat -a. ¿Tiene esto algo que decir?
@HansMu158 Primero elegiría nmap 127.0.0.1y nmap 192.168.0.13. Luego elija sudo lsof | grep LISTENy/o sudo netstat -a | grep LISTEN. ¿Qué "servidor" mencionas en tu comentario? nodo-http, apache-http/https?
Estoy hablando de ambos servidores en este momento. nmap 192.168.0.13me da el siguiente resultado: PORT STATE SERVICE 22/tcp open ssh 3000/tcp open ppp 8888/tcp open sun-answerbooklos puertos 3000 y 8888 son para mis servidores, pero extrañamente no puedo acceder a algunos a través de la IP local
@HansMu158 ¿Ya revisó su archivo de hosts? ¿Tienes alguna ruta personalizada habilitada? ¿Configuró y usó algunas conexiones/proveedores de VPN?
¿Para qué debo comprobar mi archivo de hosts? Y no estoy exactamente seguro acerca de VPN, creo que habilité TOR una vez.
@HansMu158 El archivo de hosts predeterminado se ve así ( sin las líneas de YouTube, por supuesto). Puede agregar su tabla de enrutamiento a su pregunta: netstat -r. IPv6 no es necesario aquí.
Bien, he adjuntado ambos arriba en mi pregunta original.
¿Esto ayuda a averiguar cuál es el problema?
No hay errores visibles. Sin embargo, deshabilitaría awdl0 temporalmente: sudo ifconfig awdl0 down. Probablemente necesitaría tener acceso al sistema para resolver el problema...
¿Por qué lo deshabilitarías? ¿Y qué harías si tuvieras acceso?

Puede resolver este problema de tres maneras:

  1. Ejecute una herramienta de escaneo de puertos desde el iPhone para asegurarse de que el puerto esté realmente abierto en la Mac. Las reglas del cortafuegos, la NAT incorrecta, los problemas con el enrutador/conmutador pueden ser la causa de que otro dispositivo no obtenga la ruta correcta hacia su Mac. Si la PC puede escanear puertos o navegar por el servidor web de Mac, sabrá que no es necesariamente la Mac.
  2. Problemas de DNS: en lugar de codificar la dirección IP, puede navegar a http://192.168.0.13.xip.io , lo que garantizará que el navegador web funcione si el dispositivo iOS tiene una configuración de solo IPv6. Es poco probable, pero en algún momento esto será más común. También puede usar la dirección IPv6 de Mac en lugar de la dirección IPv4.
  3. Configuración de proxy en iOS: nuevamente, si su dispositivo iOS tiene una VPN o un proxy web configurado, no necesariamente llegará al servidor web de Mac. Los pasos para el triaje que también son variados.
1. La herramienta de escaneo de puertos de iPhone muestra que el puerto está abierto. También un Port Scan en Mac encuentra el puerto.
2. Lamentablemente, cambiar a esta URL no funciona y 3. No tengo un proxy configurado en mi dispositivo iOS

Intente agregar su dirección IP local en httpd.conf (/etc/apache2/httpd.conf) como se muestra a continuación:

Listen 12.34.56.78:80

Escuchar: le permite vincular Apache a direcciones IP y/o puertos específicos, en lugar del valor predeterminado.

Guarde, cierre y reinicie apache con sudo apachectl restart.