CAFÉ Trastear, romper y documentarlo antes de olvidarlo.

posts

WireGuard en un VPS de 2 GB sin morir en el intento

2026-10-221 min #wireguard#debian#nftables

Tres intentos me costó entender por qué el túnel subía pero no pasaba un solo paquete. No era WireGuard. Era que nftables hacía exactamente lo que le había pedido: descartar todo lo que no estaba en la lista.

Lo que monté

Un servidor WireGuard en 10.99.0.1/24 con dos clientes, y el SSH del VPS cerrado a internet: solo se entra por el túnel. Eso obliga a ordenar las reglas con cabeza, porque si te equivocas te has quedado fuera de tu propia máquina.

El bloque que importa

# /etc/nftables.conf — solo lo esencial
chain input {
    type filter hook input priority 0; policy drop;

    iifname "lo" accept
    ct state established,related accept

    iifname "wg0" ip saddr 10.99.0.0/24 tcp dport 22 \
        ct state new counter accept
}

Si vas a tocar el firewall de la única máquina por la que entras, ten una segunda vía de acceso antes de recargar nada. La primera vez no la tenía.

Errores que cometí

  • Olvidar ct state established,related: el handshake entraba, la respuesta no salía.
  • Recargar sin validar antes con nft -c -f.
  • Dar por hecho que el firewall del proveedor y el del sistema eran el mismo.

El resto del montaje, con el fichero completo y los clientes, está en la ficha del laboratorio.