Guía práctica: configurar WireGuard VPN road‑warrior en Debian para acceso remoto seguro

Redes & Segurança · Por · Publicado el · Actualizado el · 8 min de lectura

Guía paso a paso: configurar WireGuard VPN road‑warrior en Debian
Foto: Stefan Coders / Pexels

Guía paso a paso para configurar WireGuard VPN road‑warrior en Debian para acceso remoto seguro. En este tutorial práctico irás desde la planificación de la subred hasta la validación: instala paquetes, genera claves, crea wg0.conf, habilita el reenrutamiento IP y NAT, añade peers y pruebas. Cada etapa incluye comandos claros y consejos de resolución de problemas.

Prerequisitos y planificación de la topología road‑warrior

Necesitas un servidor Debian actualizado, acceso root (o sudo) y un puerto UDP abierto en el firewall. Idealmente, el servidor dispone de IP pública. Si está detrás de CGNAT, el cliente externo no podrá iniciar el túnel.

Define previamente: la subred de la VPN, la interfaz de salida, el puerto de WireGuard, las direcciones de los clientes y las políticas de enrutamiento.

Si aún estás decidiendo entorno, consulta cuándo optar por VPS, alojamiento compartido o bare metal en una comparativa práctica. Evalúa también cómo elegir la distribución del servidor y cómo elegir el tamaño de la VPS.

  • Servidor Debian 11/12 con sudo o root
  • Puerto UDP (ej.: 51820) abierto externamente
  • Interfaz de salida (ej.: eth0/ens3) identificada
  • Subred VPN (ej.: 10.8.0.0/24) reservada y no utilizada
  • Cliente(s) remotos con IPs /32 únicas en la VPN
Parámetro Ejemplo
Subred VPN 10.8.0.0/24
IP del servidor (VPN) 10.8.0.1
IP del cliente 1 (VPN) 10.8.0.2/32
Puerto WireGuard (UDP) 51820
Interfaz de salida eth0

1) Instalar WireGuard en Debian

Instala los paquetes oficiales. En kernels recientes, el módulo ya viene incluido. Ejecuta los comandos como root o con sudo. Después, comprueba que el módulo se haya cargado correctamente.

apt update
apt install -y wireguard wireguard-tools
modprobe wireguard || true
lsmod | grep wireguard || echo "wireguard embutido no kernel (ok)"

2) Generar y proteger las claves del servidor

Las claves son el corazón de la VPN. Genera el par de claves del servidor y restringe permisos. Nunca compartas la clave privada. Guarda la clave pública: los clientes la usarán para autenticar el servidor.

umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
echo "Chave pública do servidor:" && cat /etc/wireguard/server_public.key

3) Crear el archivo /etc/wireguard/wg0.conf (servidor)

Crea la interfaz wg0 con la IP interna de la VPN y el puerto UDP elegido. Usa SaveConfig=true para persistir cambios realizados vía wg/wg-quick. Sustituye la clave privada por el contenido real del archivo generado en el paso anterior.

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <conteudo de /etc/wireguard/server_private.key>
SaveConfig = true

4) Habilitar reenrutamiento IP y configurar NAT (salida a Internet)

Para que los clientes naveguen por Internet a través del servidor, habilita el enrutamiento IPv4. Luego aplica NAT (masquerade) con nftables. Esto convierte tu servidor en gateway; revisa las políticas del firewall.

Si prefieres UFW, puedes integrar las reglas. Consulta el instructivo sobre cómo configurar firewall en Ubuntu con UFW.

# Habilitar roteamento IPv4 em tempo de execução e tornar permanente
sysctl -w net.ipv4.ip_forward=1
sed -i 's/^#\?net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf

# Instalar e habilitar nftables
apt install -y nftables
systemctl enable --now nftables

# Criar regra de NAT (ajuste a interface de saída, ex.: eth0)
cat >/etc/nftables.d/wireguard-nat.nft <<'EOF'
table ip wg {
  chain postrouting {
    type nat hook postrouting priority 100;
    oifname "eth0" ip saddr 10.8.0.0/24 counter masquerade
  }
}
EOF

# Incluir diretório customizado no nftables.conf (somente se ainda não incluído)
grep -q 'include "/etc/nftables.d/*.nft"' /etc/nftables.conf || \
  printf '\ninclude "/etc/nftables.d/*.nft"\n' >> /etc/nftables.conf

# Recarregar regras
nft -f /etc/nftables.conf
nft list ruleset | sed -n '1,120p'

5) Levantar la interfaz WireGuard y validar el servidor

Activa la interfaz wg0 ahora y al arranque. A continuación, inspecciona el estado de la VPN. Sin peers, el handshake aún no aparecerá. La interfaz debe estar UP y con la IP configurada.

systemctl enable --now wg-quick@wg0
systemctl status wg-quick@wg0 --no-pager || true
wg show
ip a show wg0

6) Provisionar un cliente (peer) road‑warrior

Genera las claves en el propio dispositivo cliente, cuando sea posible. Luego crea el archivo de configuración y registra el peer en el servidor. Intercambia claves de forma segura. Ajusta Endpoint con la IP o DNS público del servidor.

# No cliente (ou em estação segura), gerar chaves
umask 077
wg genkey | tee ~/client1_private.key | wg pubkey > ~/client1_public.key
echo "Pub do cliente:" && cat ~/client1_public.key

# Arquivo de configuração do cliente (ex.: client1.conf)
cat > ~/client1.conf <<'EOF'
[Interface]
PrivateKey = <client1_private_key>
Address = 10.8.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
AllowedIPs = 0.0.0.0/0
Endpoint = <IP_ou_DNS_publico_servidor>:51820
PersistentKeepalive = 25
EOF

# No servidor: adicionar o peer ao wg0.conf e recarregar
# (cole a chave pública real do cliente em <client1_public_key>)
cat >>/etc/wireguard/wg0.conf <<'EOF'

[Peer]
PublicKey = <client1_public_key>
AllowedIPs = 10.8.0.2/32
EOF

# Sincronizar configuração sem derrubar a interface
wg syncconf wg0 <(wg-quick strip wg0)
wg show

7) Pruebas, MTU y resolución de problemas comunes

Valida la conexión conectando el cliente y observando el handshake. Prueba ping y rutas. Si hay pérdida de paquetes en redes móviles, ajusta MTU; 1420 suele ser un buen punto. Las restricciones de firewalls externos pueden bloquear el puerto UDP. Verifica las reglas con el proveedor y appliances de red.

Con esto concluye la guía paso a paso para configurar WireGuard VPN road‑warrior en Debian para acceso remoto seguro.

  • Comprobar estado: wg show (handshake reciente, bytes TX/RX)
  • Ping a la IP VPN del servidor (10.8.0.1) y a hosts externos
  • Ajustar MTU en el cliente: añadir MTU = 1420 en [Interface]
  • Si el servidor está detrás de NAT, usar PersistentKeepalive = 25
  • Confirmar NAT: nft list ruleset debe mostrar masquerade en la oifname correcta
  • DNS: si la IP funciona y el nombre no, revisa el campo DNS del cliente
# No servidor
wg show

# No cliente
ping -c 3 10.8.0.1 || true
ping -c 3 1.1.1.1 || true

# Inspecionar NAT
nft list ruleset | grep -A3 'table ip wg' || true

Preguntas frecuentes

¿Qué puerto usar en WireGuard?

Lo habitual es usar UDP 51820 como ejemplo, pero puedes elegir otro puerto si sospechas bloqueo. Sea cual sea el puerto, debe abrirse en el firewall del servidor y en los security groups del proveedor de nube cuando aplique. Si existen appliances de red externos que filtran UDP, es posible que necesites mover el puerto o ajustar reglas allí.

¿Puedo tener varios clientes (peers)?

Sí. Cada cliente debe tener una dirección /32 única en la subred VPN, y conviene generar un par de claves por dispositivo. En el servidor se añade un bloque [Peer] por cliente con su clave pública y AllowedIPs que limiten su alcance. Gestiona las IPs y AllowedIPs con cuidado para evitar solapamientos y controlar el enrutamiento.

¿Necesito el módulo DKMS en Debian actual?

En Debian recientes WireGuard está integrado en el kernel, por eso instalar los paquetes wireguard y wireguard-tools suele ser suficiente. DKMS no es necesario en la mayoría de casos. Puedes usar modprobe para comprobar que el módulo está cargado, y revisar el estado con los comandos que indica la guía.

¿Cómo persistir reglas si uso iptables en lugar de nftables?

Si usas iptables en lugar de nftables, la guía sugiere emplear iptables-nft junto con netfilter-persistent para guardar y restaurar reglas al arranque. Ten en cuenta que Debian moderna usa nftables como pila por defecto; si empiezas una configuración nueva, nftables suele ser la opción preferible y simplifica la integración con WireGuard y NAT.

¿Cómo enrutar solo subredes específicas vía VPN?

Para enrutar solo subredes específicas desde el cliente, ajusta AllowedIPs en la configuración del peer para incluir únicamente las redes deseadas (por ejemplo 10.8.0.0/24 y 192.168.1.0/24) y evita usar 0.0.0.0/0. Así creas un split‑tunnel donde solo el tráfico hacia esas subredes sale por la VPN.

¿Cómo usar la VPN con IPv6?

Para IPv6, añade un prefijo ULA en el Address del servidor y de los clientes (por ejemplo fd00:8::/64 según la guía) y habilita el reenvío IPv6 con net.ipv6.conf.all.forwarding=1. Cuando sea necesario, aplica reglas de NAT66 y actualiza AllowedIPs con los prefijos IPv6 para que el enrutamiento funcione correctamente.

¿Quieres una segunda opinión de seguridad?

Si necesitas revisar reglas, endurecer el firewall o crear playbooks reproducibles para tu VPN WireGuard, podemos hablar sobre tu arquitectura y los próximos pasos.

Hablar sobre tu configuración

Ver también