Cómo crear una VPN con WireGuard paso a paso

¿Por qué elegir WireGuard?

WireGuard es un protocolo VPN moderno, seguro y ultra rápido que se ha ganado mi confianza por su simplicidad y eficiencia. Funciona en casi cualquier sistema operativo y ofrece conexiones más veloces y estables que OpenVPN. Además, se integra especialmente bien con el kernel de Linux, lo que le da una ventaja en rendimiento.

En este artículo te voy a mostrar cómo instalarlo, configurarlo y dejarlo funcionando como un campeón, todo sin dolores de cabeza.

Instalar WireGuard en tu sistema

Primero lo primero: necesitas instalar WireGuard tanto en el servidor como en el cliente. Cada sistema tiene su método, pero todos son sencillos. Aquí te dejo una guía rápida por plataforma:

Windows

Descarga el cliente oficial desde la web de WireGuard.

macOS

Puedes descargarlo desde la App Store o instalarlo con Homebrew:

brew install wireguard-tools

Android

Disponible en Play Store y F-Droid. También puedes usar Termux:

pkg install wireguard-tools

iOS

Descárgalo directamente desde la App Store.

BSD

# OpenBSD
doas pkg_add wireguard-tools

# FreeBSD
doas pkg install wireguard-tools

Linux

# Arch
sudo pacman -S wireguard-tools

# Debian/Ubuntu
sudo apt install wireguard

# Fedora
sudo dnf install wireguard-tools

# Gentoo
doas emerge wireguard-tools

Para más distros (sí, hay muchas), revisa la página oficial.

Generar las llaves

Cada dispositivo que se conecte necesita un par de llaves: pública y privada. Primero, crea la carpeta de configuración:

sudo mkdir -p /etc/wireguard/

Luego, genera las llaves:

wg genkey | tee privatekey | wg pubkey > publickey

Esto te creará dos archivos: privatekey (que debe quedarse en secreto) y publickey (que compartirás con los otros nodos).

Configurar la VPN

Vamos a crear el archivo de configuración principal: /etc/wireguard/wg0.conf. Puedes usar cualquier editor, como nano o vim.

Conexión simple punto a punto

Perfecta si solo quieres conectar un cliente a un servidor.

Servidor (wg0.conf)

[Interface]
Address = 10.0.1.1
PrivateKey = <clave_privada_servidor>
ListenPort = 51820

[Peer]
PublicKey = <clave_publica_cliente>
AllowedIPs = 10.0.1.2/32

Cliente (wg0.conf)

[Interface]
Address = 10.0.1.2
PrivateKey = <clave_privada_cliente>
ListenPort = 21841

[Peer]
PublicKey = <clave_publica_servidor>
Endpoint = IP_DEL_SERVIDOR:51820
AllowedIPs = 10.0.1.0/24
PersistentKeepalive = 25

Inicia la conexión con:

wg-quick up wg0

Hazlo en ambos extremos. Si tienes GUI, simplemente presiona «conectar».

Acceso a la red local (LAN)

Si quieres que tu cliente acceda a la red local del servidor (por ejemplo, a una impresora o NAS), necesitas redirigir el tráfico y aplicar reglas de iptables en el servidor:

PostUp   = iptables -A FORWARD -i %i -j ACCEPT; \
iptables -A FORWARD -o %i -j ACCEPT; \
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; \
iptables -D FORWARD -o %i -j ACCEPT; \
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Asegúrate de que eth0 sea tu interfaz de red. En el cliente, actualiza:

AllowedIPs = 10.0.1.0/24, 192.168.1.0/24

Redirigir todo el tráfico por la VPN

¿Quieres navegar como si estuvieras en otro país? Solo cambia esto en el cliente:

AllowedIPs = 0.0.0.0/0, ::/0

Y en el servidor, mejora el manejo del tráfico IPv4 e IPv6:

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; \
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; \
ip6tables -A FORWARD -i wg0 -j ACCEPT; \
ip6tables -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; \
ip6tables -D FORWARD -i wg0 -j ACCEPT; \
ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Activar IP forwarding en el servidor

Edita el archivo /etc/sysctl.conf y descomenta:

net.ipv4.ip_forward=1

Luego aplica los cambios:

sudo sysctl -p /etc/sysctl.conf

Mejorar la seguridad de la configuración

Por seguridad, restringe los permisos del directorio de WireGuard:

sudo chown -R root:root /etc/wireguard/
sudo chmod -R og-rwx /etc/wireguard/*

Y si usas systemd, activa el servicio para que arranque al inicio:

sudo systemctl enable wg-quick@wg0.service

¿Y ahora qué?

Ya tienes tu propia VPN personalizada con WireGuard, segura, rápida y bajo tu control total. Puedes probarla con herramientas como whatismyipaddress.com para confirmar que el tráfico está pasando por el servidor.

¿Ya lo probaste? ¿Qué tal te va con la velocidad frente a otros protocolos?

👉  Instalar WordPress en un VPS mediante Docker

👇Tu comentario