VPNSmith
VPS Contabo
self-host-vpnINFO

wg-quick: line 32: resolvconf: command not found (soluzione WireGuard)

wg-quick si ferma alla riga 32 perché la riga DNS chiama resolvconf, assente sui server minimali. Soluzione: apt install openresolv, oppure systemd-resolvconf se systemd-resolved è attivo. 4 soluzioni, quale scegliere.

Di Eric Gerard · Fondatore · VPNSmith - Specialista in VPN autogestite e VPS GDPR4 min letturaPhoto via Pexels

La configurazione è corretta, le chiavi corrispondono, e wg-quick up wg0 si ferma su:

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

Il messaggio indica esattamente il vero problema, e quasi nessuno lo legge così. Non sta dicendo che la tua impostazione DNS è sbagliata. Sta dicendo che un programma chiamato resolvconf doveva applicarla e su questa macchina non esiste.

Cosa fa davvero wg-quick con una riga DNS

wg-quick è uno script shell che fa da involucro al comando wg. Quando la tua configurazione contiene:

[Interface]
DNS = 10.10.0.1

non scrive /etc/resolv.conf da solo. Esegue il binario esterno resolvconf e lascia arbitrare a lui, perché su un sistema Linux diverse componenti possono voler controllare il resolver nello stesso momento, e sovrascrivere direttamente il file è proprio il modo in cui entrano in conflitto.

Su una distribuzione desktop quel programma è presente. Su un'immagine server minimale, un'istanza cloud o un container, di solito non lo è, e lo script fallisce esattamente a quella riga.

Uno scaffale metallico di supermercato quasi vuoto fotografato da vicino, con una sola scatola di cartone di gnocchi aperta rimasta in piedi, il resto del ripiano spoglio
Uno scaffale metallico di supermercato quasi vuoto fotografato da vicino, con una sola scatola di cartone di gnocchi aperta rimasta in piedi, il resto del ripiano spoglio

Soluzione 1: installare un'implementazione di resolvconf

La risposta diretta, quando nient'altro gestisce il tuo resolver:

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

Dopodiché wg-quick up wg0 funziona senza modifiche.

⛔ Non farlo se systemd-resolved è in esecuzione. Avresti due programmi che rivendicano l'autorità su un solo file, e il sintomo è peggiore dell'errore di partenza: un DNS che funziona finché qualcosa non si riavvia, e poi smette. Controlla prima:

systemctl is-active systemd-resolved

Soluzione 2: usare systemd-resolved, che forse hai già

Se quel comando risponde active, la macchina ha già un gestore del resolver e wg-quick può dialogarci tramite uno strato di compatibilità. Su Debian e Ubuntu:

apt install systemd-resolvconf

Questo fornisce un comando resolvconf che inoltra a systemd-resolved, invece di una seconda implementazione indipendente. Verifica poi che il file sia gestito come ti aspetti:

ls -l /etc/resolv.conf

Un link simbolico verso /run/systemd/resolve/ significa che è systemd-resolved a possederlo. Un file normale significa che lo gestisce qualcos'altro, ed è meglio chiarirlo prima di aggiungere un tunnel al quadro.

Soluzione 3: impostare il DNS da te con PostUp

Se preferisci non installare nulla, sostituisci la riga DNS con comandi che fanno il lavoro direttamente:

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

È un metodo brutale e funziona, ma ha due limiti da dichiarare. Sovrascrive qualunque cosa ci fosse nel file, quindi qualsiasi altro componente che gestisce il resolver non sarà d'accordo con te. E la riga PostDown deve ripristinare qualcosa di sensato, perché un tunnel che si spegne lasciando un resolv.conf vuoto si porta via anche il DNS.

Per un container o un VPS dedicato a un solo scopo, dove nient'altro tocca il resolver, è una scelta perfettamente ragionevole.

Soluzione 4: decidere che non ti serve

Cancella la riga DNS e il tunnel si alza subito.

È la risposta corretta in un solo caso: quando il tunnel serve a raggiungere una rete, non a nascondere le tue risoluzioni DNS. Un collegamento site-to-site tra due server non ha alcun motivo di cambiare il resolver di nessuna delle due macchine.

⛔ È la risposta sbagliata quando il tunnel serve alla privacy. Senza DNS nel tunnel, ogni nome che risolvi va ancora al resolver precedente in chiaro, e il fatto che il traffico venga cifrato dopo non annulla questo. Il meccanismo di questa fuga è spiegato in fughe DNS in WireGuard.

Hai incontrato questo errore su un portatile Linux con un .conf scaricato da una VPN commerciale? Non devi per forza combattere con wg-quick. L'app Linux ufficiale di Proton VPN (Debian, Ubuntu, Fedora, Arch) gestisce il tunnel tramite NetworkManager invece che con wg-quick, quindi resolvconf non entra in gioco, e invia il DNS ai propri resolver, con un kill switch su tutti i piani compreso il Free (link affiliato). Tieni le soluzioni qui sopra quando il server è tuo: l'app sostituisce solo il lato client di un servizio commerciale.

Come scegliere

systemd-resolved già attivo -> systemd-resolvconf (soluzione 2) nessun gestore del resolver -> openresolv (soluzione 1) container, VPS a scopo singolo -> PostUp (soluzione 3) tunnel tra due server -> rimuovi la riga DNS (soluzione 4)

Se vuoi che solo i tuoi domini interni vengano risolti attraverso il tunnel e il resto resti com'è, si tratta ancora di un'altra configurazione: WireGuard split DNS.

E se ora il tunnel si alza ma non carica nulla, il problema non era il DNS: vedi MTU per le pagine che si bloccano, e risoluzione dei problemi di handshake se wg show non riporta alcun handshake.

★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · porta da 200 Mbit/s

Ospita la tua VPN sul tuo VPS → ContaboAccesso root completo · IPv4 pubblico · scegli la tua regione→

Domande frequenti

Perché wg-quick dice resolvconf: command not found?
Perché wg-quick non configura il DNS da solo. Quando la configurazione contiene una riga DNS, esegue il comando esterno resolvconf per applicarla, e su un'immagine server minimale quel binario non è installato. La configurazione del tunnel è corretta; manca un programma di supporto.
Posso semplicemente cancellare la riga DNS?
Sì, e il tunnel si alza subito. La conseguenza è che le risoluzioni dei nomi continuano ad andare al resolver esistente invece che attraverso il tunnel, il che è una fuga DNS se lo scopo del tunnel era la privacy. È la risposta giusta solo quando il DNS nel tunnel non ti serviva.
Quale pacchetto fornisce resolvconf?
Su Debian e Ubuntu è openresolv o resolvconf, su Arch è openresolv. Su un sistema che usa già systemd-resolved, installare un'altra implementazione di resolvconf può creare due gestori per un solo file, il che è peggio dell'errore di partenza.
Qual è la differenza tra resolvconf e systemd-resolved in questo caso?
Risolvono lo stesso problema in modi incompatibili. resolvconf è un piccolo programma che arbitra le scritture su /etc/resolv.conf; systemd-resolved è un demone che possiede il file tramite un link simbolico e si configura con resolvectl. Scegli quello che gestisce già il tuo sistema e non installare l'altro.
Questo errore significa che la mia VPN non è sicura?
No. L'errore si verifica prima che l'interfaccia sia completamente configurata, quindi o il tunnel non si alza affatto, o si alza senza l'impostazione DNS che avevi chiesto. Il secondo caso è da conoscere, perché il tunnel funziona e le risoluzioni, in silenzio, non lo usano.