¿Cómo hacer que un servidor web local sea visible desde Internet * sin * configurar el reenvío de puertos en el enrutador?

12

Desarrollo sitios web en mi computadora portátil (de gama alta) y trabajo desde una variedad de ubicaciones físicas.

Me gustaría ahorrar la molestia de sincronizar constantemente con un servidor web visible desde el exterior para que los clientes prueben el progreso del sitio (o para fines relacionados). Por lo tanto, estoy tratando de encontrar una manera de permitir que mi computadora portátil sea públicamente automática visible desde Internet, desde cualquier ubicación, incluso cuando no tengo acceso al enrutador para configurar el reenvío de puertos (como desde cafeterías u otras conexiones inalámbricas públicas).

Ya soy usuario de DynDNS para hacer mi elección de nombres de dominio hacia adelante a un servidor de escritorio a través de un router que yo he creado ... pero como digo, me gustaría desechar el paso de utilizar este servidor de escritorio.

Esperaba que los servicios de proxy inverso pagados (cobrando una tarifa mensual por una cuenta) proporcionarían un software de "proxy inverso" cliente / servidor patentado a nivel de socket que podría usarse para este propósito. No puedo encontrar uno. Ya uso TeamViewer y LogMeIn, que proporcionan servicios propietarios similares. De hecho, intenté usar LogMeIn Hamachi VPN para hacer esto posible, haciendo que mi escritorio (ya visible en Internet) reenvíe el tráfico IP que solicita el puerto 80 a través de la VPN a mi computadora portátil. Sin embargo, no parece posible configurar Hamachi / Windows de esta manera (pero podría estar equivocado).

Espero que haya una manera simple y robusta de lograr esto.

Dan Nissenbaum
fuente
En realidad, puede configurar un servidor web básico utilizando el navegador web Opera (Opera unite), pero esta es una solución solo en el caso de la aplicación HTML + JavaScript que creo que no se adapta a sus necesidades.
jakub.g
Actualmente tengo un servidor web operativo: Apache (configurado como parte de una instalación de XAMPP para Windows). Este servidor web funciona bien, y cuando lo ejecuto en mi escritorio detrás de un enrutador permanente no tiene problemas para ser visible desde Internet, porque configuré el reenvío de puertos en mi enrutador. Estoy interesado en encontrar una manera de hacer que mi servidor web local sea visible públicamente desde Internet cuando no tengo acceso al enrutador para configurar el reenvío de puertos.
Dan Nissenbaum

Respuestas:

8

Si tiene un servidor al que puede enviar SSH y ese servidor le permite escuchar en los puertos relevantes las direcciones IP públicas (que si lo controla, lo hará, tal vez incluso la máquina de escritorio que describe si instala SSHd a través de cygwin o similar) podría usar la opción de túnel de SSH para atraer tráfico a su servidor local.

Algo así como: ssh [email protected] -g -R 11.22.33.44:80:127.0.0.1:80una vez conectado y autenticado, hará que el puerto 80 en 11.22.33.44 (suponiendo que sea una dirección pública del servidor) tome conexiones que luego se reenvían a su puerto local 80. Necesita la opción GatewayPorts habilitada en el servidor para escuchar en una dirección de host no local de esta manera, y debe iniciar sesión como root para escuchar en puertos inferiores a 1024, y si ya hay un servicio escuchando en el puerto 80, obviamente debe elegir algo más de todos modos. -CSe recomienda agregar la opción para habilitar la compresión de las transmisiones que se realizan a través de SSH, especialmente si conecta la computadora portátil a través de una red lenta (tal vez atascada en el medio de la nada con solo una conexión móvil GPRS disponible).

Para usar ssh en Windows tienes algunas opciones. Puede instalar el puerto de cygwin [entonces el comando que le di anteriormente debería JustWork (tm)] o usar algún otro cliente. PuTTY es una opción muy popular y admite túneles de puertos remotos.

De esta manera, el servidor web de su máquina siempre estará disponible en la misma dirección cuando esté conectado, sin importar desde dónde se conecte, por lo que no es necesario usar DNS dinámico para los nombres amigables que le gustaría asignar (suponiendo que el servidor al que se conecta tiene una dirección pública fija, por supuesto).

En lugar de utilizar un servidor doméstico o de oficina para esto, lo que puede ralentizar aún más las cosas a menos que tenga una buena conexión rápida en ambas direcciones allí, puede obtener mejores resultados alquilando un pequeño VPS de Linux en algún lugar (preferiblemente en el mismo país) solo por este propósito. Solo necesita las máquinas más pequeñas siempre que haya suficiente ancho de banda, por lo que esto solo costará un par o unos pocos $ por mes.

Además de SSH, también podría considerar una herramienta VPN como OpenVPN y usar reglas simples de iptables en el servidor para reenviar las conexiones a su máquina cuando esté conectado. Esto puede ser más eficiente y menos complicado una vez configurado, pero puede ser un poco más complicado de configurar si no está familiarizado con él y con el enrutamiento en general. Nuevamente, un VPS barato o su propio servidor de oficina / hogar funcionaría como el extremo del servidor de la VPN.

David Spillett
fuente
+1: Estaba a punto de sugerir un túnel ssh, pero me adelantaste y lo explicaste más claramente de lo que debería, para empezar.
Dave Sherohman
Excelente respuesta, gracias. Ya tengo WinSSHD (de Bitvise, un programa pago), así que debería poder usarlo. Puedo intentar usar iptables para enrutar los datos (inicialmente al pensar en esto, me confundí porque sabía que los datos llegaban a la computadora en la red local compartida con el enrutador, pero no en la red local compartida con la VPN - No es que esto deba confundirme). ¡Cualquiera que desee publicar un ejemplo de la entrada iptable necesaria que funciona con un enrutador y pasa datos a una red VPN, sería bienvenido y apreciado!
Dan Nissenbaum
1

Túnel IPV6 en la computadora portátil, combinado con un proxy ipv4 a 6: gogo6 tiene un servicio agradable y gratuito con un cliente para actualizar automáticamente como parte de freenet6 . Combine eso con un registro AAAA y un proxy que se traduzca de ipv6 a 4 ( sixxs ejecuta uno público), o para una solución más elegante, su propio servidor proxy ( polipo podría funcionar) que realiza la traducción en la misma dirección A

Configurado correctamente, esto debería ser en su mayoría transparente, aparte de una ligera latencia por rebotar tantas veces.

Journeyman Geek
fuente