Como adicionar dnsmasq e manter systemd-resolved (18.04)

10

Quero obter uma rápida resolução de DNS com o dnsmasq e manter o padrão systemd-resolvido.

Procurando uma maneira elegante de fazer isso

cmak.fr
fonte
Você percebe que o resolvido pelo sistema também armazena em cache as pesquisas de DNS? Você não precisa do dnsmasq em um sistema com systemd-resolved. Você deve ler A resolução do sistema é útil?
Aeyoun 17/01/19
Eu sei - Mas há um 'detalhe' muito significativo ... - dnsmasq como um enorme cache de DNS - O cache de DNS do systemd-resolved é muito menor e não pode ser ajustado - A velocidade de resolução do DNS se torna altamente aprimorada conforme o enorme cache do dnsmasq foi preenchido por solicitações.
Cmak.fr 18/01/19
O cache não configurado padrão no systemd-resolved é realmente maior que o dnsmasq.
Aeyoun
Na verdade, o dnsmasq faz muito mais do que o resolvido pelo sistema; Veja gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 e gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh para citar apenas alguns exemplos .
Julius
@ Aeyoun: lendo o código-fonte resolvido pelo systemd, você pode ver que o limite de cache do DNS de 4096 é bytes, não entradas. O dnsmasq possui um tamanho de cache dns maior e configurável.
Cmak.fr 02/02/19

Respostas:

10

Eu queria obter uma rápida resolução de DNS com o dnsmasq e manter intacta a configuração padrão do systemd-resolved / NetworkManager para uso futuro. Sim, o enorme cache de DNS do dnsmasq pode melhorar a velocidade de navegação. Sim, o objetivo era manter a configuração padrão de DNS de 18.04

  1. Instale o dnmasq
  2. Configure-o (endereço de escuta e servidores DNS)
  3. Configurar o NetWorkManager para o endereço manual do servidor DNS
  4. Marque Verificar

1 - Com sudo

apt-get -y install dnsmasq

2 - Com 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 - Com USER, configure o 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 - Verifique verificar

  • escuta resolvida pelo systemd em 127.0.0.53 como deveria por padrão
  • O dnsmasq escuta em 127.0.0.1 conforme definido em / etc / dnsmasq
  • systemd-resolved pegou 127.0.0.1 do 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
cmak.fr
fonte
1

Tentei encontrar uma solução razoável e parece que existem abordagens diferentes.

Eu queria permanecer no máximo dentro do layout de distribuição, mantendo todos os requisitos de negócios atendidos. Foi o que eu colecionei e testei para trabalhar com o limpo Ubuntu 18.04 e o 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

(observe que a única diferença geral com as respostas acima é que o NetworkManager lida com as atribuições do servidor DNS dnsmasq automaticamente

Venca B Spam
fonte
funciona, mas o que acontecerá quando o NetworkManager é atualizado com o apt-get --upgrade
cmak.fr
Para ser sincero, não sei. Depende do que o mantenedor do Ubuntu 18.04 decidir. Se ele / ela mantiver o serviço resolvido pelo sistema desativado e não modificar o NetworkManager.conf (que por padrão é resolvido interativamente em caso de conflito), ele poderá sobreviver até o Ubuntu 20.04, onde esperamos que seja corrigido.
Venca B Spam 02/11/19
0

Como você sabe, o Docker copia o arquivo host /etc/resolv.conf para contêineres, mas remove qualquer servidor de nomes local.

Minha solução para esse problema é continuar usando systemd-resolvd e NetworkManager, mas adicione o dnsmasq e use-o para "encaminhar" as consultas DNS dos contêineres do Docker para systemd-resolvd .

Guia passo a passo:

  • Torne o /etc/resolv.conf um arquivo "real" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Crie o arquivo /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf para informar ao NetworkManager que informe o systemd-resolvd, mas não toque em /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
  • Instale o dnsmasq sudo apt-get -y install dnsmasq
  • Configure o dnsmasq no /etc/dnsmasq.conf para ouvir consultas DNS vindas do Docker e usar o servidor de nomes systemd-resolvd # 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
  • Edite o /etc/resolv.conf para usar o servidor de nomes systemd-resolvd (127.0.0.53) e o IP do host (172.17.0.1) na rede do Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Reiniciar serviços sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Para mais informações, consulte o meu post (em espanhol) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

rubensa
fonte
-1

Ubuntu 18.10

IMHO, se você estiver executando o dnsmasq, deve atribuir estaticamente o seu endereço IP em vez de obtê-lo no dhcp. Dessa forma, você pode simplesmente desativar o systemd-resolved todos juntos.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl desativar systemd-resolved

  3. sudo systemctl para systemd-resolved

  4. Atribua manualmente seu endereço IP, gateway e o endereço IP à sua máquina como DNS.

  5. configure /etc/dnsmasq.conf (realmente ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl enable dnsmasq

  7. reiniciar
  8. sudo systemctl status dnsmasq

  9. aponte o dhcp no servidor dhcp para o novo e brilhante servidor dnsmasq (..se yumpto)

Linguiça de fígado
fonte
Não implementarei o que você descreveu. Quero que o padrão resolvido pelo sistema permaneça intocado para eventual uso futuro do NetworkManager.
Cmak.fr 25/10/19