Tutorial para acceder a documentos compartidos desde internet

Hago este tutorial para que quede registro de cómo es el procedimiento que hice, porque seguramente algún día voy a querer probar otra vez y no me voy a acordar. Al mismo tiempo lo comparto por si a alguien le es de su interés.
Nota: no voy a detallar paso a paso todo el proceso, y algunas cosas las voy a dar por sabidas, o libradas a la imaginación, voluntad, y conocimiento de cada uno. Voy a suponer que el que lo lea tiene los conocimientos más básicos de linux y redes (puede editar un archivo de configuración y sabe lo que es la dirección IP)
El objetivo es acceder a una carpeta con archivos ubicada en la computadora X, localizada en la propia casa de cada uno, desde una computadora Y, propia, y ubicada en cualquier lugar del mundo (por ejemplo, un lugar con internet público, una escuela, una empresa o la casa de un amigo).
A este objetivo se le suman, entre otros, los siguientes inconvenientes:
- El ISP al que se conecta la computadora X bloquea todas las conexiones entrantes a los puertos desde el 1 hasta el 1023.
- El ISP al que se conecta la computadora Y bloquea todas las conexiones salientes hacia todos los puertos, excepto algunos en particular. Entre los puertos habilitados se encuentran el 80 (http), 1863 (Messenger), 1194 (openvpn), 3389, 8080 (http_alt).
En resumen, lo que pretendo lograr es que en la computadora Y tenga dentro de Mi PC una unidad de red a la que le haga doble clic, estando en cualquier lugar con una conexión a Internet, y pueda acceder a los archivos que se encuentran en una carpeta compartida en la computadora X.
El escenario es siguiente:
- La computadora X tiene instalada linux o Windows (da lo mismo, voy a suponer linux), se encuentra conectada a un router, con dirección IP fija 10.0.0.2. La computadora tiene instalada un servidor SSH (OpenSSH) y un servidor SMB (Samba).
- La computadora Y es portátil, tiene Windows XP SP3, y Putty instalado.
- El router al que está conectada X tiene dirección IP pública no estática. Esto se debe aclarar, ya que en algunos casos, ciertos ISP no brindan IPs públicas (Para mayor simplicidad en la conexiones se puede utilizar algún servicio de DNS dinámico como noip.com, freedns.afraid.org, casi todos los routers permiten manejarlos automáticamente. Antes había algunos buenos como DynDns, zoneedit y TZO pero ahora ya no son gratis)
Lo que vamos a hacer es conectarnos desde la computadora X a la computadora Y a través de un túnel SSH, que va a redirigir las conexiones a puertos de una dirección IP local (127.x.x.x) hacia cierta dirección IP y puertos, accesibles desde la computadora X. Esto último indica que nos va a permitir no sólo acceder a los archivos compartidos en la misma computadora X, sino también a los archivos de cualquier otra computadora que esté en la red de X (conectada al mismo router, por ejemplo). Por lo tanto, como se puede deducir, no es obligatorio que la computadora X posea un servidor SMB, ya que puede interesarnos por ejemplo, acceder a las carpetas de una computadora Z ubicada también dentro la comodidad de la propia casita. Para los ejemplos siguientes, para hacer más completo el tutorial, se va a suponer que se quiere acceder tanto a los archivos de la propia computadora X como de la computadora Z, cuya configuración no es importante. Se supondrá de antemano que el usuario hizo la prueba de conectarse a las carpetas de todas las computadoras desde dentro de la misma red. La conexión se realizará usando el cliente Putty, que es muy sencillo de usar y permite hacer el túnel en cuestión.
¿Por qué la necesidad de utilizar putty para hacer la conexión? Por varias razones. En primer lugar, factor ISP. El ISP de la computadora X no admite conexiones a los puertos tradicionales (<1024), entre los que se incluyen los usados para compartir impresoras y archivos (137, 139, 445). Estos puertos tampoco pueden modificarse en Windows (en Samba sobre linux es factible con algo de trabajo, pero no es el caso pertinente). Por otra parte, sería más sencillo poder conectarse si Windows permitiera hacer una conexión a un servidor SMB usando un puerto alternativo, lo cual tampoco es posible (una dirección tipo \\192.168.0.2:5566\ no es válida; incluso hay un artículo de la KB de Microsoft que lo dice explícitamente pero no lo encuentro). Por lo tanto estamos forzados a escuchar en los puertos por default, y la conexión no puede de ninguna forma ser directa a la computadora. El otro factor es sin duda la seguridad. Nunca es para nada recomendable dejar expuesto este servicio a merced de los pillos de la gran red de redes.
Los pasos a realizar son los siguientes:1. Configurar el servidor SSH:
Esto implica definir el puerto a utilizar para el servidor, porque obviamente como se explicó anteriormente, no es posible utilizar el 22. Para eso necesitamos llevar la computadora Y al lugar en el que la vamos a utilizar y probar qué puertos podemos acceder, haciendo una prueba con puertos comunes, siempre superiores al 1023, porque como se dijo, no son accesibles por el ISP de X. Para hacer simple el trabajo, usamos este sitio web:
que escucha en todos los puertos. Para probar uno, elegimos el que queremos después de los dos puntos. Por ejemplo, para ver si anda el de openvpn usamos:
Si se carga la página, todo perfecto, si no carga, está bloqueado.img1.JPG
Para ver una lista de puertos entramos a:
Ahí se pueden buscar aplicaciones tradicionales como messenger, icq, skype, cosas así que la gente usa y que normalmente están habilitadas.
De aquí en más, en este tutorial se supondrá que el puerto 1194 está habilitado para conexiones desde la red de Y.
Para cambiar el puerto en el que escuchará el servidor, en Debian, por ejemplo, editamos el archivo /etc/ssh/sshd_config y agregamos al principio:
# What ports, IPs and protocols we listen for
Port 22
Port 1194
Reiniciamos y listo.2. Habilitar el forwarding del puerto en el router:
Entrar a la configuración del router (192.168.0.1, 10.0.0.1) y habilitar ese puerto (1194) hacia la dirección IP de X (10.0.0.2).imgx.JPG3. Configuración de Putty:
En la pantalla principal, escribimos la dirección del equipo (el nombre, si tenemos configurado un DNS dinámico, o la dirección IP si te la sabés de memoria), escribimos el puerto que elegimos antes (1194).image005.jpg image007.jpg
Luego, dentro de las opciones de SSH, vamos a Tunnels, y agregamos la información resumida en la tabla a continuación: Código: Source Port Destination
127.0.0.10:137 10.0.0.2:137
127.0.0.10:139 10.0.0.2:139
127.0.0.10:445 10.0.0.2:445
127.0.0.11:137 10.0.0.3:137
127.0.0.11:139 10.0.0.3:139
127.0.0.11:445 10.0.0.3:445 De esta forma, Putty va a escuchar el las IPs 127.0.0.10 y 127.0.0.11 de la computadora Y, y enviará toda la información hacia las computadoras X y Z (10.0.0.2 y 10.0.0.3). Los puertos son los mismos en todos los casos porque eso es lo que necesitamos.
Hacer clic en Add para cada túnel.
En todos los casos, dejamos seleccionadas las opciones Local y Auto.
Si bien no es necesario en todos los casos los 3 puertos, lo dejamos así para evitar problemas y que funcione bien de todas formas.
Una vez que tenemos todos los túneles y todo lo demás configurado, nos va a interesar guardar la configuración para no tener que ingresarla nuevamente. En Session, escribimos un nombre para la misma en Saved Sessions, y hacemos clic en Save. La próxima vez que abramos Putty, elegimos la sesión y hacemos clic en Load.
Hacer clic en Open para conectar. Ingresar usuario y password.4. Deshabilitar el servicio Servidor.
Sí, lamentablemente para poder acceder a las carpetas compartidas en otra computadora, por este método, es necesario que Y no comparta nada. Esto ocurre porque, al estar Servidor habilitado, la computadora Y estará escuchando en todas las interfaces (si hacemos un netstat se puede ver que está escuchando en 0.0.0.0, puerto 445 (SMB), aquí incluidas las direcciones tipo 127.x.x.x), y Windows, cuando intenta conectarse a una carpeta de red, probará primero hacerlo a través del puerto 445, más moderno. Al estar habilitado, como resultado vamos a obtener una conexión efectiva hacia nuestra propia computadora Y, lo cual no sirve para nada. Al deshabilitarlo, no hay respuesta en el puerto 445, y la conexión se produce a través del viejo y querido netbios over tcp/ip (puerto 139). Como se puede deducir de esto, la conexión a través de Internet entre X e Y es por el puerto 139, usando el viejo protocolo netbios. Entonces si hacemos de nuevo un netstat –anb una vez que Putty está conectado, vamos a ver que no escucha en el puerto 445, a pesar de que se lo indicamos dentro de las opciones, ya que system lo está utilizando, y escucha globalmente (0.0.0.0)
Vamos a Inicio – Ejecutar: services.mscimage009.jpg
Buscamos el servicio Servidor y hacemos clic en Detener.image011.jpg
Para más información, leer este artículo:
En el mismo claramente se explica:
“NetBT_Tcpip is bound to each adapter individually; an instance of NetBT_Tcpip is shown for each network adapter that it is bound to. NetbiosSmb is a global device, and is not bound on a per-adapter basis. This means that direct-hosted SMB's cannot be disabled in Windows without disabling File and Printer Sharing for Microsoft Networks completely.”
¿Pero cómo se podría hacer para habilitar la escucha en el puerto 445?
Para eso hay que deshabilitar por completo la posibilidad de compartir archivos por este medio, ingresando al registro (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servi ces\NetBT\Parameters), y agregando un DWORD llamado SmbDeviceEnabled con valor 0. Lo malo de esto es que hay que reiniciar la computadora. De esta forma queda libre el puerto 445 y Putty lo puede utilizar. Sin embargo, dejarlo habilitado (poner el valor en 1 o eliminarlo) permite que rápidamente se pueda volver a habilitar el servicio Servidor en la computadora Y, pero eso ya depende de las necesidades de cada uno.
En resumen, o se libera el puerto 445 para ser utilizado por Putty y se realiza la conexión a través del mismo usando el procedimiento anterior, o se deja ocupado, pero se deshabilita el servicio Servidor, en cuyo caso, la conexión será a través del puerto 139.5. Realizar la conexión una vez que está todo listo, se realizan lo siguientes pasos:
Abrir Putty con la configuración de los túneles. Poner password al ser solicitado.
Para hacer marchar todo, vamos a Inicio – Ejecutar, y probamos abrir las direcciones:
\\127.0.0.10\
\\127.0.0.11\image013.jpg
Si todo salió bien, deberíamos ver nuestras carpetas compartidas de las computadoras X y Z respectivamente.image015.jpg
Por último si queremos más comodidad, podemos hacer que Putty se ejecute al inicio del sistema, configurándole la contraseña, podemos hacer un acceso directo a las carpetas de red en el escritorio, y mejor aún, conectar las carpetas a una unidad de red para que queden dentro de Mi PC.
Adjunto PDF con formato más lindo.
6 years, 3 months ago
 

Buscar mensajes