Home
» Come fare
»
Errori di ricerca DNS in Debian 12: Ripara systemd-resolved
Errori di ricerca DNS in Debian 12: Ripara systemd-resolved
Se Debian 12 visualizza il messaggio "Errore temporaneo nella risoluzione dei nomi", controlla il servizio di risoluzione, il /etc/resolv.confcollegamento e i server DNS elencati da resolvectl—in quest'ordine. Il riavvio del servizio è utile solo se il servizio è arrestato; un collegamento interrotto o un server upstream irraggiungibile richiedono una soluzione diversa.
Queste istruzioni si applicano ai sistemi Debian 12 (Bookworm) configurati per utilizzare systemd-resolved. Debian ha separato tale resolver in un pacchetto a parte e non lo ha reso predefinito, come spiegato nelle note di rilascio di Debian 12. Se la tua installazione utilizza un altro gestore DNS, mantieni il controllo su tale gestore anziché imporre queste impostazioni.
1. Individuare i punti in cui la risoluzione dei nomi fallisce
Iniziate con la configurazione del percorso di rete e la risoluzione del nome host. Eseguite i comandi localmente o in un terminale che rimarrà aperto anche in caso di modifiche alla rete:
ip -br address
ip route
ping -c 2 1.1.1.1
resolvectl status
resolvectl query debian.org
getent ahosts debian.org
Una rotta predefinita e una connessione IP numerica funzionante suggeriscono che la macchina può raggiungere la rete senza DNS. Un ping non riuscito di per sé non dimostra un percorso interrotto: le reti possono bloccare le risposte ICMP echo. Se l'interfaccia non ha un indirizzo o una rotta, correggere prima la connessione di rete.
resolvectl statusMostra i server DNS e i domini assegnati a livello globale o alle singole interfacce. resolvectl queryVerifica il resolver systemd; getent ahostsverifica il percorso di ricerca del nome host comunemente utilizzato dalle applicazioni Linux. La distinzione aiuta a isolare il problema.
Osservazione
Prossimo controllo
Nessun indirizzo o percorso predefinito
Correggi la configurazione dell'interfaccia, del gateway o del DHCP prima di configurare il DNS.
resolvectlnon riesce a connettersi al suo servizio
Verifica se systemd-resolvedè installato e in esecuzione.
resolvectl queryfunziona, getentfallisce
Ispezionare /etc/resolv.confla configurazione degli host NSS.
Entrambe le ricerche falliscono con un percorso funzionante
Verificare gli indirizzi DNS a monte, il routing DNS e l'accesso al firewall.
Una visualizzazione terminale raggruppa il percorso di rete predefinito, l'assegnazione del server DNS e una ricerca del nome host a livello di applicazione per la diagnosi iniziale.
2. Assicurarsi che systemd-resolved sia installato e attivo.
Su Debian 12, la presenza di systemd non garantisce l'installazione del pacchetto di risoluzione DNS separato. Verifica il pacchetto e l'unità prima di modificare qualsiasi file DNS:
dpkg-query -W -f='${Status}\n' systemd-resolved
systemctl status systemd-resolved --no-pager
Se il pacchetto è installato ma il servizio è inattivo, avvialo e abilitalo per gli avvii futuri:
Se il pacchetto non è presente, installalo sudo apt install systemd-resolvedsolo dopo aver ottenuto l'accesso al repository dei pacchetti. L'installazione modifica il controllo di /etc/resolv.conf, quindi rivedi prima qualsiasi configurazione di NetworkManager, VPN o DNS statico. Debian documenta questa modifica del pacchetto nelle note di aggiornamento di Bookworm .
La visualizzazione dello stato del servizio illustra dove cercare l'unità caricata, lo stato attivo e i messaggi di avvio.
3. Ripara il collegamento del resolver solo se è errato
systemd-resolvedLo stub standard è in ascolto su 127.0.0.53. Il suo file di compatibilità consigliato è /run/systemd/resolve/stub-resolv.conf, che può essere collegato da /etc/resolv.conf. Controlla prima la tua modalità corrente:
ls -l /etc/resolv.conf
readlink -f /etc/resolv.conf
cat /etc/resolv.conf
resolvectl status
Anche il collegamento /run/systemd/resolve/resolv.confè una modalità supportata, ma i programmi che lo utilizzano contattano direttamente il DNS upstream invece dello stub locale. Non bisogna considerare quel collegamento interrotto solo perché è diverso. Il manuale del servizio systemd-resolved di Debian spiega le modalità supportate.
Se si utilizza intenzionalmente lo stub locale, il servizio è in esecuzione, il listener dello stub è abilitato e quello esistente /etc/resolv.confè mancante, orfano o punta a un resolver obsoleto, ripristinare il collegamento consigliato. Innanzitutto, eseguire un backup di un file o di un collegamento esistente; saltare la copia se non esiste alcun file:
Non eseguire quella sostituzione su un host in cui un altro servizio gestisce intenzionalmente /etc/resolv.conf. Una nameserver 127.0.0.53voce locale richiede anche un listener stub funzionante; la semplice scrittura di quell'indirizzo non crea un servizio DNS. Su una macchina remota, mantieni un secondo metodo di accesso prima di modificare le impostazioni del resolver.
Il controllo del collegamento simbolico mostra il target previsto quando Debian è configurato intenzionalmente per utilizzare lo stub locale risolto da systemd.
4. Correggere un server DNS upstream assente o irraggiungibile
Quando resolvectl statusnon viene visualizzato alcun server DNS upstream adatto o un server configurato non è raggiungibile, correggere l'origine di tale assegnazione. Le impostazioni DNS dinamiche possono provenire da DHCP, NetworkManager, systemd-networkd o una VPN. Verificare quale interfaccia veicola la rotta predefinita e quale server DNS appartiene a tale interfaccia.
Per un breve test diagnostico su una rete che consente DNS pubblici, assegnare resolver pubblici noti a tale interfaccia. Sostituire ens33con l'interfaccia effettiva da ip -br address:
sudo resolvectl dns ens33 1.1.1.1 1.0.0.1
resolvectl query debian.org
Questi due indirizzi sono documentati da Cloudflare come indirizzi pubblici del suo resolver DNS . La resolvectl dnsmodifica riguarda la configurazione in fase di esecuzione; un amministratore di rete potrebbe sostituirla quando il collegamento viene ristabilito. Se ora la ricerca funziona, è consigliabile impostare una sorgente DNS permanente anziché affidarsi a questo comando temporaneo.
Con NetworkManager, ispeziona la connessione attiva nmcli connection show --activee regola le impostazioni DNS o il comportamento DHCP di tale connessione. Con systemd-networkd, inserisci le DNS=impostazioni desiderate nel .networkfile corrispondente e riavvia o riconfigura la rete in un momento sicuro. Consulta il manuale di Debian systemd.network e il manuale di configurazione di Debian NetworkManager . La riconnessione di un'interfaccia gestita può interrompere una sessione SSH.
Per i nomi interni, è preferibile utilizzare i server DNS dell'organizzazione o della VPN. Non si può dare per scontato che i resolver pubblici rispondano alle zone private; forzare tutte le query verso di essi potrebbe compromettere il DNS diviso o rivelare i nomi host interni. DNS=Le voci globali resolved.confpossono operare insieme al DNS per collegamento anziché sostituirlo automaticamente; consultare il manuale di Bookworm resolved.conf .
5. Svuota la cache e verifica che entrambi i percorsi di ricerca funzionino
Dopo aver corretto il servizio, il collegamento del resolver o la configurazione a monte, cancellare le risposte memorizzate nella cache ed eseguire nuovamente il test:
La riparazione è efficace quando resolvectl querygli indirizzi vengono restituiti, getent ahostsi record degli indirizzi vengono restituiti e i server DNS previsti rimangono visibili dopo la riconnessione della rete. I due comandi testano interfacce diverse, quindi non considerare il successo in uno come prova che tutte le applicazioni siano state riparate. Il manuale di resolvectl di Debian documenta la query, lo stato e lo svuotamento della cache.
La schermata finale del terminale mostra i due controlli che, una volta riparata la configurazione DNS, dovrebbero entrambi restituire record di indirizzo.
Se resolvectl queryla ricerca ha successo ma getentcontinua a fallire, esaminare grep "^hosts:" /etc/nsswitch.confe verificare che un modulo NSS appropriato dnso installato resolvesia presente nel percorso di ricerca. Se entrambi i tentativi continuano a fallire, esaminare il registro del resolver e le eventuali restrizioni del firewall sul traffico DNS, quindi eseguire un test utilizzando l'indirizzo DNS aziendale, del router o del provider effettivo. Una singola ricerca riuscita non è sufficiente: ripetere i controlli dopo la riconnessione e dopo il riavvio per verificare la persistenza della soluzione.