NetworkManager erroneously pushes (in systemd-resolved mode) root routing domain when there are no any domains got from DNS server
When dns
set to systemd-resolved
(or default
) NetworkManager pushes ~.
domain to systemd-resolved and it breaks mDNS mechanism in systemd-resolved (it stops resolving .local
domains and just forwards it to DNS server because ~.
matches ALL domains even .local
).
It looks like update_add_ip_config
(https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dns/nm-dns-systemd-resolved.c) shall not add routing root domain when connection.mdns
setting is set.
Reproduce
# systemctl start systemd-resolved
# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
# printf '[connection]\nconnection.mdns=1\n' > /etc/NetworkManager/conf.d/mdns.conf
# systemctl restart NetworkManager
$ resolvectl domain
Global:
Link 3 (wlp4s0): ~.
Link 2 (enp0s25):
$ grep hosts /etc/nsswitch.conf
hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns
$ ping printer.local
ping: printer.local: Name or service not known
Reset domains
$ busctl call org.freedesktop.resolve1 /org/freedesktop/resolve1/link/_33 org.freedesktop.resolve1.Link SetDomains "a(sb)" 0
$ resolvectl domain
Global:
Link 3 (wlp4s0):
Link 2 (enp0s25):
$ ping printer.local
PING printer.local (192.168.1.8) 56(84) bytes of data.
64 bytes from printer.local (192.168.1.8): icmp_seq=1 ttl=64 time=4.43 ms