¿Cómo hago que IIS funcione y sea accesible fuera de mi red detrás de un enrutador? [cerrado]

9

Mi máquina ejecuta Windows 7 Ultimate. Esto es lo que he hecho (con éxito) hasta ahora:

  1. Instalé IIS 7.5 con PHP sobre FastCGI
  2. Lo tengo funcionando! Cuando voy a http: //localhost/index.php , mis scripts PHP funcionan bien.
  3. Ejecuté ipconfig para descubrir que mi dirección IP local es 192.168.1.102. Confirmé que http://192.168.1.102/index.php funciona exactamente como la dirección localhost anterior.
  4. Ingresé a la administración de mi enrutador (tengo un Linksys WRT54G2) y configuré el reenvío de puertos en el puerto 80 a 192.168.1.102. Ahora el puerto 80 está reenviando a mi máquina.
  5. Configure una regla de entrada en el Firewall de Windows para permitir toda la actividad en el puerto 80.
  6. Descubrí cuál es mi dirección IP externa de Google. Llamémoslo XXX.XX.XX.XX.

Sin embargo, cuando intento ir a http: //XXX.XX.XX.XX/index.php desde mi propia máquina, o desde una computadora lejana y no en mi red, de cualquier manera ... no obtengo nada. Intenta conectarse por un tiempo (sin éxito) pero finalmente se da por vencido.

Esto es lo que me pregunto:

  1. ¿Qué me estoy perdiendo? ¿Qué olvidé / pasé por alto? ¿Cómo hago que esto funcione y sea accesible fuera de mi propia red local?
  2. Suponiendo que esto funcione, ¿cómo puedo usar un puerto que no sea el puerto 80? ¿Qué cambios necesitaría hacer (por ejemplo, IIS, Firewall de Windows, administración de enrutadores, etc.) para que eso sea posible?

Muchas gracias de antemano!

Soapergem
fuente
1
vea si su puerto se reenvió con éxito aquí yougetsignal.com/tools/open-ports
smohamed

Respuestas:

5

Esto suena como un problema HTTP.SYS que está teniendo.

A continuación se muestra un extracto del blog de Scott Hanselman que describe cómo exponer IISExpress fuera de localhost. La publicación del blog es más larga y también describe cómo conectar SSL. Pero creo que los comandos que he publicado a continuación, que saqué de su publicación, lo ayudarán a resolver el problema que está teniendo.

Primero, debemos decirle a HTTP.SYS a nivel del núcleo que está bien permitir que todos hablen con esta URL haciendo una "Reserva de URL". Desde un símbolo del sistema administrativo:

netsh http add urlacl url=http://<LocalComputerName>:80/ user=everyone

A continuación, ya que quiero poder hablar con IIS Express desde el exterior (gente de mi red, etc. No solo localhost), entonces necesito permitir IIS Express a través del Firewall de Windows. Puedo hacerlo gráficamente desde Windows o escribir:

netsh firewall add portopening TCP 80 IISExpressWeb enable ALL

Es posible que no necesite el último comando ya que declara que ya creó una regla de firewall.

jamason1983
fuente
Ejecuté el primer comando netsh para agregar una reserva de URL, pero esto no hizo nada (aún funcionaba localmente, pero no fuera de mi red). ¿Alguna otra idea?
Soapergem
Esto no se ve bien. No debería tener que manipular con http.sys para obtener una instancia real de IIS 7.5 (no IIS Express) reenviada por el puerto.
TristanK
2
  1. (Acceso desde fuera de su red) Muchos ISP residenciales (y algunos ISP comerciales) bloquearán el tráfico entrante en ciertos puertos de servicio, como el puerto 80 o 25. Esto generalmente es para evitar que ejecute servicios comerciales en una línea residencial debido al uso de ancho de banda. La alternativa es ejecutarlo en otro puerto (ver más abajo).

  2. (Acceso desde dentro de su red) La situación que está describiendo suena como una horquilla NAT. Aquí hay una buena descripción general de alto nivel de Hairpin NAT . Deberá agregar reglas NAT a su enrutador para que siempre el tráfico destinado a su IP externa, el puerto 80 pase a través de su enrutador y no directamente de host a host dentro de su red. Advertencia: es posible que su enrutador no pueda hacer esto.

  3. Cambie el enlace del puerto en IIS, luego reinicie el sitio web.

Joel E Salas
fuente
Agregué un enlace a IIS para que funcione en el puerto 8080, y nuevamente, esto funciona localmente. Entonces 192.168.1.102:8080/index.php funciona. También agregué una regla de entrada al Firewall de Windows para el puerto 8080, sin embargo, todavía no funciona fuera de mi red. Busqué agregar reglas NAT a mi enrutador Linksys WRT54G2, y la ayuda que encontré en línea dijo que esto implicaría configurar sus opciones de "Activación de puertos". Configuré esto, pero aún así ... sin dados. ¿Cualquier otra sugerencia?
Soapergem
1
Si puede acceder internamente, entonces el Firewall de Windows no es su problema. La activación de puertos no es lo que quieres. Vas a utilizar el reenvío de puertos (si tu enrutador lo admite). Reenvíe el tráfico en el puerto 8080 en la interfaz externa de su enrutador a 192.168.1.102:8080
Joel E Salas
Ya estaba haciendo eso (reenvío de puertos en ambos puertos 80 y 8080) ANTES de hacer la pregunta. Todavía me falta algo, al parecer.
Soapergem
¿Tiene el enrutador alguna regla de firewall real (aparte de las reglas NAT) que podría estar bloqueando el tráfico? Si es posible, configure una casilla que ejecute pfSense para usarla como enrutador para fines de depuración. Su enrutador (que no está diseñado para servicios de alojamiento) es casi seguro la causa de sus problemas.
Joel E Salas
Parece que no hiciste nada malo en el nivel IIS, es solo que el enrutador no es intuitivo / tu ISP te está bloqueando. También es posible que pienses que tu IP está doblemente indirecta; verifique la idea del enrutador de cuál es la IP externa.
TristanK
0

Yo tuve el mismo problema. Firewall de Windows está bloqueando el acceso. Apáguelo y verifíquelo nuevamente. Supongo que funcionará.

Larry Fortna
fuente
2
Por lo general, no es una buena solución simplemente apagar un firewall.
usuario9517
Agregue excepciones para los puertos 80 y 443 en su lugar.
Najeeb