Problema:
Executando o Ubuntu 17.10
Estou tentando resolver (hehe) esse problema há cerca de uma semana e, apesar de inúmeras pesquisas no Google e cerca de 20 tentativas diferentes, não consigo impedir que o dnsmasq faça com que minha CPU pique periodicamente por cerca de um minuto com os seguintes infratores:
systemd-resolved
systemd-journald
dnsmasq
Monitoramento journalctl -f
, vejo isso toda vez que isso acontece:
número máximo de consultas DNS simultâneas atingido (150)
Acompanhado/precedido por um loop maluco de solicitações para algum domínio (geralmente verificação de conexão ubuntu) como o seguinte:
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.1.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
Descobri que mudar meu /etc/resolv.conf para uso nameserver 127.0.0.53
faz com que o pico se dissipe quase instantaneamente.
No entanto, como esse arquivo é atualizado regularmente pelo Network Manager, tenho que fazer isso uma vez por hora.
Configuração:
/etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 127.0.0.1
search fios-router.home
/etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
/etc/dnsmasq.conf
// All default except this at the very end for my wildcard DNS
address=/asmar.d/127.0.0.1
/run/dnsmasq/resolv.conf
nameserver 127.0.0.53
/run/resolvconf/interfaces:
lo.dnsmasq
:
nameserver 127.0.0.1
systemd-resolved
:
nameserver 127.0.0.53
/etc/resolvconf/interface-order:
# interface-order(5)
lo.inet6
lo.inet
lo.@(dnsmasq|pdnsd)
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
hso*
em+([0-9])?(_+([0-9]))*
p+([0-9])p+([0-9])?(_+([0-9]))*
@(br|eth)*([^.]).inet6
@(br|eth)*([^.]).ip6.@(dhclient|dhcpcd|pump|udhcpc)
@(br|eth)*([^.]).inet
@(br|eth)*([^.]).@(dhclient|dhcpcd|pump|udhcpc)
@(br|eth)*
@(ath|wifi|wlan)*([^.]).inet6
@(ath|wifi|wlan)*([^.]).ip6.@(dhclient|dhcpcd|pump|udhcpc)
@(ath|wifi|wlan)*([^.]).inet
@(ath|wifi|wlan)*([^.]).@(dhclient|dhcpcd|pump|udhcpc)
@(ath|wifi|wlan)*
ppp*
*
systemd-resolve --status
:
Global
DNS Servers: 127.0.0.1
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 5 (br-b1f5461ac410)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 4 (docker0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 3 (wlp62s0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 2 (enp61s0)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 8.8.8.8
8.8.4.4
::1
Perguntas:
Como posso resolver esse problema enquanto ainda uso meu nome de domínio curinga?
Opcional : como posso conseguir isso usando o DNS do Google?
Por favor, não recomende o aumento das consultas de DNS simultâneas. Isso não é uma solução.
Parece que você pode ter
dnsmasq
processo em 127.0.0.1 esystemd-resolved
processo em 127.0.0.53 passando consultas entre si, causando um loop. Mesmodnsmasq
sozinho pode ser capaz de fazer um loop, pois, por padrão, ele procura/etc/resolv.conf
encontrar os servidores DNS reais a serem usados para os nomes para os quais não possui informações.Sua configuração de DNS provavelmente tem muitas camadas:
NetworkManager
, que pode ser configurado para substituir as informações e usardnsmasq
, mas atualmente não está configurado dessa forma.NetworkManager
está configurado para usar aresolvconf
ferramenta para atualizar o arquivo/etc/resolv.conf
. Ednsmasq
pode incluir uma configuração drop-in pararesolvconf
substituir quaisquer serviços DNS recebidos pelo DHCP e usar 127.0.0.1 enquantodnsmasq
estiver em execução.resolvconf
, mas aparentemente está sendo substituída pordnsmasq
.O que ainda não entendo é de onde vêm o 127.0.1.1 e o 127.0.0.53. Eles talvez sejam mencionados na
dnsmasq
configuração padrão do Ubuntu?Como diz no comentário de
/etc/resolv.conf
, execute este comando para ver mais informações sobresystemd-resolved
configuração:Verifique também o conteúdo do
/run/resolvconf/interface/
diretório: é onde aresolvconf
ferramenta coleta todas as informações do servidor DNS que obtém de várias fontes. O/etc/resolvconf/interface-order
irá determinar a ordem em que cada fonte é verificada, até que um endereço de loopback seja encontrado ou 3 servidores DNS tenham sido listados de verdade/etc/resolv.conf
.Já que você está usando
dnsmasq
para configurar um domínio curinga, você vai querer manter127.0.0.1
em seu/etc/resolv.conf
- mas você vai querer configurardnsmasq
para não usar esse arquivo, mas obter os servidores DNS que ele deve usar de outro lugar.Se
/run/NetworkManager/resolv.conf
contém os servidores DNS que você obtém do seu ISP por DHCP, você pode facilmente usá-lodnsmasq
adicionando esta linha à sua configuração:Isso informa
dnsmasq
onde obter informações de DNS para as coisas que ainda não conhece. Portanto, se você quiser usar o DNS do Google, poderá configurardnsmasq
come coloque as linhas de configuração de DNS do DNS do Google no formato usual para
/etc/google-dns-resolv.conf
.Corrigido minha corrida dnsmasq systemd-resolve com configuração dnsmasq.
/etc/dnsmasq.d/myconfig
No Ubuntu 18.04
1 - Crie /etc/google-dns-resolv.conf
2 - Crie um arquivo de configuração /etc/dnsmasq.d/my_dnsmaq.conf
3 - Insira no final de /etc/default/dnsmasq
4 - Por fim, reinicie seu serviço dnsmasq
sudo service dnsmasq restart
Eu usei a resposta de Johny acima, mas faltava a etapa nº 3 da minha resposta para que meu arquivo de configuração dnsmasq fosse lido corretamente. Obrigado
Solução:
Criado
/etc/google-dns-resolv.conf
com o conteúdo:Adicionado
resolv-file=/etc/google-dns-resolv.conf
a /etc/dnsmasq.conf