VPNSmith
VPS Contabo
self-host-vpnINFO

wg-quick: line 32: resolvconf: command not found (solución WireGuard)

wg-quick se detiene en la línea 32 porque la línea DNS llama a resolvconf, ausente en servidores mínimos. Solución: apt install openresolv, o systemd-resolvconf si systemd-resolved está activo. 4 soluciones y cuál elegir.

Por Eric Gerard · Fundador · VPNSmith - Especialista en VPN self-host y VPS GDPR4 min de lecturaPhoto via Pexels

La configuración es correcta, las claves coinciden y wg-quick up wg0 se detiene con:

/usr/bin/wg-quick: line 32: resolvconf: command not found

El mensaje nombra el problema real con exactitud, y casi nadie lo lee así. No está diciendo que tu ajuste DNS sea incorrecto. Está diciendo que un programa llamado resolvconf debía aplicarlo y no existe en esta máquina.

Qué hace realmente wg-quick con una línea DNS

wg-quick es un script de shell que envuelve el comando wg. Cuando tu configuración contiene:

[Interface]
DNS = 10.10.0.1

no escribe /etc/resolv.conf por sí mismo. Ejecuta el binario externo resolvconf y deja que ese programa arbitre, porque en un sistema Linux varias cosas pueden querer controlar el resolver a la vez, y sobrescribir el archivo directamente es la forma en que se pelean.

En una distribución de escritorio ese programa está presente. En una imagen de servidor mínima, una instancia cloud o un contenedor, normalmente no, y el script falla exactamente en esa línea.

Estante metálico de supermercado casi vacío fotografiado de cerca, con una única caja de cartón abierta de ñoquis en pie y el resto de la balda vacía
Estante metálico de supermercado casi vacío fotografiado de cerca, con una única caja de cartón abierta de ñoquis en pie y el resto de la balda vacía

Solución 1: instalar una implementación de resolvconf

La respuesta directa, cuando nada más gestiona tu resolver:

apt install openresolv        # Debian, Ubuntu
pacman -S openresolv          # Arch

Después, wg-quick up wg0 funciona sin cambios.

⛔ No lo hagas si systemd-resolved está en ejecución. Tendrías entonces dos programas reclamando la autoridad sobre un mismo archivo, y el síntoma es peor que el error de partida: un DNS que funciona hasta que algo se reinicia y luego deja de funcionar. Compruébalo primero:

systemctl is-active systemd-resolved

Solución 2: usar systemd-resolved, que quizá ya tienes

Si ese comando responde active, la máquina ya tiene un gestor de resolver y wg-quick puede hablar con él mediante una capa de compatibilidad. En Debian y Ubuntu:

apt install systemd-resolvconf

Esto proporciona un comando resolvconf que reenvía a systemd-resolved en lugar de una segunda implementación independiente. Confirma después que el archivo se gestiona como esperas:

ls -l /etc/resolv.conf

Un enlace simbólico hacia /run/systemd/resolve/ significa que systemd-resolved es su dueño. Un archivo normal significa que lo gestiona otra cosa, y conviene aclararlo antes de añadir un túnel a la ecuación.

Solución 3: configurar el DNS tú mismo con PostUp

Si prefieres no instalar nada, sustituye la línea DNS por comandos que hagan el trabajo directamente:

[Interface]
PostUp = printf 'nameserver 10.10.0.1\n' > /etc/resolv.conf
PostDown = printf 'nameserver 1.1.1.1\n' > /etc/resolv.conf

Es tosco y funciona, y hay que dejar claros sus dos límites. Sobrescribe lo que hubiera en el archivo, así que cualquier otra cosa que gestione el resolver no estará de acuerdo contigo. Y la línea PostDown tiene que restaurar algo razonable, porque un túnel que cae dejando un resolv.conf vacío se lleva el DNS con él.

Para un contenedor o un VPS de propósito único donde nada más toca el resolver, es una opción perfectamente razonable.

Solución 4: decidir que no lo necesitas

Borra la línea DNS y el túnel se levanta de inmediato.

Es la respuesta correcta exactamente en un caso: cuando el túnel existe para llegar a una red, no para ocultar tus resoluciones. Un enlace site-to-site entre dos servidores no tiene ningún motivo para cambiar el resolver de ninguna de las dos máquinas.

⛔ Es la respuesta equivocada cuando el túnel es para privacidad. Sin DNS por el túnel, cada nombre que resuelves sigue yendo a tu resolver anterior en claro, y que el tráfico vaya cifrado después no lo deshace. La mecánica de esa fuga está en prevención de fugas DNS.

¿Te aparece este error en un portátil Linux con un .conf descargado de una VPN comercial? No tienes por qué pelearte con wg-quick. La app oficial de Proton VPN para Linux (Debian, Ubuntu, Fedora, Arch) gestiona el túnel a través de NetworkManager en lugar de wg-quick, así que no interviene ningún resolvconf, y envía el DNS a sus propios resolvers, con kill switch en todos los planes, incluido el gratuito (enlace de afiliado). Quédate con las soluciones anteriores cuando el servidor es tuyo: la app solo sustituye el lado cliente de un servicio comercial.

Cómo elegir entre ellas

systemd-resolved ya activo -> systemd-resolvconf (solución 2) nada gestiona el resolver -> openresolv (solución 1) contenedor, VPS de uso único -> PostUp (solución 3) túnel entre dos servidores -> quitar la línea DNS (solución 4)

Si solo quieres que tus dominios internos se resuelvan por el túnel y el resto se quede como está, es otra configuración distinta: split DNS en WireGuard.

Y si el túnel ya se levanta pero no carga nada, el problema no era el DNS: consulta MTU para páginas que se quedan colgadas, y solución de problemas de handshake si wg show no muestra ningún handshake.

★ Datacenter Núremberg GDPR · ✓ IPv4 dedicada incluida · puerto de 200 Mbit/s

Aloja tu VPN en tu propio VPS → ContaboAcceso root completo · IPv4 pública · elige tu región→

Preguntas frecuentes

¿Por qué wg-quick dice resolvconf: command not found?
Porque wg-quick no configura el DNS por sí mismo. Cuando la configuración contiene una línea DNS, ejecuta el comando externo resolvconf para aplicarla, y en una imagen de servidor mínima ese binario no está instalado. La configuración del túnel está bien; lo que falta es un programa auxiliar.
¿Puedo simplemente borrar la línea DNS?
Sí, y el túnel se levantará de inmediato. La consecuencia es que las resoluciones de nombres siguen yendo a tu resolver actual en lugar de pasar por el túnel, lo que supone una fuga DNS si el objetivo del túnel era la privacidad. Solo es la respuesta correcta cuando no necesitabas DNS por el túnel.
¿Qué paquete proporciona resolvconf?
En Debian y Ubuntu es openresolv o resolvconf, y en Arch es openresolv. En un sistema que ya ejecuta systemd-resolved, instalar otra implementación de resolvconf puede crear dos gestores para un mismo archivo, lo cual es peor que el error original.
¿Qué diferencia hay entre resolvconf y systemd-resolved en este caso?
Resuelven el mismo problema de formas incompatibles. resolvconf es un pequeño programa que arbitra las escrituras en /etc/resolv.conf; systemd-resolved es un demonio que se adueña del archivo mediante un enlace simbólico y se configura con resolvectl. Usa el que ya gestiona tu sistema y no instales el otro.
¿Este error significa que mi VPN es insegura?
No. El error se produce antes de que la interfaz quede totalmente configurada, así que o bien el túnel no llega a levantarse, o se levanta sin el ajuste DNS que pediste. El segundo caso conviene tenerlo presente, porque el túnel funciona y las resoluciones, en silencio, no lo usan.