Voglio ottenere una rapida risoluzione dns con dnsmasq e mantenere il sistema predefinito risolto.
Alla ricerca di un modo elegante per farlo
Voglio ottenere una rapida risoluzione dns con dnsmasq e mantenere il sistema predefinito risolto.
Alla ricerca di un modo elegante per farlo
Risposte:
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 - 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
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
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
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:
sudo rm /etc/resolv.conf
sudo touch /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
sudo apt-get -y install dnsmasq
# 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
# systemd-resolvd name server
nameserver 127.0.0.53
# docker host ip
nameserver 172.17.0.1
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/
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.
sudo apt-get install dnsmasq
sudo systemctl disabilita systemd-risolto
sudo systemctl stop systemd risolto
Assegna manualmente il tuo indirizzo IP, gateway e assegna l'indirizzo IP alla tua macchina come DNS.
configura /etc/dnsmasq.conf (davvero ... RTFM -> man dnsmasq.conf)
sudo systemctl abilita dnsmasq
sudo systemctl status dnsmasq
punta dhcp sul tuo server dhcp sul tuo nuovo brillante server dnsmasq (..se yumpto)