У меня странная проблема. Для записи я использую Ubuntu 17.10.
Я пытаюсь настроить пользовательский TLD, назовите его .mytld, чтобы разрешить 127.0.0.1, чтобы я мог размещать локальные веб-сайты без необходимости обновления /etc/hosts.
На этом компьютере сетевые интерфейсы управляются NetworkManager, который не имеет строки dns=dnsmasq в секции [main] в /etc/NetworkManager/NetworkManager.conf.
Я установил
Я отредактировал /etc/dnsmasq.conf и добавил:
listen-address=127.0.0.1
Я создал /etc/dnsmasq.d/mytld.conf и добавил:
address=/.mytld/127.0.0.1
И я отредактировал /etc/dhcp/dhclient.conf и добавил:
prepend domain-name-servers 127.0.0.1;
После перезапуска NetworkManager и dnsmasq и выполнения dhclient вручную я подтвердил, что 127.0.0.1 был добавлен как DNS-сервер (10.0. 0.1 является моей шлюзовой машиной):
$ nmcli
[ ... ]
DNS configuration:
servers: 127.0.0.1 10.0.0.1
[snip]
Поскольку NetworkManager управляет сетью, /etc/resolv.conf содержит сервер-заглушку 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]
После всего этого, когда я пинг произвольный host.mytld, я получаю хороший ответ:
$ 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]
Итак, он работает - на некоторое время.
После нескольких минут нормальной работы вещи начинают двигаться на юг. systemd-resolved получает привязку на 100% CPU, а dnsmasq - около 50% CPU. (Я имею 6-ядерный процессор с 12 потоками).
Образец из 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
Пока это продолжается, *.mytld по-прежнему разрешается до 127.0 .0.1. Затем через какое-то время (может занять несколько десятков минут) все, что происходит с systemd-resolved и dnsmasq, разрешает себя - оба процесса все еще работают с одинаковыми PID.
Но ответ NetworkManager больше не работает:
$ 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)
Однако, как ни странно, оба nmcli и systemd-resolve --status все еще сообщают серверам имен как 127.0.0.1 и 10.0.0.1 в этом порядке.
В этот момент мне нужно снова запустить dhclient, чтобы снова заставить работать:
$ 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
И затем цикл повторяется: через некоторое время systemd-resolved и dnsmasq начинают парирование вне; то они восстанавливаются, но разрешение не выполняется.