Estou me deparando com um problema estranho. Para o registro, estou usando o Ubuntu 17.10.
Estou tentando configurar um TLD personalizado, chame-o de .mytld, para resolver para 127.0.0.1, para que possa hospedar sites locais sem a necessidade de atualizar /etc/hosts
.
Nesta máquina, as interfaces de rede são gerenciadas pelo NetworkManager, que não possui uma linha dns=dnsmasq
na seção [main]
de /etc/NetworkManager/NetworkManager.conf
.
Eu instalei o dnsmasq e confirmei que ele está sendo executado.
Eu editei /etc/dnsmasq.conf
e adicionei:
listen-address=127.0.0.1
Eu criei /etc/dnsmasq.d/mytld.conf
e adicionei:
address=/.mytld/127.0.0.1
E eu editei /etc/dhcp/dhclient.conf
e adicionei:
prepend domain-name-servers 127.0.0.1;
Depois de reiniciar NetworkManager
e dnsmasq
e executar manualmente dhclient
, confirmei que 127.0.0.1
foi prefixado como um servidor DNS (10.0.0.1 é minha máquina de gateway):
$ nmcli
[ ... ]
DNS configuration:
servers: 127.0.0.1 10.0.0.1
[snip]
Como o NetworkManager está gerenciando a rede, /etc/resolv.conf
contém o servidor stub do NM:
$ cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# 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.53
$ systemd-resolve --status
[...]
Link 2 (eno1)
[...]
DNS Servers: 127.0.0.1
10.0.0.1
[snip]
Depois de tudo isso, quando faço ping em um host.mytld arbitrário, recebo uma boa resposta:
$ ping -c 1 test.mytld
PING test.mytld (127.0.0.1) 56(84) bytes of data.
64 bytes of data from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026 ms
[ snip ]
$ dig A test.mytld
[ ... ]
;; ANSWER SECTION:
test.mytld. 0 IN A 127.0.0.1
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
[snip]
Então, funciona - por um tempo.
Após alguns minutos de operação normal, as coisas começam a ir para o sul.
systemd-resolved
é indexado em 100% da CPU e dnsmasq
está em torno de 50% da CPU. (Eu tenho uma CPU de 6 núcleos de 12 linhas).
Amostra de top
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20659 systemd+ 20 0 66368 6448 5272 R 98.7 0.0 27:31.57 systemd-resolve
13834 dnsmasq 20 0 64516 2840 2424 R 59.3 0.0 35:50.65 dnsmasq
Enquanto isso ocorre, *.mytld
ainda resolve para 127.0.0.1. Então, depois de um tempo (pode levar dezenas de minutos), o que quer que esteja acontecendo com systemd-resolved
e dnsmasq
resolve-se - ambos os processos ainda estão em execução, com os mesmos PIDs.
Mas a resposta dada pelo NetworkManager não funciona mais:
$ ping -c 1 test.mytld
PING test.mytld (198.105.244.228) 56(84) bytes of data.
--- test.mytld ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
$ dig A test.mytld
;; ANSWER SECTION:
test.mytld. 10 IN A 198.105.244.228
test.mytld. 10 IN A 198.105.244.228
;; Query time: 31 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
No entanto, estranhamente, tanto nmcli
como systemd-resolve --status
ainda relatam os servidores de nomes como 127.0.0.1
e 10.0.0.1
, nessa ordem.
Neste ponto, preciso executar dhclient
novamente para que as coisas funcionem novamente:
$ sudo dhclient
RTNETLINK answers: File exists
$ ping -c 1 test.mytld
PING test.mytld (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.129 ms
--- test.mytld ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.129/0.129/0.129/0.000 ms
E, em seguida, o ciclo se repete: depois de um tempo, systemd-resolved
e dnsmasq
começam a sair; então eles se recuperam, mas a resolução falha.