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)

Другие вопросы по тегам