martes, 19 de noviembre de 2013

VPN "para pobres"

Una VPN (Virtual Private Network) permite crear un "túnel" a través de Internet de forma que un ordenador remoto actúe como si estuviera en una red privada.

Hay numerosos tutoriales en la red sobre cómo crear y configurar VPNs en Linux, así que de momento, no voy a entrar en este tema. Lo que propongo aquí es una alternativa rápida que puede ser útil si sólo se quiere utilizar una aplicación concreta de la red local o acceder a algún tipo de servicio que no está disponible remotamente.

Lo único que necesitamos es tener un servidor ssh en algún ordenador de la red local que tenga una ip pública* (además de otra ip perteneciente a la subred) para que podamos conectarnos desde el ordenador remoto. Éste, por su parte, tendrá que tener un cliente de ssh. Ambos, cliente y servidor, suelen venir instalados por defecto en muchas distribuciones.

En el cliente (ordenador remoto) tendremos que escribir:

ssh usuario@ip_pública -L puerto_local:ip_privada_servicio:puerto_servicio

Lo que estamos haciendo es conectarnos por ssh al ordenador de la red local y decirle que redirija el tráfico que proviene de la ip_privada_servicio a través del puerto_servicio a nuestro ordenador en el puerto_local.

Vayamos término a término:
  • usuario: un usuario que tengamos en el ordenador que tiene el servidor ssh. Al ejecutar el comando ssh nos pedirá la contraseña.
  • ip_pública: también podría ser el nombre del ordenador en la red y utilizar dns. Ejemplos: "icaro.empresa.es", "163.100.60.23".
  • puerto_local: ponemos el que queramos. Yo normalmente pongo un valor grande, de puertos que no están asignados, para que no haya conflicto. Si queremos poner puertos ya asignados, tendremos que ejecutar el comando como root.
  • ip_privada_servicio: sería la ip privada (aunque también podría ser pública, dependiendo de cómo sea la subred) perteneciente a la red local a la que no se puede acceder desde Internet. Ej: "10.2.101.35"
  • puerto_servicio: el puerto del servicio al que queremos acceder en la red local. Ej: "80" en el caso de la web.
Un ejemplo de uso podría ser que desde mi casa quiero acceder a una web de la empresa que sólo es accesible en la red local. Supongamos que tengo un ordenador en esa red que se llama "icaro" y tiene como ip pública 163.100.60.23. En "icaro" tengo un usuario que se llama "irene". El ordenador de la red local que aloja la página web tiene como ip privada 10.2.101.35.

En un terminal, ejecuto:

ssh irene@163.100.60.23 -L 10000:10.2.101.35:80

Me pedirá la contraseña de "irene". Después, en un navegador, puedo poner localhost:10000 y eso me permite acceder a la página web como lo haría desde "icaro".

*Una ip pública es aquella a la que se puede acceder a través de Internet, es "visible" para todo el mundo y, por tanto, tiene que ser única en la red. Una ip privada es sólo visible para la subred en la que se encuentra, como ocurre generalmente en nuestras casas (el router tiene una única ip pública que nos da la compañía para comunicarnos con el exterior y todos los ordenadores/dispositivos que tenemos en casa se conectan a él mediante ips privadas). Los rangos de direcciones para ips privadas son: de 10.0.0.0 a 10.255.255.255, de 172.16.0.0 a 172.31.255.255 y de 192.168.0.0 a 192.168.255.255.

No hay comentarios: