Introducción
Las redes de computadores permiten compartir recursos entre distintas unidades de procesamiento, capacidad que en la actualidad es ampliamente usada gracias a Internet. Las tecnologías implementadas sobre Internet permiten solicitar recursos o servicios a servidores remotos a través de una conexión pública.
Para el caso de una empresa, organización o persona particular que necesite solicitar un servicio a una red privada desde un recinto ajeno a esta red, se requiere de una conexión que ofrezca esas mismas características sin tener que realizar una extensión física de la red privada. Esto motiva a encontrar una solución utilizando una red pública , Internet, debido a que estas ya estan construidas, reduciendo el costo de estas conexiones a larga distancia.
Las redes VPN permiten cumplir con conectarse a redes remotas sobre Internet sin perder privacidad, extendiendo de forma segura las redes LAN, con lo que permiten compartir recursos entre redes de forma privada, a pesar de usar la infraestructura provista por esta red pública.
Redes VPN
¿Qué son las redes VPN?
Las Virtual Private Network o VPN son redes que permiten extender redes LAN a través de Internet de modo seguro. Generalmente esto es conseguido mediante el entunelamiento de los paquetes de capa red por parte del cliente y servidor, encapsulando y encriptando los paquetes IP, que sólo pueden desencriptarse en estos dos nodos extremos.
Como resultado, los dispositivos involucrados en la red VPN son parte de una misma red privada, comunicándose como si estuvieran en la misma subred.
Figura 1. Conexiones realizables usando algún estándar VPN
Existen distintas implementaciones que proveen VPN:
- IPsec(Internet Protocol Security)
- PPTP(Point to Point Tunneling Protocol)
- L2F(Layer 2 Forwarding)
- L2TP(Layer 2 Tunneling Protocol)
- SSL/TLS(Secure Sockets Layer/Transport Layer Security)
- SSH(Secure Shell)
Hay implementaciones de VPN en capa de enlace y de red. IPsec y OpenVPN son las implementaciones más utilizadas.
Figura 2. Tabla comparatiba entre IPsec y OpenVPN.
Open VPN
OpenVPN es una aplicación que implementa VPN mediante SSL/TLS haciendo uso de varios métodos: llaves privadas, certificados, cuentas de usuario y clave, todos previamente intercambiados, o un conjunto de ellos.
Para llevar la conexion a cabo cumpliendo con que para las capas superiores les sea transparente la conexión, OpenVPN crea una interfaz virtual o lógica con la que se realiza la conexión VPN. Esta interfaz lógica puede ser o TUN o TAP. TUN provee un túnel IP entre ésta interfaz y la real, por lo que hace un enrutamiento interno, mientras que TAP crea una conexión en capa enlace, implementando un puente entre ambos interfaces.
La conexión OpenVPN se realice a través del interfaz lógico. Luego OpenVPN se encarga de redirigir los paquetes encriptados y encapsulados al interfaz real, de tal manera que se dirijan al servidor OpenVPN. Éste realiza la operación inversa, permitiendo que el paquete llegue a la red privada conectada al interfaz real del servidor OpenVPN. Esto permite que la conexión se transparente para la aplicación, sin tener que cumplir con ningún requerimiento impuesto por la conexión VPN.
Implementación Open VPN
Como servidor se utilizó vpnbook.com. Éste servidor provee un certificado para el servidor, un certificado de cliente, su llave y una cuenta de usuario y clave para la conexión. Como cliente se usó una máquina virtual corriendo Ubuntu 14.0.1, instalando adicionalmente el paquete network-manager-openvpn para realizar la conexión desde el mismo network-manager de GNOME. Al hacer la conexión desde la máquina virtual podemos ver los paquetes observables en el host como si estuviéramos observando la salida del router del cliente VPN.
A continuación las instrucciones paso a paso para crear la conexión al servidor:
- Descargar certificado OpenVPN desde vpnbook y guardar el nombre usuario y clave como también IP del servidor
- Editar el certificado y crear los archivos ca.crt, client.crt y key.key:
- Abrir el certificado con algun editor de textos
- Copiar los terminos entre <ca></ca>, <cert></cert> y <key></key>
- Pegar lo tramos copiados en tres archivos llamdos ca.crt, client.crt y key.key respectivamente
- Instalar el paquete network-manager-openvpn mediante sudo apt-get install network-manager-openvpn
- Desde el network manager configurar una red OpenVPN:
- Seleccionar conexión "Password with Certificates(TLS)
- Ingresar nombre de usuario, clave, IP del servidor y los certificados creados
- En avanzados fijar el "custom gateway port" en 443, usar LZO data compression y usar conexion TCP
- En avanzados, pestaña de seguridad fijar el cifrado en AES-128-CBC
- Finalmente conectar a la red VPN configurada
Resultados
OpenVPN handshake
En el handshake de la comunicación OpenVPN hace una verificación de servidor y cliente usandos los certificados previamente obtenidos desde el servidor vpnbook para este caso. Se hace un reinicio de claves de sesión en cliente y servidor obteniendose una nueva clave asimétrica para la conexión (para beneficiarse de su rapidez respecto a las llaves públicas). Luego, se envian y reciben paquetes de control propios del protocolo OpenVPN. Por último, el cliente envia un mensaje "Client Hello" y espera el "Server Hello" de vuelta para comenzar el envio de paquetes de datos.
Figura 3. Captura de primer intercambio de paquetes de OpenVPN luego de handshake TCP.
Puede revizarse la captura de la figura 2 con mayor detalle descargando el archivo WireShark referenciado en la bibliografía.
IP destino desde VM
Usando Wireshark se registra el IP destino de la cabecera IP en la interfaz virtual de la VM y la interfaz "real" de la VM para el mismo paquete.
Figura 4. A la izquierda lo que ve el cliente conectado a la interfaz virtual. A la derecha lo que se se ve en la interfaz físico y la red privada a la que este conectada el cliente.
Al lado izquierdo de la figura 3 se puede observar el enrutamiento normal de paquetes TCP (la prueba se realizó produciendo tráfico por streaming) desde el cliente y con destino el servidor de streaming a traves de nuetra interfaz virtual creada por OpenVPN. Al lado derecho de la imagen se puede observar los paquetes que salen por la interfaz "real" y solamente se ven paquetes encriptados TCP y de protocolo OpenVPN con destino al servidor OpenVPN y no el de streaming. Así comprobamos que efectivamente hay un entunelamiento de los paquetes y que un tercero solo puede ver que hay tráfico encriptado entre dos computadores, siendo imposible que este se entere del tráfico entre el cliente y el servidor de streaming.
Traceroute
Usando el comando traceroute y luego usando algún localizador de IP se observa el camino que recorre cada conexión para llegar a un mismo servidor, ésto con el fin de ejemplificar como se observa un cliente conectado por VPN en internet (o alguna otra red pública). Por esto, sólo se muestran ambas localizaciones iniciales, una vez que se deja la conexión local.
Figura 5. Cliente conectado directamente a internet.
Figura 6. Cliente conectado a servidor VPN.
Conclusiones
La conexión a través de VPN se mostró segura al encriptar los paquetes, proveyendo confidencialidad, al haber un intercambio de certificados se puede corroborar que el servidor con quien se establece la conexión es efectivamente quien dice ser. Mismo caso para el cliente, quien entrega su certificado al servidor para autentificarse. Su llave privada permite la encriptación de los paquetes IP, que además oculta el IP destino del paquete, siendo visible sólo que se dirige al servidor VPN.
Estas pruebas son hechas sobre una conexión de punto a punto, sin involucrar redes privadas a los extremos en las pruebas. Como futura mejora a esta prueba, pueden establecerse este tipo de conexiones y corroborar, por ejemplo, que sin ninguna configuración extra, es posible compartir recursos entre ambas subredes, tales como impresoras, etc.
Además, la adquisición de los certificados y la llave del cliente se realizaron usando redes no seguras, confiando en una descarga directa desde el sitio de vpnbook.com. Esto podría mejorarse usando algún otro proveedor, que de mayor confianza y que entregue la llave del cliente de forma encriptada, usando una llave pública del cliente por ejemplo.
Bibliografía
- Redes VPN - Wikipedia
- OpenVPN - Wikipedia
- IPsec - ELO323 - AGV
- Servidor VPN - VPNBook
- Conexión a servidor OPENVPN - UbuntuHandbook
- Conexión cliente-servidor VPN - Wireshark