Utilizzo di dnsmasq con NetworkManager


15

Era noto che NetworkManager non funzionava bene con dnsmasq(rif: qui ). Ho sfogliato la lunga discussione qui, ma non sono ancora sicuro di quale sia il modo raccomandato per affrontare la situazione.

Tutto quello che voglio fare è utilizzare dnsmasqper fornire DNS e DHCP alla mia rete locale. Quale sarebbe il modo raccomandato in questo caso?

Sembra che il problema rimanga anche per Ubuntu 14.04, anche il bug viene dichiarato risolto.

Mentre si aggira, le persone disabilitano la schiavitù NM dnsmasq-baseperché i seguenti motivi:

NM-enslaved dnsmasqutilizza opzioni hardcoded (in C) che forniscono funzionalità estremamente limitate.

  • Non ascolta su ethX ( --listen-address=127.0.0.1). Quindi non possiamo usare i nostri server come server DNS per i nostri PC di rete locali, cioè è completamente inutile per le LAN.
  • Non memorizza nella cache le richieste ( --cache-size=0). Nessuna memorizzazione nella cache ==> nessuna velocità di query DNS. Anche questo è molto significativo per le LAN in quanto vi sono molti utenti simultanei.
  • Infine, abbiamo anche bisogno della funzionalità DHCP e TFTP di dnsmasq, quindi anche se NM + dnsmasq includesse un vero server DNS, dovremmo eseguire un altro dnsmasq

Ma non sono sicuro che siano ancora validi e / o in che modo la correzione ha risolto i problemi. Inoltre, nessuno di loro è molto chiaro esattamente cosa hanno fatto e come hanno fatto per risolvere il loro problema. Cioè, la parte della soluzione manca dalla lunga discussione . Qualcuno può riempire gli spazi vuoti per favore? Vale a dire,

L' dnsmasqutility fornita da Ubuntu non funziona, sul lato server, per i motivi sopra indicati. Inoltre, sul lato client, "il dnsmasq installato su quei laptop Ubuntu non può eseguire query DNS LAN dal mio server DNS" , perché "il NetworkManager (laptop Ubuntu") sta causando una strana impostazione del nameserver 127.0.1.1 " ( ref: soluzione DNS per LAN o rete domestica locale )

Come fare in modo che dnsmasq funzioni senza problemi con NetworkManager, in modo da fornire DNS e DHCP (e TFTP) alla mia rete locale, sia sul lato server che sul lato client?

TL'dr

per chi cerca la risposta. Di tutte le risposte di seguito, ho scoperto che la soluzione più semplice è @ brad's, per il lato server (ancora nessuna buona risposta per il lato client):

l'unica soluzione al problema è disabilitare il dnsmasq del drive NM ... e installare il dnsmasq "standard" e quindi configurarlo tramite il suo /etc/dnsmasq.conffile di configurazione standard .


2
Solo per i googler (come me): nelle nuove versioni di Ubuntu dnsmasq-core all'interno di NetworkManager è un po 'più amichevole. Vedi qui: askubuntu.com/questions/233195/…
A. Rabus,

Risposte:


3

Ho anche i tuoi problemi.

In linea di principio, dopo wiki.archlinux , sembra che per abilitare la memorizzazione nella cache dovrebbe essere sufficiente creare un file /etc/NetworkManager/dnsmasq.d/cachecontenente semplicemente

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

Ho provato questo ma, dopo il riavvio di NM, non ho ancora la cache:

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

Si noti che il file conf citato è sempre vuoto: non sono stato in grado di configurare alcuna opzione usando questa procedura.

Tutto sommato, sembra che la maschera di dnsmask asservita da NM nel 14.04 (che è fornita dal pacchetto dnsmasq-base) sia completamente bloccata, quindi non è possibile abilitare la memorizzazione nella cache, né altro (dhcp, tftp).

Se è giusto, penso che, come dici tu, l'unica soluzione al problema sia disabilitare il dnsmasq del drive NM commentando la riga

dns=dnsmasq

nel file /etc/NetworkManager/NetworkManager.confe installare il dnsmasq "standard" e quindi configurarlo tramite il suo /etc/dnsmasq.conffile di configurazione standard .


Benvenuto in superutente Brad! Grazie per l'aiuto!
xpt,

1
In realtà questo abilita la cache, poiché è in esecuzione con --conf-dir=/etc/NetworkManager/dnsmasq.d, cache-sizeviene utilizzato il file specificato nel file creato. Puoi vedere la differenza usandodig
sirfz il

6

È possibile ignorare le impostazioni inserendole /etc/NetworkManager/dnsmasq.d/*.conf. Le impostazioni del file di configurazione hanno la precedenza sui flag della riga di comando. Vengono applicati quando NetworkManager avvia dnsmasq. Corri sudo service network-manager restartper riapplicare. (Se c'è qualche dubbio: la risposta di Brad ha mancato il fatto che ps ax | grep dnsmostra un --conf-dirargomento)

Per esempio:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Come ricordo, NetworkManager disabilita la memorizzazione nella cache di dnsmasq per impostazione predefinita a causa di preoccupazioni relative all'avvelenamento della cache. Per una macchina in cui tutti gli utenti sono fidati, potrebbe non essere un problema.

NetworkManager non si integra con resolvconfe il server NM at 127.0.1.1non verrà utilizzato localmente se è installato il pacchetto resolvconf. resolvconf fa parte delle installazioni Debian ubuntu-minimal e standard; NetworkManager reimplementa tale funzionalità in modo più integrato e meno basato su script.

NetworkManager non fare attenzione a non interferire con un'istanza di dnsmasq globale (legandosi ad un loopback secondaria IP e l'impostazione bind-interfacesattraverso /etc/dnsmasq.d/network-manager). Se installi un'istanza globale dnsmasq e mantieni l'istanza di NM, ricontrolla /etc/resolv.confper vedere quale verrà utilizzato dall'host per impostazione predefinita.

Sebbene sia possibile personalizzare l'istanza dnsmasq di NetworkManager come mostrato sopra, se si desidera un server DNS che si collega a interfacce pubbliche, è necessario installare il dnsmasqpacchetto (utilizza solo NetworkManager dnsmasq-base, che non configura un'istanza globale) e inserire la configurazione /etc/dnsmasq.d/*.conf. L'istanza slave di NetworkManager è destinata unicamente a collegarsi all'interfaccia di loopback e la sua configurazione oltre tale ambito rischierebbe di romperla.


In breve, per qualcuno che vuole solo la cache DNS locale:

sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Per una semplice LAN, la condivisione della connessione di NetworkManager dovrebbe ancora essere sufficiente. Ma per una LAN configurata su misura, con TFTP e così via:

sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart

Grazie. Anche se dovresti descrivere in modo più completo cosa fanno i tuoi comandi "in sintesi", vale a dire le istruzioni rimuovono anche 4 pacchetti se li hai attualmente Più collegamenti e discussioni su reddit.com/r/Ubuntu/comments/2j0va4/…
nealmcb

Abbastanza d'accordo con @nealmcb, obTobu, spiega perché "per qualcuno che vuole solo la cache DNS locale" , è necessario rimuovere il dnsmasqpacchetto. allora a che echoserve il prossimo comando? dal momento che la dnsmasqvolontà se ne sarà andata.
XXpt,

@xpt Tobu suggerisce di rimuovere dnsmasq, ma dovresti comunque averlo dnsmasq-baseinstallato a causa di NM.
Thalis Kalfigkopoulos,

0

Volevo assegnare un determinato MAC a un determinato indirizzo IP e, ai fini della stabilità, attenermi il più possibile al Network Manager / dnsmasq predefinito.

https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c ha il commento sull'uso di --conf-file per ignorare le configurazioni, ma più avanti nel file abbiamo

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

Sotto Ubuntu 16.04 LTS, dopo aver impostato un hot spot Wi-Fi e aver condiviso un'altra connessione, ps auxgww | grep dnsmasqmostra che l'ultimo argomento della riga di comando di ciascuno dei processi dnsmasq è:

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

Pertanto, è possibile creare file di configurazione in quella directory condivisi tra tutte le invocazioni di dnsmasq avviate da Network Manager.

Ho creato /etc/NetworkManager/dnsmasq-shared.d/Hue

dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221

e riavviato, sebbene in esecuzione

sudo service network-manager restart

avrebbe funzionato.

Ciò ha portato il mio dispositivo a ottenere l'indirizzo IP appropriato.

Sì, questo è sbagliato perché significa che tutte le invocazioni di dnsmasq da parte di NetworkManager riceveranno questa dichiarazione, ma in questo caso, è innocuo perché è importante solo se il MAC si presenta sulla rete in questione. Se la rete non è 192.168.1, allora ci saranno problemi.

Questo è più efficace della sostituzione di / usr / sbin / dnsmasq con uno script, come proposto su https://gist.github.com/magnetikonline/6236150

La soluzione giusta sarebbe quella di modificare il modo in cui viene invocato dnsmasq per utilizzare correttamente i file di configurazione di dnsmasq. Capisco il desiderio di avere Network Manager "solo funzionante", ma creare strumenti a prova di idiota significa che solo gli idioti possono usarli.


grazie per la risposta Christopher, tuttavia, non sono davvero in grado di seguire ... "Volevo assegnare un determinato MAC a un determinato indirizzo IP e ai fini della stabilità" ... "ps auxgww | grep dnsmasq mostra che l'ultimo argomento della riga di comando di ciascuno dei processi dnsmasq " ... " Ho creato ... avrebbe funzionato " ... " Sì, è sbagliato " ... Cioè, non riesco davvero a seguire il tuo flusso di pensieri , per dare un senso a ciò che stai cercando di dire qui.
xpt,

0

La mia soluzione potrebbe interrompere Network Manager e mantenere tutto il modo semplice di fare le cose. Con il modo rotto di NM di gestire dnsmasq, lo sostituisco semplicemente con il mio metodo di seguito.

Una soluzione alternativa al problema era semplicemente fare quanto segue:

sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

Modifica il ~/dnsmasq.conffile nella tua directory utente come vuoi che sia e salvalo.

sudo rm -v /etc/dnsmasq.conf
sudo cp -v ~/dnsmasq.conf /etc/
sudo chattr +i /etc/dnsmasq.conf
sudo systemctl restart dnsmasq.service

Ho creato un semplice alias bash e l'ho messo in fondo al mio file ~ / .bash_aliases per facilitare la modifica del file dnsmasq.conf. Ecco l'alias:

alias="sudo chattr -i /etc/dnsmasq.conf && sudo nano -w /etc/dnsmasq.conf && sudo chattr +i /etc/dnsmasq.conf && sudo systemctl restart dnsmasq.service"

Ovviamente, puoi scegliere qualsiasi editor a tuo piacimento per il secondo comando sudo nell'alias, ma ho usato nano lì per facilità per tutti. Salvare il file, chiudere e riaprire la scheda / finestra del terminale di comando. Ciò dovrebbe consentire all'alias di essere disponibile per le schede / finestre dei terminali appena aperte.

Esegui semplicemente eddmcdal tuo account utente e ti chiederà la password per eseguire i comandi elevati.

Si noti che ho sempre chattr +iil file. In questo modo Network Manager non sovrascriverà la propria configurazione.

Sulle connessioni Ethernet cablate non dovrebbero esserci problemi. Ho scoperto da quando utilizzo dnsmasq per la memorizzazione nella cache DNS su laptop con wireless che devo riavviare manualmente il servizio dnsmasq.s dopo essermi connesso a un punto di accesso. Penso che Network Manager possa eseguire attività come il riavvio dei servizi durante la connessione, ma non l'ho ancora esaminato.


0

Nonostante le affermazioni contrarie qui e altrove, NetworkManager ignora completamente tutti i file di configurazione di dmsmasq, anche quelli nella propria directory /etc/NetworkManager/dnsmasq-shared.d. La prova è nel codice sorgente di NetworkManager ... Ecco il commento pertinente:

/ * dnsmasq può leggere dal percorso del file di configurazione predefinito, che se tale percorso è un file di configurazione valido, si combinerà con le opzioni qui e causerà effetti collaterali indesiderati. Come inviare indirizzi IP fasulli come gateway o altro. Quindi dì a dnsmasq di non usare alcun file di configurazione. * /

Ecco il link al codice sorgente pertinente (righe 139-144).


2
Un link per puntare al codice sorgente in modo che i lettori possano validarlo e leggere il codice associato sarebbe utile se possibile.
Jamesc

1
Quindi sì, non è possibile specificare un file di configurazione esplicito. --conf-file è codificato su / dev / null. Tuttavia, se si osserva l'intera riga di comando utilizzata per avviare dnsmasq tramite NetworkManager si vede che viene utilizzato conf-dir: '/ usr / sbin / dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file = / var / run / NetworkManager / dnsmasq.pid --listen-address = 127.0.0.1 --cache-size = 400 --clear-on-reload --conf-file = / dev / null --proxy-dnssec --enable-dbus = org.freedesktop.NetworkManager.dnsmasq --conf-dir = / etc / NetworkManager / dnsmasq.d ', il che significa che tutti i file nella directory data vengono letti.
Hardy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.