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.

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→


