Come ottenere networkmanager per configurare i server dei nomi specifici del dominio con openresolv + dnsmasq


11

Mi collego spesso a più reti contemporaneamente. Ognuna di queste reti fornisce la configurazione del nameserver tramite dhcp. Ad esempio, Network 1: (eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

Rete 2 (tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

# Nomi cambiati

Quando collegati a entrambe le reti contemporaneamente:

# resolv.conf from NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

La risoluzione di service.company2.corp non funziona perché il primo server dei nomi conosce solo i nomi company1.corp.

Così ispirato da questo articolo , ho installato openresolv (un'implementazione resolvconf) configurando un servizio dnsmasq locale sulla mia installazione di Arch Linux.

Se configuro manualmente i nameserver usando resolvconf:

# resolvconf -d NetworkManager
# echo "domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
" | resolvconf -a eth0
# echo "domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51
" | resolvconf -a tun0

Quindi sono in grado di risolvere i nomi da company1.corp e company2.corp (il server dnsmasq locale gestisce questo.)

Si noti che dopo la configurazione manuale, resolveconf -l mostra le 2 configurazioni separatamente:

~ # resolvconf -l
# resolv.conf from tun0
domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51

# resolv.conf from eth0
domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254

Tuttavia, quando si lascia che Network Manager esegua la configurazione, le 2 configurazioni non sono separate, come sarebbe se Network Manager stesse scrivendo su /etc/resolve.conf

~ # resolvconf -l
# resolv.conf from NetworkManager
# Generated by NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

La mia domanda è: come posso fare in modo che il gestore della rete chiami correttamente resolveconf in modo che i server dei nomi per ciascuna interfaccia siano registrati separatamente. (Sfortunatamente googling per questo è inutile perché google pensa che "resolveconf" == "resol.conf")


2
Su Google, cerca "resolvconf"tra le virgolette. Metti sempre le virgolette intorno ai nomi propri su Google.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


14

NetworkManager ha la funzionalità per gestire un server dnsmasq locale incorporato. Non è necessario utilizzare resolvconf / openresolv per fare ciò.

Per abilitare questo:

  • Disabilitare la configurazione resolvconf / openresolv dnsmasq se è stata precedentemente abilitata e assicurarsi che non vi siano istanze di dnsmasq in esecuzione.
  • Assicurarsi che dnsmasq sia installato
  • Aggiungi dns=dnsmasqa /etc/NetworkManager/NetworkManager.conf.
  • Riavvia NetworkManager

Una volta fatto, vedrai che NetworkManager ha avviato un processo dnsmasq:

$ pgrep dnsmasq -fl
1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec

/etc/resolve.conf dovrebbe puntare all'istanza dnsmasq locale:

$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1

e possiamo vedere quali server sta usando dnsmasq:

# cat /var/run/nm-dns-dnsmasq.conf 
server=/company2.corp/10.102.208.51
server=/10.in-addr.arpa/10.102.208.51
server=192.168.1.244
server=192.168.1.239

davvero bello, grazie! soluzione molto semplice e facile ma purtroppo non ben nota - non ho potuto resistere, scusa
Akostadinov

Questo sembra funzionare quando si combina una connessione locale con una o due VPN. Sembra che non funzioni con due connessioni locali. Attualmente sono connesso alla rete dell'ufficio tramite Ethernet, dove purtroppo la connessione Internet a monte non è riuscita. Inoltre, sono collegato tramite USB Ethernet (il mio telefono) a Internet funzionante. Non riesco a far sì che NetworkManager applichi il nome dominio al server DNS dell'ufficio.
Oskar Berggren,

@OskarBerggren: nella scheda Ethernet dell'ufficio, nella scheda IPv4, selezionare "Usa questa connessione solo per le risorse sulla sua rete".
Gary van der Merwe,

@GaryvanderMerwe È esattamente quello che ho provato, ho dimenticato di scriverlo. Sembra che ci sia una richiesta di bug / funzionalità correlata: bugzilla.gnome.org/show_bug.cgi?id=685962
Oskar Berggren,

Cordiali saluti, non esiste un'opzione da utilizzare, uboundquindi anche DNSSEC funziona, vedi fedoraproject.org/wiki/Networking/NameResolution/DNSSEC
akostadinov

0

Sembra che NetworkManager stia semplicemente sovrascrivendo /etc/resolv.confe non stia usando openresolv. Secondo FS # 24635 , NetworkManager ha il supporto per openreslov, ma inizialmente non era abilitato nella build. Quale versione di Arch Linux stai utilizzando e qual è la versione del pacchetto networkmanager?


networkmanager 0.9.4.0-6 NetworkManager sta chiamando resolveconf e non sta scrivendo su /etc/resolev.conf. Il problema è che NetworkManager sta unendo le informazioni DNS e le sta trasmettendo a resolveconf come un'unica interfaccia e non come informazioni per le interfacce separate.
Gary van der Merwe,

0

Fai come ha risposto Gary van der Merwe, ma dentro

/etc/NetworkManager/NetworkManager.conf

Ho dovuto aggiungere

[main]
dns=dnsmasq

al file. Non solo

dns=dnsmasq

Questo perché tutte le impostazioni in quel file devono trovarsi in una sezione e la mia versione di manjaro (archlinux), versione del pacchetto NetworkManager, non popola il file di configurazione. (Sto assumendo che la distribuzione di Gary faccia perché la sua linea suggerita ha funzionato per lui e per gli altri)

Un'altra nota, qualsiasi configurazione di dnsmasq deve andare in un file di configurazione in questo

/etc/NetworkManager/dnsmasq.d/

directory. Potrebbe essere una directory diversa sul tuo computer. Ho imparato la directory usata guardando la linea che NetworkManager usa per avviare il demone dnsmasq. Puoi vedere questa linea eseguendo ps aux|grep dnsmasq. È necessario attendere per eseguire questo fino a dopo aver modificato la configurazione di NetworkManager e aver riavviato il suo servizio.

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.