Come aggiungere dnsmasq e mantenere systemd risolto (18.04)


10

Voglio ottenere una rapida risoluzione dns con dnsmasq e mantenere il sistema predefinito risolto.

Alla ricerca di un modo elegante per farlo


Ti rendi conto che il sistema risolto memorizza anche nella cache le ricerche DNS? Non è necessario dnsmasq su un sistema con systemd risolto. Dovresti leggere È utile risolvere systemd?
Aeyoun,

Lo so - Ma c'è un 'dettaglio' molto significativo ... di dnsmasq è stato riempito da richieste.
cmak.fr,

La cache non configurata predefinita in systemd-resolved è effettivamente più grande di dnsmasq.
Aeyoun,

In realtà, dnsmasq fa molto di più di un sistema risolto; Vedi gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 e gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh per citarne solo alcuni ...
Julius

@Aeyoun: leggendo il codice sorgente risolto da systemd, puoi vedere che il limite di cache DNS di 4096 è byte, non voci. dnsmasq ha una dimensione cache dns maggiore e configurabile.
cmak.fr,

Risposte:


10

Volevo ottenere una rapida risoluzione dns con dnsmasq e mantenere intatta la configurazione predefinita risolta da systemd / NetworkManager per un uso futuro. Sì, l'enorme cache DNS di dnsmasq può migliorare la velocità di navigazione. Sì, l'obiettivo era mantenere la configurazione DNS predefinita di 18.04

  1. Installa dnmasq
  2. Configuralo (ascolta indirizzo e server dns)
  3. Configurare NetWorkManager per l'indirizzo del server DNS manuale
  4. Verifica verifica

1 - Con sudo

apt-get -y install dnsmasq

2 - Con sudo

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - Con USER, configurare NetworkManager

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - Verifica verifica

  • ascolto risolto da systemd su 127.0.0.53 come dovrebbe per impostazione predefinita
  • dnsmasq ascolta su 127.0.0.1 come impostato in / etc / dnsmasq
  • systemd-resolved ha preso 127.0.0.1 da NetworkManager
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1

1

Ho provato a trovare una soluzione ragionevole e sembra che ci siano approcci diversi.

Volevo rimanere al massimo nel layout di distribuzione mantenendo tutti i requisiti aziendali soddisfatti. Questo è ciò che ho raccolto e testato per funzionare su Ubuntu 18.04 e KDE Neon:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(si noti che l'unica differenza generale con le risposte sopra è che NetworkManager gestisce automaticamente le assegnazioni del server DNS dnsmasq


funziona ma cosa succede quando networkmanager viene aggiornato con apt-get --upgrade
cmak.fr

Ad essere sincero, non lo so. Dipende da cosa decide il manutentore di Ubuntu 18.04. Se mantiene disabilitato il servizio risolto dal sistema e non modificherà NetworkManager.conf (che di default viene risolto in modo interattivo in caso di conflitto), potrebbe sopravvivere fino a Ubuntu 20.04 dove si spera verrà risolto.
Venca B Spam

0

Come sapete, Docker copia il file host /etc/resolv.conf nei contenitori ma rimuove qualsiasi server dei nomi locale.

La mia soluzione a questo problema è continuare a utilizzare systemd-resolvd e NetworkManager ma aggiungere dnsmasq e utilizzarlo per "inoltrare" le query DNS dei contenitori Docker a systemd-resolvd .

Guida passo passo:

  • Rendi /etc/resolv.conf un file "reale" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Creare il file /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf per dire a NetworkManager di informare systemd-resolvd ma di non toccare /etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • Installa dnsmasq sudo apt-get -y install dnsmasq
  • Configurare dnsmasq in /etc/dnsmasq.conf per l'ascolto DNS query Provenendo dalla finestra mobile e l'utilizzo di systemd-resolvd name server # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • Modifica /etc/resolv.conf per utilizzare il nameserver systemd-resolvd (127.0.0.53) e l' IP host (172.17.0.1) nella rete Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Riavvia i servizi sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Per maggiori informazioni vedi il mio post (in spagnolo) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/


-1

Ubuntu 18.10

IMHO, se stai per eseguire dnsmasq, dovresti assegnare staticamente il tuo indirizzo IP invece di ottenerlo da dhcp. In questo modo puoi semplicemente disabilitare systemd risolto tutti insieme.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl disabilita systemd-risolto

  3. sudo systemctl stop systemd risolto

  4. Assegna manualmente il tuo indirizzo IP, gateway e assegna l'indirizzo IP alla tua macchina come DNS.

  5. configura /etc/dnsmasq.conf (davvero ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl abilita dnsmasq

  7. riavvio
  8. sudo systemctl status dnsmasq

  9. punta dhcp sul tuo server dhcp sul tuo nuovo brillante server dnsmasq (..se yumpto)


Non implementerò ciò che hai descritto. Voglio che il sistema predefinito risolto rimanga invariato per un eventuale futuro utilizzo di NetworkManager.
cmak.fr,
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.