Software libre práctico, jugueteando con GNU/Linux 6

¡¡¡Venga!!! Hoy sí. Ya podremos acceder a nuestra nube desde Internet y además aprovecharemos nuestro equipo para montarnos un servidor VPN que nos dará acceso a Internet de forma segura. También he añadido otro script, que puedes ver aquí, para borrar las copias de seguridad antiguas. Solo dejaremos las copias de última semana. En realidad son muchas, tu puedes adaptarlo a tus necesidades. Y he modificado el cron debido a un error en la actualización por un problema en las variables de entorno. También lo puedes ver en github gitlab.

Antes de empezar quiero avisar que la entrada de hoy requiere de una serie de configuraciones paralelas a servicios y elementos externos. No puedo explicarlos todos aquí, primero por que si lo hiciera me saldría una entrada tamaño biblia (y pese a esto la entrada es muy largar) y segundo por que no son propiamente de la temática del blog, además ya existen muchos tutoriales por la red que resolverán esas dudas.

Configurar acceso desde fuera de nuestra red

Lo primero que necesitamos es disponer siempre la misma IP en nuestra raspi. Cada vez que nos conectamos a una red (wifi o cableada) el router nos asigna la primera IP libre que encuentra. Esto significa que va cambiando. Igual que hicimos con los pendrives tenemos que asegurar el uso de una IP concreta.

Imagino que si has seguido esta serie es posible que te hayas dado cuenta que la IP de tu máquina ha ido cambiando, pues esto es lo que tenemos que corregir. Digo es posible por que como los equipos de tu red son pocos las IP se mueven poco y es posible que no lo hayas sufrido. Pero tenemos que asegurarnos que siempre usamos la misma IP.

¡¡¡Así que ya sabes!!! A tirar de ssh. Una vez conectado te logeas como root. Y editamos el archivo de configuración. Sí, lo has adivinado, el mismo que configuramos en la 3ª entrada de “Jugueteando con Linux” así que nano /etc/networks/interfaces. Dependiendo de la conexión que uses modifica una interfaz u otra (eth0 o wlan0). En mi caso eth0. Cambiamos dhcp por static. Y debajo añadimos las siguientes líneas:

  • address 192.168.1.175
  • netmask 255.255.255.0
  • network 192.168.1.0
  • broadcast 192.168.1.255
  • gateway 192.168.1.1

Address es tu dirección IP, usaremoss una alta para evitar que en un momento determinado el router pudiera asignar esta IP a otro equipo. Dudo que llegues a tener 175 conexiones simultaneas en tu red.

Netmask le dice a la interfaz que la subred a la que pertenece se compone de 255 equipos que van del 192.168.1. 1 al 255.

Network especifica la red para netmask.

Broadcast es la IP para difusión en esa red.

Gateway es la dirección del router.

Reinicia las interfaces de red, /etc/init.d/networking restart, y por asegurar el tiro, más que nada, apaga la conexión con ifconfig eth0 down y vuelve a encenderla con ifconfig eth0 up (sustituye eth0 por wlan0 si usas wifi). Ahora prueba que la IP funciona correctamente conectándote desde otro pc.

Hay otro modo de obtener un IP fija en el router, que es el que yo he empleado, pero es más complejo y por hoy ya vamos a tener suficiente complejidad. Consiste en la reserva de IP’s. Mi router tiene una lista de dispositivos con una IP asignada a cada uno de forma que esas IP’s nunca se asignan más que a los dispositivos asociados.

Ya tenemos una IP fija dentro de nuestra red, pero el problema es que nuestra IP pública, la que usamos en Internet, también es dinámica, a menos que paguemos una pasta gansa por una IP fija. Y además no sabemos cuando cambia. Para eso vamos a usar un servicio de DNS dinámico. Yo uso NO-IP, pero hay más donweb o dyndns. Estos servicios lo que hacen es monitorizar tu IP pública y asociarla a una dirección url, una dirección de internet, en su base de datos. De forma que cuando tu IP cambia su base de datos se actualiza con tu nueva IP y tu solo tienes que poner la url en el navegador, siempre te llevara a la IP correcta.

Todos funcionan más o menos igual. Suelen tener un servicio gratuito, con ciertas limitaciones y otros servicios de pago. Con el gratuito ya nos va bien. Podría extenderme aquí en como crear una cuenta, etc. Pero lo dicho, hay mil tutoriales por Internet que lo explican.

Elige el que te vaya bien, o el que más te guste. Crea una cuenta, descarga el cliente de actualización automática y configúralo. Son bastante simples y fáciles de configurar, a fin de cuentas lo único que tienen que hacer es comprobar si la IP cambia y actualizarla en tu cuenta.

Pues ya tenemos una buena parte hecha, hemos resuelto los problemas con las IP’s, tanto la privada como la pública. Pero a efectos prácticos es como tener de un puente levadizo. Si no lo bajamos es inútil. Esto se hace con la redirección de puertos de tu router.

Tienes que entrar en la configuración de tu router, normalmente esto se hace poniendo su dirección IP en tu navegador. En nuestro caso 192.168.1.1 (normalmente es este o alguno similar tipo 192.168.0.1). Automáticamente te pedirá un usuario y contraseña. Hay muchos modelos de router, según fabricante y proveedor de servicios. Como decía no puedo explicarlos todos aquí. Busca por Internet el usuario por defecto y contraseña para tu router y proveedor de servicios.

Configuración router

Una vez dentro solo tienes que buscar una opción donde ponga algo así como NAT, Reenvio de puertos, Configuración avanzada o algo similar. De nuevo, será más sencillo si buscas en Internet como configurar un reenvio de puertos para tu router.

Esencialmente lo que le decimos con el reenvio es: cuando llegue una conexión entrante por el puerto Z la rediriges a la IP interna X por el puerto Y. De forma que ya hemos bajado nuestro puente y podemos cruzar por él. Aunque podemos dejar los puertos por defecto, a mi me gusta cambiarlos, al menos los externos, como medida extra de seguridad.

Es decir, el puerto por defecto para el protocolo HTTP (la web estándar) es el 80, esto lo sabe todo el mundo. Nextcloud trabaja con este puerto. A nivel de mi red interna me da igual, pero para mis conexiones externas uso otro puerto, por ejemplo el 8888. De forma que para poder conectarme con mi raspi tengo que especificar una conexión por el puerto 8888, de lo contrario el router no permitirá el paso. Lo mismo con el puerto ssh, que es el 22. A nivel interno me da igual, pero para conexiones externas uso otro.

Redirección de puertos

Por cierto, tendrás que hacer una regla de redireccionamiento para cada servicio. Me explico, para las conexiones a Nextcloud necesitaras un puerto externo, para las conexiones ssh necesitaras otro y para la VPN otro. Además puedes definir el protocolo, TCP o UDP. Los routers modernos permiten conexiones automáticas en cualquier protocolo, pero para la VPN es mejor definirlo. Elige el que quieras, UDP es más rápido y ligero que TCP, pero puede darte algún problema. Para el uso privado que vamos a darle UDP funciona genial.

Se puede especificar un puerto externo y otro interno, o hacer que sean los mismos. Eso lo dejo a tu elección, pero lo más fácil es dejar los internos por defecto y modificar los externos. Entiendo que todo este rollo de los puertos, redireccionamientos, etc. es quizás una de las partes más complejas de todo lo que hemos hecho hasta ahora. Por eso aconsejo que busques más información antes de ponerte a toquetar cosas.

Ahora mismo ya podemos conectarnos de forma remota. Prueba a conectarte desde tu móvil (sin activar la wifi), si lo has hecho todo bien funcionará. Para especificar un puerto en el navegador se hace añadiendo :puerto a la dirección. Tal que así http://direcciondeinternet.com:8888/, de esta forma le dices que ignore el puerto estándar y use el 8888. En el caso del ssh se especifica con con el parámetro -p tal que así ssh -p 2222 pi@direcciondeinternet.com, si usas putty, juice o cualquier otro cliente ya tienes un campo especifico para definirlo.

Vamos a por la VPN

Una VPN es una red privada virtual. Esta red genera un tráfico cifrado y controlado que permite salir a Internet manteniendo las condiciones de seguridad y privacidad de una red local concreta (en este caso la tuya). ¿Cuándo usar la conexión VPN? Pues por ejemplo cuando te quieres conectar a Internet usando una red pública y/o abierta, como podría ser en un evento, lugar público como un aeropuerto, estación de tren, etc.

Básicamente el tema funciona así. Te conectas a un servidor VPN con un usuario y contraseña, usando un programa cliente o configurando una conexión. Este usuario tiene una clave de cifrado asignada. La comunicación entre el servidor y el cliente se hacen cifrando la información con la clave de ese usuario. Pero la comunicación real con el mundo se produce en el servidor, no en dispositivo que usas para conectarte (móvil, ordenador, etc).

Actualizaciones de seguridad automáticas

Por ejemplo y de forma muy básica y elemental. Estas en un aeropuerto, hay una wifi abierta que te da acceso a Internet y te conectas para ver una web. Entras en el navegador de tu móvil y tecleas la dirección. Aquí es donde entra el cliente VPN, intercepta la comunicación y la cifra, luego la envía usando la wifi abierta a tu servidor VPN, que la descifra. Tu servidor VPN (tu raspi) abre la web que le has pedido, la vuelve a cifrar y se la devuelve al cliente de tu móvil usando la WIFI abierta del aeropuerto. Este cliente descifra la información y te la muestra en el navegador.

Lo cierto es que la configuración de una VPN puede ser realmente compleja, pero por suerte tenemos una herramienta que se conoce como PIVPN, que facilita enormemente la configuración de OpenVPN, el servidor que vamos a usar. Antes de empezar te recomiendo hacer una imagen de la tarjeta SD, por seguridad.

Empezamos. Lanza este comando en la terminal curl -L https://install.pivpn.io | bash. Automáticamente descargará pivpn y empezará la instalación. Solo tenemos que ir contestando las preguntas que nos plantea. Como la interfaz de red, si la IP actual es correcta y la queremos como estática, actualizaciones de seguridad automáticas, etc. Básicamente es un SI en todas las preguntas. Cuando te lo pregunte selecciona el mismo tipo de puerto que hemos elegido en la redirección hace un rato.

Configuración estática de IP

Durante la instalación y configuración te preguntará por el nivel de cifrado, el que viene por defecto ya es suficiente, el test no es recomendable y el modo paranoico que tampoco te recomiendo, básicamente por que no lo necesitas y alargará tontamente, el ya de por si larguísimo proceso de generación del certificado y las transmisiones futuras entre el servidor y el cliente. Este punto requiere de una recolección aleatoria de bits y va a ser muy, muy, muy largo, ten paciencia. Cuenta como una hora (y pico) de ver pasar ……+…+.+..+.… por la pantalla.

Generando certificado del servidor

Una vez generada la clave de cifrado te pedirá la IP pública, o el uso de un DNS. Selecciona la opción «DNS Entry» e introduce la dirección que has creado antes con el servicio de DNS dinámico. Y por último los servidores DNS que quieres usar para resolver las peticiones de los usuarios, elige el que quieras, pero te recomiendo google, es el más fiable. El paso final es reiniciar.

Ya tenemos nuestro servidor VPN activo y funcionando. Pero tenemos que crear los usuarios que nos permitan usarlo. Para crear el usuario PIVPN te lo pone muy fácil. Simplemente lanza el comando pivpn add. Te preguntara un nombre y una contraseña (más la verificación) y listo. Esto crea un archivo de configuración en la carpeta ovpns dentro del home de pi. Este archivo se llama nombre.ovpn. Este archivo sirve para una rápida configuración de la conexión VPN en los dispositivos que quieras usar.

Como comentaba al principio, este servicio está pensado para ser usado en momentos puntuales. Cuando te conectas a redes inseguras, que no controlas o que no puedes asegurar su fiabilidad. Como decía, por ejemplo redes abiertas o en lugares con mucho movimiento. Piensa que la navegación no es directa y dependerá de la conexión de la red que uses para salir. Es muy probable que notes una bajada del rendimiento. Esto no es para ver vídeos de youtube, ni descargarte películas. Es para entrar en la cuenta del banco, conectarte al correo, o mientras estás conectado a la red abierta de un evento te lleguen los mensajes de telegram, mails, etc.

Empezaré por lo de conectarse con dispositivos móviles. Lo primero que tienes que hacer es pasar al dispositivo el archivo de configuración que has creado en el paso anterior. Y descargarte e instalar desde google play o de la appstore el cliente oficial para OpenVPN.

Una vez lo tienes instalado la configuración es muy simple. Abre el programa, despliega el menú y selecciona “Import”, y en el menú que se abre selecciona “Import Profile from SD Card”. Busca el archivo nombre.ovpn que has copiado (cambia nombre por el nombre de usuario que hayas elegido) y selecciónalo. Te pedirá la contraseña que has usado al crear el usuario en el sistema, activa el cuadro de recordar contraseña y ya está.

El uso es bastante simple una vez está configurado. Entras en el cliente y le das al botón “Connect” para activar la conexión VPN o “Disconnect” para apagarla. Incluso puedes crear un acceso directo para la conexión desplegando el menú, selecciona la opción “Create shortcut”.

Para usarlo en equipos de sobremesa o portátiles dependerá del sistema operativo, pero esencialmente necesitas el cliente correspondiente. Y la configuración puede ser algo más compleja. Esta será la siguiente entrada en el blog, dejaremos por unos días la raspi para volver al equipo de escritorio y configuraremos la conexión VPN en Linux.

Esta es la última entrada de esta serie. Parecía que no llegaba, ¿verdad? pero ya tenemos nuestra nube funcionando, accesible desde Internet. Aprovechando que teníamos un equipo infrautilizado hemos montado nuestra propia VPN para asegurar nuestras conexiones.

Como vimos en la entrada anterior, la de la pantalla autónoma, se pueden hacer cosas muy chulas con un poco de imaginación. En las próximas entradas montaremos otras cosas, como un servidor NAS, un centro multimedia, una consola retro o un sistema de videovigilancia. Os animo a que si tenéis dudas o propuestas me las enviéis vía correo electrónico (ver contacto).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies