systemd-resolve не пересылает DNS-запросы на указанный DNS-сервер
Кто-нибудь знает, как работает systemd-resolve voodo?
192.168.1.30
- правильный DNS-сервер для моей сети, возвращенный DHCP.
/etc/resolv.conf
указывает на 127.0.0.53
Systemd утверждает, что использует правильный сервер.
systemd-resolve --status | grep "DNS Servers"
192.168.1.30
Но копать указывает, что это не пересылка запросов. Если я укажу сервер, я могу разрешить shadowbox
dig @192.168.1.30 shadowbox
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.30 shadowbox
...
;; ANSWER SECTION:
shadowbox. 60 IN A 192.168.1.34
...
systemd-resolve не может
dig @127.0.0.53 shadowbox
; <<>> DiG 9.16.1-Ubuntu <<>> @127.0.0.53 shadowbox
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 60161
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;shadowbox. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Jun 07 14:00:12 CEST 2020
;; MSG SIZE rcvd: 38
Я пробовал отскакивать от сервера, нервничать и настраивать сервер вручную
systemd-resolve --flush-caches
systemd-resolve --set-dns=192.168.1.30 --interface=enp0s31f6
Я могу chattr +i /etc/resolv.conf
чтобы восстановить контроль над DNS, но было бы неплохо узнать, почему systemd не работает, поскольку я теряю преимущества DHCP.
3 ответа
Похоже, это задумано. Поттеринг закрыл проблему https://github.com/systemd/systemd/issues/2514 обычным исправлением.
dig @127.0.0.53 shadowbox
systemd-resolved
не поддерживает простые имена через DNS, только fqdn, и игнорирует директиву поиска.
Как намекнул @teknopaul (9 июня 2020 г., 16:55), это связано с разрешением, а не разрешением доменных имен с одной меткой по умолчанию. Я решил эту же проблему, создав файл
[Resolve]
ResolveUnicastSingleLabel=yes
Тогда однометочное разрешение работает с заглушкой-резольвером.
PS: До внесения этого изменения у резолвера-заглушки не было проблем с разрешением большинства имен с одной меткой в моей локальной сети, что очень усложняло определение этой проблемы.
Чтобы добавить конкретный апстрим:
добавить восходящий DNS в /etc/systemd/resolved.conf
[Resolve] DNS=192.168.1.123
начать сначала
service systemd-resolved restart
проверить с
systemd-resolve --status
Глобальные DNS-серверы: 192.168.1.123
Чтобы использовать DNS-сервер, предоставленный DHCP (поскольку вы заявили в комментариях, что хотите, чтобы он "вел себя как обычно"):
В файле конфигурации для локального сетевого интерфейса (файл, соответствующий шаблону имени /etc/systemd/network/*.network) либо укажите, чтобы получить адрес локального DNS-сервера от DHCP-сервера, используяDHCP=
вариант:
[Network]
DHCP=yes
Также убедитесь, что resolvconf не мешает:
systemd-resolved сразу же работает с сетевым менеджером, использующим /etc/resolv.conf. Никакой особой настройки не требуется, поскольку systemd-resolved будет обнаружен по символической ссылке /etc/resolv.conf. Это будет в случае с systemd-networkd или NetworkManager.
Однако, если клиенты DHCP и VPN используют программу resolvconf для установки серверов имен и поисковых доменов (см. Openresolv#Users для списка программного обеспечения, использующего resolvconf), дополнительный пакет systemd-resolvconf необходим для предоставления /usr/bin/resolvconf символическая ссылка. Примечание: systemd-resolved имеет ограниченный интерфейс resolvconf и может не работать со всеми клиентами, см. Resolvectl(1) для получения дополнительной информации. (из Archwiki)