I recently tried to enable system-wide DNS over https on Fedora. To do so I had to to some research and found out how comfusing it is for the average user (and even experienced users) to change the settings. In fact there are multiple backends messing with system DNS at the same time.
Most major Linux distributions use systemd-resolved for DNS but there is no utility for changing its configuration.
The average user would still try to change DNS settings by editing /etc/relov.conf (which is overwritten and will not survive reboots) or changing settings in Network Manager.
Based on documentation of systemd-resolved, the standard way of adding custom DNS servers is putting so-called ‘drop-in’ files in /etc/systemd/resolved.conf.d directory, especially when you want to use DNS-over-TLS or DNS-over-https.
Modern browsers use their buit-in DNS settings which adds to the confusion.
I think this is one area that Linux needs more work and more standardization.
How do you think it should be fixed?
You haven’t used Ubuntu Server… The resolv.conf is managed by the network manager (NetworkManager if I recall correctly). But if you configure the DNS in NM it won’t survive the reboot because there is another layer on top, cloudinit.
This is terrible. At least they should deprecate that file.
Can’t, it’s hardcoded by too many programs out there.
resolv.conf
is still the place to get DNS configuration, but it was hijacked by various “helping” tools so you can’t edit it manually anymore. Why they couldn’t stick to adding/etc/resolv.d/*.conf
files like to many other /etc/ stuff, I’ll never know.Cloud-init is fairly well documented:
https://cloudinit.readthedocs.io/en/latest/reference/network-config-format-v2.html#nameservers-mapping
But if you do not need it (and if you’re configuring DNS by hand, it doesn’t sound like you do), you can disable it entirely:
https://cloudinit.readthedocs.io/en/latest/howto/disable_cloud_init.html
resolv.conf
itself should be managed bysystemd-resolved
on any modern Ubuntu Server release. And that service will use the DNS settings provided bynetplan
.With cloud-init disabled, you should have the freedom to create/edit configuration files in
/etc/netplan
and apply changes withnetplan apply
.