dnsmasq para resolução local funciona após a execução do dhclient e, em seguida, pára de funcionar após alguns minutos

4

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.

    
por momotaro 03.11.2017 / 03:10

0 respostas