Risposte:
dnsmasq
i pacchetti sono ancora disponibili in 16.10 e 17.04.
Installa dnsmasq
e dipendenze (o almeno scarica i loro pacchetti) prima di disabilitaresystemd-resolved
:
sudo apt-get install dnsmasq
Disabilita systemd-resolved
e verifica che dnsmasq
sia in esecuzione:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Condire dnsmasq
a piacere. Dopo aver applicato le impostazioni, riavvia dnsmasq
:
sudo systemctl stop dnsmasq
sudo systemctl start dnsmasq
Dopo il passaggio 2 potresti non avere un risolutore del sistema funzionante fino al completamento del passaggio 3. Potrebbe essere necessario riavviare il sottosistema di rete (o semplicemente riavviare) per dnsmasq
funzionare con le configurazioni predefinite. Nel mio test, l'aggiunta di un server DNS noto /etc/dnsmasq.conf
e il riavvio sono dnsmasq
stati sufficienti per farlo funzionare in un ambiente liveCD.
dns=dnsmasq
configurazione a/etc/NetworkManager/NetworkManager.conf
Oltre alla risposta di @quixotic:
Assicurati di avere in /etc/NetworkManager/NetworkManager.conf:
[main]
dns=dnsmasq
se è necessario aggiungerlo, riavviare NetworkManager in questo modo:
sudo systemctl restart NetworkManager
e /etc/resolv.conf
deve essere un collegamento simbolico a /var/run/NetworkManager/resolv.conf
. potrebbe essere fatto così
sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
dns=default
e funziona bene perché ho i nameserver definiti da NetworkManager invece di essere definiti in dnsmasq; questo funziona per me - NM ottiene i nameserver dalle impostazioni effettuate nella configurazione NM di KDE tramite la barra delle applicazioni. Uso l'IP fisso sulla mia rete domestica FWIW.
Secondo il manuale di systemd-resolved , systemd-resolved fornisce servizi di risoluzione dei nomi tramite tre diverse interfacce:
L'API glibc getaddrinfo (3) come definita da RFC3493 e le relative funzioni di risoluzione, incluso gethostbyname (3). Questa API è ampiamente supportata, anche oltre la piattaforma Linux. Nella sua forma attuale, tuttavia, non espone le informazioni sullo stato di convalida DNSSEC ed è solo sincrono. Questa API è supportata dal glibc Name Service Switch (nss (5)). L'utilizzo del modulo NSS di glibc nss-resolve (8) è necessario per consentire alle funzioni di risoluzione NSS di glibc di risolvere i nomi host tramite systemd-resolved.
Sembra che le prime due interfacce non interferiscano con la normale risoluzione DNS e per me è probabile che il problema risieda nella terza.
Nel manuale di nss-resolver :
Per attivare il modulo NSS, aggiungere "resolver" alla riga che inizia con "hosts:" in /etc/nsswitch.conf. In particolare, si consiglia di inserire "risolvi" all'inizio della riga "hosts:" di /etc/nsswitch.conf (ma dopo le voci "files" o "mymachines"), subito prima della voce "dns" se esiste, seguita da "[! UNAVAIL = return]", per garantire che le query DNS siano sempre instradate tramite systemd-resolved (8) se è in esecuzione, ma sono indirizzate a nss-dns se questo servizio non è disponibile
Quindi ciò che è necessario è fare in modo che "dns" preceda "risolvi" in "host:" riga di /etc/nsswitch.conf . E quindi getaddrinfo
dovrebbe semplicemente aderire a /etc/resolv.conf .
Questa soluzione impedisce solo a systemd-resolved di gestire tutte le richieste di risoluzione DNS e non è limitata a un gestore di rete specifico. Inoltre, garantisce che il servizio LLMNR e mDNS funzioni normalmente.
(Non ho familiarità con il funzionamento della risoluzione dei nomi su Linux e non sono sicuro di ciò che ho capito da questi manuali. I motivi indicano che ho sbagliato qualcosa. Grazie :)
Per (X) Ubuntu 18.04 (vedi la mia risposta su stackexchange ).
Eccone una copia (dovrei fare una copia?)
Ecco la soluzione per (X) Ubuntu 18.04 Bionic.
Installa dnsmasq
sudo apt install dnsmasq
Disabilita il listener risolto da systemd sulla porta 53 (non toccare /etc/systemd/resolved.conf, perché potrebbe essere sovrascritto durante l'aggiornamento):
$ cat /etc/systemd/resolved.conf.d/noresolved.conf
[Resolve]
DNSStubListener=no
e riavviarlo
$ sudo systemctl restart systemd-resolved
(in alternativa disabilitarlo completamente entro $ sudo systemctl disable systemd-resolved.service
)
Elimina /etc/resolv.conf e crea di nuovo. Questo è importante, perché resolv.conf è un collegamento simbolico a /run/systemd/resolve/stub-resolv.conf per impostazione predefinita. Se non si eliminerà il collegamento simbolico, il file verrà sovrascritto da systemd al riavvio (anche se abbiamo disabilitato systemd-risolto!). Inoltre NetworkManager (NM) verifica se si tratta di un collegamento simbolico per rilevare la configurazione risolta dal sistema.
$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf
Disabilita la sovrascrittura di /etc/resolv.conf da NM (esiste anche un'opzione rc-manager, ma non funziona, nonostante sia descritta in un manuale):
$ cat /etc/NetworkManager/conf.d/disableresolv.conf
[main]
dns=none
e riavviarlo:
$ sudo systemctl restart NetworkManager
Di 'a dnsmasq di usare resolv.conf da NM:
$ cat /etc/dnsmasq.d/nmresolv.conf
resolv-file=/var/run/NetworkManager/resolv.conf
e riavviarlo:
$ sudo systemctl restart dnsmasq
Utilizzare dnsmasq per la risoluzione:
$ cat /etc/resolv.conf
# Use local dnsmasq for resolving
nameserver 127.0.0.1