Resolving the "Unknown Host" Headache: Troubleshooting DNS Issues with systemd-resolved and resolv.conf

Introduction to DNS Troubleshooting

We’ve all been there - trying to access a website or service, only to be met with an “Unknown Host” error. These errors often stem from DNS issues, which can be frustrating to troubleshoot, especially when you’re not sure where to start. In my experience, the culprits are usually misconfigured resolv.conf files or problems with systemd-resolved. In this article, I’ll walk you through the practical aspects of troubleshooting DNS issues, focusing on systemd-resolved and resolv.conf, to help you resolve the “Unknown Host” headache efficiently.

Understanding systemd-resolved

systemd-resolved is a service provided by systemd to manage DNS resolution. It acts as a local DNS resolver, caching DNS queries and providing a layer of protection against DNS spoofing attacks. When systemd-resolved is enabled, it manages the /etc/resolv.conf file, which contains the DNS server addresses your system uses for name resolution. To check if systemd-resolved is active on your system, you can use the following command:

systemctl status systemd-resolved

If systemd-resolved is running, you’ll see an output indicating its active status.

Configuring resolv.conf

The /etc/resolv.conf file is crucial for DNS resolution. It specifies the DNS servers that your system will use. When systemd-resolved is enabled, this file is managed by the service, and manual edits may not persist. However, understanding how to configure resolv.conf directly is useful for troubleshooting and in scenarios where systemd-resolved is not in use. A typical resolv.conf file might look like this:

nameserver 8.8.8.8
nameserver 8.8.4.4

These lines specify Google’s public DNS servers as the primary and secondary DNS servers for your system. Don’t bother with editing this file if systemd-resolved is managing it, as your changes will likely be overwritten.

Troubleshooting DNS Issues

Troubleshooting DNS issues involves a methodical approach to identify and resolve the problem. Here are steps you can follow:

  1. Check resolv.conf: Ensure that the resolv.conf file contains valid DNS server addresses. You can check the file’s contents with cat /etc/resolv.conf.
  2. Verify systemd-resolved Status: If systemd-resolved is enabled, check its status and logs for any errors. You can view the logs with journalctl -u systemd-resolved.
  3. Test DNS Resolution: Use the dig or host command to test DNS resolution. For example, dig example.com should resolve the IP address of example.com.
  4. Check Network Configuration: Ensure your network interface is correctly configured and that you have a valid IP address. You can check your IP address with ip addr show.
  5. Flush DNS Cache: If systemd-resolved is caching outdated DNS records, you might need to flush its cache. You can do this with systemd-resolve --flush-caches.

Advanced Troubleshooting with systemd-resolve

systemd-resolve is a powerful tool for troubleshooting DNS issues when systemd-resolved is in use. Here are some advanced commands you can use:

  • Query DNS: You can query a specific DNS server using systemd-resolve --status or query a specific domain with systemd-resolve example.com.
  • Change DNS Servers: If you need to temporarily change the DNS servers used by systemd-resolved, you can do so with systemd-resolve --set-dns=8.8.8.8 --set-dns=8.8.4.4.

Security Considerations

When configuring DNS resolution, it’s essential to consider security. Using secure DNS servers that support DNS over TLS (DoT) or DNS over HTTPS (DoH) can protect your DNS queries from eavesdropping and tampering. systemd-resolved supports both DoT and DoH, and you can configure it to use these secure protocols. For more information on secure DNS practices, you can visit the systemd.io website.

Practical Examples and Caveats

  • Using Multiple DNS Servers: It’s a good practice to specify multiple DNS servers in resolv.conf to ensure redundancy. However, be aware that the order of DNS servers matters; the first server listed is queried first.
  • Local DNS Cache: systemd-resolved caches DNS queries locally, which can improve performance but may also lead to issues if the cache becomes outdated. Regularly flushing the cache can help mitigate this.
  • Network Manager Interactions: If you’re using a network manager like NetworkManager, be aware that it may override resolv.conf settings. You might need to configure DNS settings through the network manager’s interface.

Further Reading

Resolving “Unknown Host” errors due to DNS issues requires a systematic approach to troubleshooting. By understanding how systemd-resolved and resolv.conf work together, you can efficiently diagnose and fix DNS problems. For further reading on systemd-resolved and secure DNS practices, visit the freedesktop.org and debian.org websites for detailed documentation and guides.


See also