Original article: How to Build Your Own Wireguard VPN in Five Minutes

Quizás ya comprendas lo importante que puede ser una buena VPN para mantener la seguridad y privacidad de tus comunicaciones móviles.

Ya sea que necesites usar tu teléfono para realizar operaciones bancarias a través de una conexión WIFI del aeropuerto o de una cafetería pública, o estás preocupado porque alguna persona equivocada esté escuchando tus interacciones en línea, la encriptación en túnel que brinda una buena VPN puede ser invaluable.

El truco, sin embargo, es encontrar una VPN que sea realmente "buena" - y una que sea conveniente y asequible.

Existen muchos servicios de VPN, y configurar una VPN en tu teléfono o laptop suele ser bastante sencillo.

Pero algunos servicios vienen con dos desventajas potenciales: son muy costosos, con pagos que promedian alrededor de los $10 mensuales, y nunca puedes estar 100% seguro que no estén (ya sea accidentalmente o a propósito) filtrando o haciendo un mal uso de tus datos.

Además, VPNs económicas a menudo limitan el uso de tus datos y el número de dispositivos que puedas conectar.

Si te gusta ver versiones en vídeo de tutoriales para complementar tu aprendizaje, no dudes en seguirlos aquí:

Lo que ofrece WireGuard

Pero si de todos modos tienes un servidor Linux basado en la nube ejecutándose, construir una VPN en WireGuard puede ser una forma sencilla y gratuita para agregar algunas medidas serias, como seguridad y privacidad sin compromisos para tu vida.

Si planeas limitar la VPN para algunos dispositivos de tu propiedad y de algunos amigos, probablemente nunca jamás notarás una carga de recursos adicionales en tu servidor. Incluso si has activado y pagado por una instancia reservada en AWS EC2 tw.micro, los costos anuales deberían seguir siendo significativamente más baratos que los de la mayoría de las VPN comerciales. Y, como bono adicional, tendrás completo control sobre tus datos.

Ahora te voy a mostrar cómo todo eso debería funcionar usando un software de código abierto en WireGuard en un Servidor de Linux Ubuntu.

¿Porqué WireGuard? Porque es realmente fácil de usar, está diseñado para ser particularmente resistente a ataques, y es muy bueno en lo que hace que fue recientemente incorporado dentro del propio kernel de Linux.

El trabajo actual para que esto ocurra realmente tomará sólo cinco minutos - o menos. Una vez dicho esto, planear las cosas, solucionar los problemas de configuración inesperados y, si es necesario, lanzar un nuevo servidor podría agregar tiempo significante al proyecto.

¿Cómo configurar el Entorno?

Primero que nada, necesitas tener abierto el puerto UDP 51820 en cualquier firewall que estés utilizando. Así es como vería el grupo de seguridad asociado con una instancia AWS EC2:

SG_rule-2

Ahora, en el servidor de Linux, usando un comando de sudo, empezaremos instalando WireGuard y los paquetes de resolvconf.

Técnicamente o probablemente no necesitemos resolvconf aquí, pero como eso es lo que necesitarías si quisieras configurar una máquina virtual de Linux, como un cliente de WireGuard, pensé agregarlo aquí.

Captura-de-pantalla-2024-06-27-124426

¿Cómo generar Claves de Cifrado?

El comando wg genkey genera una nueva clave de cifrado privada y lo guarda como un archivo en el directorio /etc/wireguard. Este directorio fue automáticamente creado cuándo instalamos WireGuard.

El comando chmod establece los permisos de restricción apropiados para ese archivo de clave privada.

Como todo en Linux, hay otras manera de realizar esto, pero solo asegúrate de hacerlo bien.

Captura-de-pantalla-2024-07-03-120402

A continuación, usaremos el valor de nuestra clave privada para generar una clave pública correspondiente, la cual también se guardará en el directorio /etc/wireguard. El objetivo es agregar la clave pública del servidor a la configuración de WireGuard en todos los dispositivos cliente que usaremos, y luego agregar las claves públicas de esos clientes a la configuración del servidor aquí.

Las claves privadas nunca deben salir de las máquinas para las que se crean, y siempre deben protegerse cuidadosamente.

imagen-2

Cómo configurar el Servidor de WireGuard

Ya estamos listos para crear un archivo de configuración del servidor. Siguiendo la convención, nombraré el archivo wg0.conf, pero puedes darle el nombre que desees. También puedes tener múltiples configuraciones (con diferentes nombres de archivo) existiendo al mismo tiempo.

Así se verá nuestra configuración:

imagen3

Ten en cuenta que este archivo tiene tres secciones: una Interfaz y dos pares. La sección Interfaz define la dirección de red privada NAT que usará nuestro servidor. Esta es la dirección privada a la que se conectarán los clientes, después de solicitar primero el acceso a través de la dirección IP pública del servidor, por supuesto.

No es necesario que sigas mi ejemplo de dirección, siempre y cuando uses un rango de IP privada válido que no se superponga con ningún bloque de red utilizado por tu servidor o cliente.

En concordancia con la regla del grupo de seguridad UDP que configuré anteriormente en AWS, estoy definiendo el ListenPort como 51820. Sin embargo, podría elegir un puerto diferente para agregar un poco más de seguridad si lo desearas.

Finalmente, pegaría la Clave Privada del servidor como valor de PrivateKey para que WireGuard pueda autenticar las solicitudes entrantes de los clientes.

La primera sección peer no contiene nada más que la clave pública y la dirección IP privada asignada de un cliente. La segunda sección peer hace lo mismo para una segunda máquina cliente.

Obtener las claves públicas de los clientes es la tarea más manual en toda esta configuración. Pero, como se trata de tu propia VPN, normalmente puedes encontrar una forma de copiar y pegar directamente en la configuración de tu servidor para no tener que escribir todo dolorosamente a mano.

Eso debería ser todo. Usaré el comando wg-quick para activar la VPN. up le indica a WireGuard que lea la configuración wg0.conf que acabamos de crear y la use para construir una nueva interfaz VPN.

imagen4

Ejecutar wg nos mostrará que funcionó. Finalmente, ejecutaré systemctl enable <nombre_del_servicio> para indicarle a Linux que cargue esta interfaz WireGuard automáticamente cada vez que el servidor se reinicie.

imagen5

Cómo configurar el Cliente WireGuard

Eso es todo lo que necesitaremos del lado del servidor. Configurar tu dispositivo cliente con WireGuard será mucho más fácil o más o menos lo mismo.

¿A qué me refiero con más o menos lo mismo? Bueno, si estás trabajando con Windows, macOS, Android o iOS, entonces hay enlaces a aplicaciones GUI disponibles en esta página . Esas aplicaciones generarán pares de claves para ti. Sólo necesitarás ingresar la dirección IP o el dominio del servidor y su clave pública. Luego, tomarás la clave pública del cliente y la agregarás al archivo wg0.conf del servidor de la forma que te mostré anteriormente.

Sin embargo, si se trata de un cliente de PC o portátil Linux que deseas agregar, entonces es un poco más complicado. Básicamente, seguirás todos los pasos que viste para la configuración del servidor, incluida la generación de claves. Incluso crearás un archivo de configuración llamado wg0.conf (si ese es el nombre que te gusta). Pero así es como debería verse ese archivo de configuración:

[Interface]
# La dirección que tu computadora usará en el VPN
Address = 10.5.5.2/32
DNS = 8.8.8.8
# Carga tu clave privada desde el archivo
PostUp = wg set %i private-key /etc/wireguard/privatekey
# También hace ping al servidor vpn para asegurarse que el túnel se inicializó
PostUp = ping -c1 10.47.47.1
[Peer]
# La clave pública de wireguard del servidor VPN
PublicKey = your_key
# Dirección de la IP Pública de tu servidor VPN (USA EL TUYO!)
Endpoint = 54.160.21.183:51820
# 10.0.0.0/24 es el subnet VPN
AllowedIPs = 10.47.47.0/24
# PersistentKeepalive = 25

La sección Interface representa esta vez la máquina cliente, mientras que la sección Peer más abajo se refiere al servidor. Comencemos con Interface. La dirección IP privada debe coincidir con la dirección que le das a este cliente específico en la configuración del servidor.

Si necesitas que tu cliente evite un servidor DNS local, puedes especificar un servidor DNS personalizado allí. Este es el que proporciona Google.

En lugar de escribir tu clave privada local en tu archivo de configuración de la forma en que lo hicimos en el servidor, puedes decirle a WireGuard que lea el archivo privateKey cada vez que se cargue. Probablemente sea una práctica recomendada de seguridad, y también podríamos haberlo hecho en el servidor. Finalmente, el script de configuración probará nuestra conexión con el comando PostUp ping.

La configuración Peer - o del servidor - requiere la clave pública del servidor, la cual se agrega aquí.

El Endpoint es donde le dices a WireGuard dónde encontrar el servidor. ¡Nada funcionará sin esto! Aquí se requiere la IP pública del servidor, o su nombre de dominio, seguido del puerto que has elegido. Una vez más, 51820 es el predeterminado de WireGuard.

Finalmente, la configuración de AllowedIPs define el rango de direcciones de red que usarás, y el valor opcional PersistentKeepalive puede evitar que se pierdan las conexiones.

Inicias WireGuard en el cliente exactamente de la misma manera que lo hiciste en el servidor, usando wg-quick up wg0. Sin embargo, una vez más, todos esos pasos sólo serán necesarios para clientes Linux. Puedes usar las aplicaciones para otras plataformas.

Resumen

Y listo, eso es todo. Tal y como dije, una VPN funcional en unos cinco minutos de trabajo. Ahora no tienes excusa para proteger tu privacidad en línea y asegurar tus comunicaciones.

Para obtener más información sobre tecnología, suscríbete a mi canal de YouTube y, cuando tengas un momento, echa un vistazo a los numerosos libros y cursos de Linux, seguridad, análisis de datos y AWS disponibles en mi sitio web bootstrap-it.com.