Instalar WireGuard en un contenedor Proxmox VE. Parte 1
Para los más despistados, antes de nada debemos aclarar que WireGuard es una VPN (del inglés, Virtual Private Network).
Una VPN es un software que nos permite establecer un túnel por el que comunicar, de forma segura, diferentes ordenadores, utilizando para ello una red menos (o nada) segura, como puede ser Internet. Para lograrlo, se utilizan técnicas de cifrado avanzadas.
Además, los ordenadores implicados se comportarán como si estuviesen en la misma red local.
Un uso común de las VPNs, en muchas empresas, consiste en permitir que los empleados accedan a los recursos de la empresa de forma remota. Algo que, en los últimos tiempos se ha vuelto imprescindible para permitir el tele-trabajo.
Por otro lado, los usuarios individuales también pueden usarlas para acceder a sus datos desde fuera de su hogar, manejar sus dispositivos domóticos a distancia o, incluso, usar las conexiones públicas, como las que encontramos en cafeterías, centros comerciales, etc., a la vez que protegen su privacidad.
¿Qué es WireGuard?
Como hemos dicho al principio, WireGuard es un software de VPN. Se trata de una solución open source, moderna, rápida, segura y bien diseñada. Su desarrollo lo inició Jason A. Donenfeld (también conocido como ZX2C4) en el año 2015. Entre sus logros destaca su integración en el núcleo de GNU/Linux, aunque también lo soportan otros sistemas operativos, como Windows, macOS, iOS o Android.
Una de sus grandes ventajas es su tamaño. Está escrita con solo 4000 líneas de código, que solo es una pequeña parte del tamaño de otras soluciones. Esto no solo hace que sea una solución ligera, sino que también facilita su auditoría y los controles de seguridad, minimizando las vulnerabilidades.
El objetivo de WireGuard es ser fácil de configurar y administrar. Además, ofrece un gran rendimiento, eficiencia y una gestión transparente del estado de la conexión, mientras utiliza técnicas de cifrado de última generación.
Puedes encontrar más información en su sitio web oficial: https://www.wireguard.com.
Instalar WireGuard con PiVPN
A pesar de que hemos dicho más arriba que la instalación de WireGuard es sencilla, podemos simplificarla aún más usando PiVPN.
Se trata de una herramienta nacida con el objetivo de simplificar la configuración de una VPN en dispositivos sencillos, como la conocida Raspberry Pi (de ahí su nombre). Sin embargo, su uso se ha extendido a un gran número de entornos.
Una característica peculiar de PiVPN es que también nos permite instalar OpenVPN, una solución alternativa a WireGuard, que es mucho más veterana.
Gracias a PiVPN, no necesitamos experiencia para instalar WireGuard, por lo que será la solución que tomaremos aquí.
Como antes, puedes encontrar más información en su sitio web oficial: https://www.pivpn.io.
Pasos para la instalación
En este artículo, contemplaremos la necesidad de instalar WireGuard en un servidor Proxmox VE. El objetivo es facilitar el acceso al resto de máquinas virtuales alojadas en el servidor, desde el domicilio de los usuarios.
Por lo tanto, para explicar la solución completa, comenzaremos creando un nuevo contenedor en el servidor, que ejecute Ubuntu Server.
A continuación, nos aseguraremos de que tiene instaladas las últimas actualizaciones, y procederemos a instalar WireGuard. Por último, te enseñaremos a instalar una interfaz gráfica, para que puedas gestionar la VPN desde tu navegador preferido.
Como el camino es un poco largo, lo dividiremos en tres partes diferentes. La primera es esta que estás leyendo. Las restantes iremos publicándolas en días sucesivos.
Por cierto, aunque no vayas a instalar WireGuard en un contenedor Proxmox VE, este grupo de artículos te puede servir de ayuda para instalarlo, por ejemplo, en una Raspberry Pi, con el fin de usarlo de manera más doméstica. Así es que te animo a que sigas leyendo…
Crear un contenedor de Ubuntu Server en Proxmox VE
Como sabes, en Proxmox VE podemos crear tanto máquinas virtuales como contenedores.
Ya hemos mencionado en otros artículos que las máquinas virtuales ofrecen una mayor flexibilidad, porque proporcionan un aislamiento completo del hardware del servidor y ejecutan un sistema operativo completo e independiente del sistema anfitrión. Sin embargo, tienen un mayor consumo de recursos, ocupan más espacio en disco y tardan más en arrancarse.
Por su parte, los contenedores comparten el núcleo con el sistema operativo anfitrión, aunque trabajando en espacios de usuario aislados. Esto los hace más ligeros que las máquinas virtuales, porque no necesitan ejecutar y virtualizar diferentes instancias del núcleo. Además, consumen menos memoria, procesador y almacenamiento, se cargan más rápido (porque no cargan el sistema completo) y ofrecen mayor rendimiento durante la ejecución. Evidentemente, los contenedores solo son adecuados para entornos basados en GNU/Linux.
En resumen, los contenedores constituyen la solución perfecta para la tarea que nos ocupa hoy.
Para crear un nuevo contenedor en la interfaz web de Proxmox VE, lo primero que necesitamos es obtener una plantilla de la que partir.
Comenzamos desplegando, en el panel izquierdo, el nodo en el que pensamos añadir el contenedor. Piensa que podrías tener un cluster con varios servidores. En nuestro caso, solo tenemos somebooks01.
En su interior, elegimos el almacenamiento local. Así, obtenemos a la derecha, las distintas categorías relacionadas con el almacenamiento local. Nosotros elegiremos CT Templates…
El resultado será una nueva ventana, con una relación, bastante larga, de platillas que podemos descargar.
Para simplificar las cosas, disponemos de un cuadro de texto donde escribir términos de búsqueda.
Como es lógico, lo siguiente será comenzar a escribir el nombre del sistema operativo que estamos buscando. En nuestro caso, Ubuntu.
A medida que escribimos, la lista irá cambiando para mostrarnos los resultados.
El resultado será una ventana que nos muestra el avance de la descarga. Solo tenemos que esperar a que se complete.
Al hacerlo, comprobamos que la plantilla ya se encuentra a nuestra disposición.
Ahora, ya estamos listos para crear el contenedor. Comenzaremos haciendo clic, con el botón derecho de ratón sobre el nombre del nodo (en nuestro caso, somebooks01).
Así obtendremos una nueva ventana, con el asistente para crear contenedores. El asistente nos mostrará diferentes solapas, que se irán activando a medida que avancemos en la tarea.
La primera es la solapa General, donde ya aparece seleccionado el nombre del servidor (Node) y el identificador que se asignará al contenedor (CT ID). Ambos valores pueden cambiarse, si fuese necesario, antes de continuar.
También escribiremos un nombre para el contenedor y la contraseña del administrador (como siempre, por duplicado, para evitar errores sintácticos).
Esto nos llevará a la solapa Template, donde debemos elegir la plantilla que acabamos de descargar. Primero, en el cuadro Storage, elegimos el almacenamiento local, después, en la lista Template elegimos la plantilla adecuada.
En nuestro ejemplo solo aparece una plantilla, pero podríamos tener descargadas tantas como necesitemos para otros usos.
Una vez seleccionada, estamos listos para continuar.
En el siguiente paso, debemos establecer las características del disco virtual. En la lista Storage elegimos el volumen del servidor donde se almacenará el disco virtual. El valor predeterminado suele ser el correcto.
Debajo, indicamos la cantidad de espacio en disco queremos asignar al contenedor. Yo aquí también dejaré el valor predeterminado.
En la siguiente etapa debemos indicar la cantidad de núcleos del procesador que vamos a dedicar al contenedor. El valor predeterminado es 1, pero yo he decidido subirlo a 2, pero eso depende de la capacidad de tu servidor y del número de máquinas virtuales que vayas a ejecutar simultáneamente.
En la pestaña Memory indicamos la cantidad de memoria que tendrá el contenedor a su disposición. Rellenaremos dos valores: la cantidad de RAM y la de intercambio a disco. Como antes, yo dejaré los valores predeterminados.
Algo a lo que tenemos que prestar atención es a la configuración de red. En realidad, los valores predeterminados de la columna izquierda deben ser adecuados, pero a la derecha, debemos asegurarnos de elegir un valor para IPv4 que sea estático (Static).
Después, en el cuadro IPv4/CIDR debemos especificar una dirección IP concreta. Esta dirección IP debe ser un valor que no asigne el servidor DHCP (normalmente el router) de forma automática. Es común mantener un conjunto de direcciones, en la configuración del servidor DHCP, para que no se asignen dinámicamente.
Por cierto, para acceder desde la red pública (típicamente Internet) a la VPN, deberás redirigir un puerto del router al puerto que definas en la configuración de Wireguard, de la dirección IP que estamos expresando en estos momentos.
Como cada router realizará esta tarea de un modo distinto, esta parte de la configuración se escapa de los objetivos de este grupo de artículos.
El último aspecto que definiremos en esta solapa es la puerta de enlace (Gateway). Normalmente se trata de la dirección IP, dentro de la red local, del router que estás usando para salir a Internet.
En la última etapa, indicaremos la dirección de los servidores DNS que se usarán para resolver nombres de dominio. De forma predeterminada, se usarán los de la configuración del servidor Proxmox VE. Yo lo dejaré así, pero en tu caso, puedes indicar los de tu preferencia.
Así llegamos, por fin, a la etapa final, que contiene un resumen con todas las características que hemos ido estableciendo. Debemos revisar cuidadosamente los valores, recordando que podemos volver atrás, a cualquier etapa, para hacer los ajustes oportunos.
Al hacerlo, se muestra una ventana con información sobre el proceso de creación del contenedor.
Después de esto, veremos nuestro nuevo contenedor, relacionado en el panel izquierdo de la interfaz.
Sin embargo, nosotros, por el momento, dejaremos aquí la tarea. Así no hacemos un artículo demasiado largo. Pero terminamos con la promesa de publicar en breve los artículos donde resolvemos las siguientes partes de la tarea. Hasta entonces, espero que el contenido de hoy te haya parecido interesante.