error from systemd-resolved ipv6 reverse DNS lookup causes wrong hostname to get set
EDIT: see updated analysis in #833 (comment 1121473)
NetworkManager-1.32.12-1.fc36.x86_64
, systemd-249.4-2.fc36.x86_64
In !877 (merged) (which fixed #601 (closed)) we started considering systemd-resolved when trying to set the hostname via reverse DNS queries. When systemd-resolved
is being used we now do the following:
- Make a smart query (DBUS) to
systemd-resolved
(limiting answers to non-synthetic ones)- If there is an error, we'll fallback to non systemd-resolved dns resolution
I'm hitting an issue where NetworkManager gets an error back from the DBUS call that it's not currently handling properly:
Oct 27 14:38:55 localhost NetworkManager[804]: <debug> [1635345535.0918] resolve-addr[1ebbe19619fd7125,fe80::bb2d:6877:8d22:3b80]: error resolving via systemd-resolved: GDBus.Error:org.freedesktop.resolve1.NoNameServers: No appropriate name servers or networks for name found
Since NetworkManager isn't special casing that error it then falls back to using the nm-daemon-helper
for reverse DNS and in this case it gets an answer because my system uses the systemd-resolved
stub resolver (i.e. nameserver 127.0.0.53
in /etc/resolv.conf
), but it's the wrong answer because systemd-resolved
will always give a synthetic answer if there is no external answer to a reverse DNS query.
This error is happening because we are racing. NetworkManager tells systemd-resolved
the DNS servers, and systemd-resolved
configures itself from that information, but before systemd-resolved
can get configured we've already fired off a few queries via DBUS.
[core@linux ~]$ sudo journalctl -b0 | grep systemd-resolved
Oct 27 14:38:54 localhost systemd-resolved[797]: Positive Trust Anchors:
Oct 27 14:38:54 localhost systemd-resolved[797]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
Oct 27 14:38:54 localhost systemd-resolved[797]: Negative trust anchors: home.arpa 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa 168.192.in-addr.arpa d.f.ip6.arpa corp home internal intranet lan local private test
Oct 27 14:38:54 localhost systemd-resolved[797]: Defaulting to hostname 'linux'.
Oct 27 14:38:54 localhost audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=systemd-resolved comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Oct 27 14:38:54 localhost NetworkManager[804]: <info> [1635345534.6550] dns-mgr[0x559db48ce250]: init: dns=systemd-resolved rc-manager=unmanaged (auto), plugin=systemd-resolved
Oct 27 14:38:54 localhost NetworkManager[804]: <trace> [1635345534.7387] dns-sd-resolved[7f89715e8091a4db]: D-Bus name for systemd-resolved has owner :1.4
Oct 27 14:38:54 localhost NetworkManager[804]: <debug> [1635345534.7883] resolve-addr[a2db4af5bcf5c00a,192.168.122.207]: start lookup via systemd-resolved
Oct 27 14:38:54 localhost NetworkManager[804]: <debug> [1635345534.7885] dns-mgr: update-dns: updating plugin systemd-resolved
Oct 27 14:38:54 localhost NetworkManager[804]: <debug> [1635345534.7890] resolve-addr[a2db4af5bcf5c00a,192.168.122.207]: start lookup via systemd-resolved
Oct 27 14:38:54 localhost systemd-resolved[797]: enp1s0: Bus client set default route setting: yes
Oct 27 14:38:54 localhost systemd-resolved[797]: enp1s0: Bus client set DNS server list to: 192.168.122.1
Oct 27 14:38:54 localhost NetworkManager[804]: <debug> [1635345534.7966] dns-sd-resolved[7f89715e8091a4db]: systemd-resolved support for SetLinkDefaultRoute(): API supported
Oct 27 14:38:54 localhost systemd-resolved[797]: Using degraded feature set UDP+EDNS0 instead of TLS+EDNS0 for DNS server 192.168.122.1.
Oct 27 14:38:55 localhost NetworkManager[804]: <debug> [1635345535.0904] resolve-addr[a2db4af5bcf5c00a,192.168.122.207]: error resolving via systemd-resolved: GDBus.Error:org.freedesktop.resolve1.DnsError.NXDOMAIN: '207.122.168.192.in-addr.arpa' not found
Oct 27 14:38:55 localhost NetworkManager[804]: <debug> [1635345535.0907] resolve-addr[1ebbe19619fd7125,fe80::bb2d:6877:8d22:3b80]: start lookup via systemd-resolved
Oct 27 14:38:55 localhost NetworkManager[804]: <debug> [1635345535.0918] resolve-addr[1ebbe19619fd7125,fe80::bb2d:6877:8d22:3b80]: error resolving via systemd-resolved: GDBus.Error:org.freedesktop.resolve1.NoNameServers: No appropriate name servers or networks for name found
Oct 27 15:21:13 linux systemd-resolved[797]: Grace period over, resuming full feature set (TLS+EDNS0) for DNS server 192.168.122.1.
Oct 27 15:21:13 linux systemd-resolved[797]: Using degraded feature set UDP+EDNS0 instead of TLS+EDNS0 for DNS server 192.168.122.1.
You can see from the above output that NM is making the DBUS queries (i.e. start lookup
) before systemd-resolved
is fully configured. Hence the race and the NoNameServers
error.
The full journal is in journal.txt.