Cómo instalar una VPN con WireGuard (red privada virtual)
En este artículo vamos a hablar de instalar y configurar WireGuard, un popular sistema para crear tu propia red privada virtual (VPN) que, tal como indican en su página web, incluye la última tecnología en criptografía. Afirman tener un mejor rendimiento que OpenVPN, y es muy sencilla de configurar con los pasos que te vamos a indicar. Al terminar este artículo, tendremos una VPN de propósito general para conectar todos nuestros dispositivos, desde ordenadores personales con sistemas Linux, Windows, hasta Raspberry Pis y dispositivos android como móviles y tablets. Se la considera la solución más segura, más simple de mayor facilidad de uso de la industria.
Contenidos
¿Qué es una VPN?
Una VPN es una red privada virtual. Se trata de una configuración que te permite realizar una conexión segura desde tu equipo, tablet o teléfono, con otros equipos u otra red de ordenadores a través de internet. Por lo general, la información viaja encriptada, de forma que nadie pueda tener acceso a la información que se transmita y reciba en la red, por muy lejos que se encuentren los equipos conectados a la VPN. Esto incrementa la seguridad y la información de tu red, y facilita las comunicaciones entre sistemas de manera controlada y segura.
Usos de una VPN
Inicialmente, las VPNs eran utilizadas para acceder a una red privada de una empresa, o para conectar redes de ordenadores distantes. Hoy en día se puede emplear muchas más cosas, como por ejemplo las que mencionamos en el siguiente listado:
- Acceder a Internet de forma anónima, sin que se pueda identificar directamente tu localización geográfica ni tu proveedor de internet, que puede ser una fuente de vulnerabilidades.
- Evitar las limitaciones geográficas impuestas por algunos sitios web, servicios e incluso empleadores, tales como páginas de streaming de vídeo (youtube, netflix, hbo, etc), de audio (Spotify, Amazon Prime Music, etc) y búsqueda de trabajo (upwork). Usando una VPN en un país distinto se puede hacer creer a esos servicios que te encuentras en un lugar distinto en el mundo al que realmente estás.
- Encriptar servicios que no van encriptados: en algunas ocasiones la información de un programa concreto viaja a través de internet sin encriptar (por ejemplo, muchos servicios como InfluxDB o ElasticSearch en su instalación por defecto no incluye la encriptación de la información, dejando abierta la posibilidad a ataques tipo «man in the middle» o al robo información no deseada por parte de terceras personas o entidades.
- Limitar acceso a ciertos servidores: los servidores internos de una empresa no necesitan estar expuestos en internet. Pueden estar accesibles a través de la VPN para todos los empleados, sin que se pueda acceder a ellos desde fuera de la VPN. Por, si tienes un sistema obsoleto al que tus clientes necesitan acceder pero para el que no puedes aplicar parches de seguridad siempre estará más seguro detrás de una VPN que expuesto en internet.
¿Qué voy a necesitar para montar mi propia VPN?
Existen múltiples formas de montar una VPN, desde contratar un servicio gestionado por terceros que se encargue de todo, hasta montarte tu propio servidor en casa haciendo NAT en tu router. Nosotros optamos por expllcarte un término medio, pues necesita un servidor en interent (será un VPS con un coste mensual reducido) En la descripción que tenemos en este artículo, necesitarás un servidor y luego tantos clientes como quieras. Se puede hacer con NAT al router de tu casa, pero no merece la pena el coste eléctrico y los posibles errores de configuración, que podrían dejar tu sistema vulnerable.
Instalación de Wireguard
Veremos una pequeñas descripción de la arquitectura y cómo instalar wireguard en el servidor y en distintos clientes.
¿Cómo funciona Wireguard?
Wireguard utiliza un modelo de encriptación similar a SSH. Configuramos claves públicas y privadas para nuestro cliente, y añadimos las claves públicas de los equipos o servidores a los que nos queremos conectar. Esto permite hacer conexiones punto a punto en lugar de tener todo centralizado en un servidor, pero en este artículo te describimos cómo hacer una conexión con un servidor, del mismo modo que harías con otras VPN famosas como OpenVPN. Una vez tengamos las claves, prepararemos la configuración de la interfaz de red, los datos de la red virtual que vamos a crear, y ya podemos lanzar el servicio. Wireguard utiliza UDP y por defecto emplea el puerto 5180. Esto es importante en el caso de que tengas configurado un firewall.
Ojo: deberás abrir el puerto 5180 en tu firewall, pues de lo contrario tu VPN no funcionará.
Instalación y generación de claves públicas y privadas en Linux
En nuestro sistema Ubuntu, wireguard ya viene en la lista de paquetes de la distribución, así que podemos instalarlo usando apt:
$sudo apt install wireguard
El siguiente paso lo deberemos hacer en el servidor y en los todos los clientes linux, pues consiste en la generación de claves públicas y privadas. Ahora seamos root por un momento, para generar las claves públicas y privadas:
$sudo su
root@nociones:/etc/wireguard#cd /etc/wireguard
root@nociones:/etc/wireguard# umask 077
root@nociones:/etc/wireguard# wg genkey | tee privatekey | wg pubkey > publickey
Tras estos comandos, tenemos una clave privada en un fichero llamado privatekey, y la clave pública en el fichero publickey. Es extremadamente importante que no le distribuyamos la privatekey a nadie, pues nuestros clientes sólo necesitarán la publickey para la configuración.
Configuración del servidor Linux
Una vez tenemos las claves públicas y privadas, editaremos el fichero de configuración:
$sudo nano /etc/wireguard/wg0.conf
La configuración se hará de la siguiente manera:
[Interface] es la etiqueta que indica la interfaz de nuestro equipo local (en este caso el servidor), conteniendo la clave privada, la dirección de red, un par de comandos necesarios en el servidor para el reenvío de paquetes a otros clientes, y el puerto donde se va a trabajar.
[peer] contiene la configuración de cada uno de nuestros clientes, que en servidor consiste en la clave pública y la dirección de red que le vamos a asignar, así que quizás tengas que saltar a la configuración de los clientes para obtener dichas claves ahora, o sencillamente sigue configurando y vuelve a editar este fichero cuando termines (no olvides reiniciar el servicio para volver a cargar los nuevos parámetros).
[Interface] #Configuración del servidor
PrivateKey = <copia aquí la clave privada de tu servidor que generamos anteriormente, no pongas los símbolos mayor y menor>
Address = 10.0.0.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
[Peer] #cliente 1
PublicKey = <copia aquí la clave pública generada en los equipos clientes>
AllowedIPs = 10.0.0.2/32
[Peer] #cliente 2
PublicKey = <copia aquí la clave pública generada en los equipos clientes>
AllowedIPs = 10.0.0.3/32
[Peer] #cliente 3... puedes tener tantos clientes como quieras
PublicKey = <copia aquí la clave pública generada en los equipos clientes>
AllowedIPs = 10.0.0.4/32
Cómo poner en marcha la VPN en el servidor, parar el servicio y cambiar la configuración
Para iniciar el servidor VPN en la interfaz wg0, el comando es el siguiente:
$sudo wg-quick up wg0
Si lo que quieres es detener el servidor VPN, es decir, para parar la interfaz de la VPN, escribe:
$sudo wg-quick down wg0
Y por último, para ver la configuración actual, emplea:
$sudo wg show
Además, posiblemente quieras que wireguard active e inicie la VPN con cada reinicio del servidor (esto quizás no lo necesites en los clientes). Una vez compruebes que tu VPN funciona, puedes hacer que arranque automáticamente cada reinicio del sistema con el siguiente comando (asumiendo que le has dado el nombre de interfaz wg0):
$sudo systemctl enable wg-quick@wg0
Y para comprobar el estado del servicio que acabamos de crear:
$sudo systemctl status wg-quick@wg0
Bueno, durante este artículo, y mientras uses tu VPN, posiblemente hagas algún cambio en la configuración de wireguard y quieras aplicar dichos cambios. A pesar de ser un paquete que viene por defecto en el repositorio de Ubuntu, nos hemos encontrado con que la opción restart del controlador de servicios no funciona correctamente. Así que si quieres reiniciar tu servicio deberás pararlo y volverlo a arrancar. Debes de tener cuidado con esto, pues si estás conectado a tu servidor a través de la propia VPN perderás la conexión con el servicio y no podrás ejecutar el comando para reiniciar. Hazlo mientras estés conectado vía ssh a su dirección real.
$sudo wg-quick down wg0
$sudo systemctl restart wg-quick@wg0
Planificación de la red
Ahora que vamos a empezar a configurar los clientes, es el momento de planificar cómo va a ser nuestra red (sí, podríamos haberlo hecho antes, pero estamos seguros de que tenías más interés en instalar directamente la herramienta que en planificar nada). En nuestro caso, tenemos un servidor, al que le daremos la dirección 10.0.0.1/32 dentro de nuestra VPN, y vamos a darles números consecutivos a los clientes (esto es, 10.0.0.2/32, 10.0.0.3/32, etc). Para configurar cada uno de los clientes, necesitaremos la IP pública del servidor, así como la clave pública del servidor, que hemos creado en la parte de configuración del servidor.
Como hemos dicho, la configuración en Wireguard es punto a punto, así que añadiremos en el servidor la clave pública del cliente y su dirección IP, y en el cliente añadiremos la clave pública del servidor y su dirección IP. En los ejemplos siguientes veremos cómo configurar la VPN en varias plataformas de ejemplo, incluyendo Windows y Android.
Modificaciones necesarias en el servidor para cada cliente
Para cada cliente que configuremos a continuación, deberemos de añadir la configuración correspondiente en el servidor antes de arrancar el cliente. Fíjate que en la configuración del servidor inicial ya pusimos algunos clientes, lo único que tienes que hacer es coger la clave pública y la IP de cada cliente dentro de la VPN y añadirlas en el servidor.
Configuración de tu VPN WireGuard en un cliente Windows
Para configurar un cliente windows, utilizaremos la aplicación Wireguard que podemos descargar en wireguard.com/install. Esta aplicación nos permite configurar nuestros túneles de manera sencilla. Inicialmente no tenemos ningún túnel, y pulsaremos el botón derecho para crear uno. Inmediatamente, veremos la clave pública y privada del servidor. Mira una captura de ejemplo a continuación:

La configuración en el cliente será más sencilla que en el servidor. Completa los datos que te da la aplicación como en el siguiente ejemplo:
[Interface] #Configuración del cliente
PrivateKey = <aquí te aparece una clave privada automáticamente, no hay que copiarla de ningún sitio>
Address = 10.0.0.2/32 #Esta es la IP que hemos asignado a nuestro cliente windows.
DNS = 1.1.1.1 #Si quieres saber por qué uso este DNS, visita https://1.1.1.1/es-ES/dns/
[Peer]
PublicKey = <copia aquí la clave pública DEL SERVIDOR, sin los símbolos mayor y menor>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = IPPUBLICADETUSERVIDOR:51820 #Escribe aquí la IP pública de tu servidor, dos puntos y el puerto 51820. Asegúrate de tener WireGuard
# en marcha y el puerto abierto en tu firewall para poder realizar el túnel.
Una vez tengas la configuración escrita, añadimos nuestro cliente en el servidor. Recuerda que la conexión es punto a punto, es decir, el servidor no «dejará entrar» a cualquiera, tienes que identificarlo en su fichero de configuración. Hecho esto, puedes darle a «Activate» para activar el túnel y que todo el tráfico vaya a través de tu servidor VPN. Podrás activar y desactivar tu VPN con sólo un botón. Mira en la barra del reloj para que tengas un fácil acceso a activar y desactivar la VPN.
Configuración de un cliente Linux
La configuración en un cliente Linux es muy similar a la configuración del servidor. Tendrás que crear las claves pública y privada tal como te indicamos en el apartado del servidor y arrancar el servicio con los mismos comandos. Supongamos que quieres que tu cliente linux tenga una IP 10.0.0.3 dentro de tu VPN. Un ejemplo de configuración es el siguiente:
root@nociones:/etc/wireguard# cat wg0.conf
[Interface]
Address = 10.0.0.3/32
PrivateKey = <copia aquí la clave privada generada para este cliente>
DNS = 1.1.1.1
[Peer]
PublicKey = <copia aquí la clave pública DEL SERVIDOR, sin los símbolos mayor y menor>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = IPPUBLICADETUSERVIDOR:51820 #Escribe aquí la IP pública de tu servidor, dos puntos y el puerto 51820. Asegúrate de tener WireGuard
# en marcha y el puerto abierto en tu firewall para poder realizar el túnel.
PersistentKeepAlive=25 #Esto mantendrá activa la conexión.
Fíjate en el comando PersistentKeepAlive=25, pues no suele venir en los tutoriales, pero WireGuard desconectará tu sistema de la VPN si no incluyes eso en algunos sistemas, como en la Raspberry Pi.
Para parar, arrancar y modificar la configuración en el cliente Linux, fíjate en los comandos que mencionamos para el servidor, pues son exactamente los mismos. ¡No te olvides de incluirlo como servicio!
Configuración de un cliente Android
WireGuard también puede utilizarse en un sistema Android. Para ello, puedes ir a la Play Store y descargar la aplicación WireGuard.
Una vez instalada la aplicación en nuestro teléfono, deberemos abrirla y pulsar el botón «+» para añadir una nueva red. Los parámetros serán los siguientes:
- Servidores DNS: 1.1.1.1
Nombre: el nombre que le daremos a esa red en nuestro equipo
Clave privada: el sistema genera automáticamente una crave privada y la mantiene oculta por seguridad. Pulsa en el icono que se encuentra a la derecha del texto para generar la clave.
Clave pública: una vez generes la clave privada, ya tenemos la clave pública disponible. Esta es la clave que deberás añadir a los «peers» en tu servidor (mira la configuración en la sección del servidor).
Direcciones: Escribe aquí la IP de tu cliente, en este caso por ejemplo 10.0.0.4/32
Servidores DNS: 1.1.1.1
Hecho esto, fíjate en la parte inferior derecha, en la opción de «añadir par». Pulsa el enlace y rellena con la configuración de tu servidor:
- Clave Pública: Escribe aquí la clave pública de tu servidor.
- Punto final: IPDELSERVIDOR:51820
- IPs permitidas: 0.0.0.0/0, ::/0
Para arrancar y parar el cliente VPN, la aplicación muestra una interfaz muy sencilla que indica en azul cuándo está activada y en gris cuando no lo está. Actívala para empezar a routear todo el tráfico a través de la VPN.
Configuración para que sólo parte del tráfico vaya a través de nuestra VPN
Por defecto, todo el tráfico de red pasará a través de nuestra VPN, haciendo que nuestra IP de salida a internet sea la del servidor. A veces nos interesa routear sólo el tráfico para una IP específica, de modo que para el resto de las direcciones de internet no estemos empleando la VPN. Esto es muy útil cuando sólo necesitamos la VPN para acceder a un servicio concreto. Por ejemplo, yo uso NextCloud desde el móvil, pero no quiero que todo el tráfico de mi móvil pase por el servidor, pues puede sobrecargarlo. Cambiando la configuración, se puede hacer que sólo el tráfico que va al servidor de nextcloud vaya a través de la VPN. Mientras tanto, el resto de mi tráfico (netflix, youtube, spotify, podcasts, gmail, etc) no pasa por el servidor VPN.
Para hacer esto, sólo cambia las IPs permitidas (AllowedIPs) por las IPs a las que quieres acceder. Por ejemplo, si mi servidor nextcloud está en 10.0.0.3/32, sólo permitiré el acceso a la VPN del tráfico al servidor y a este servidor, de la siguiente manera:
IPs permitidas: 10.0.0.1/32, 10.0.0.3/32
Y esto es todo de momento. En este artículo te hemos explicado cómo configurar un servidor VPN con Wireguard, así como la forma de configurar los diferentes clientes. ¿Qué te ha parecido? ¿Te animas a montar tu propia VPN? ¡Cuéntanos tu experiencia en los comentarios!