Skip Navigation

systemd-resolved how to keep DNS server order?

I have a pi hole in my network and I set it as my primary DNS server, and my router (a Mikrotik) as secondary. DHCP sets the DNS servers as pihole, mikrotik in this exact order and I want to keep it that way. I know systemd-resolved uses some algorithm to set the fastest dns as current server, but I don't want/need that. Is there some way to do configure it to just let it be?

I'm running Fedora 40.

You're viewing a single thread.

4 comments
  • Via ChatGPT 4 (accuracy unverified):

    Yes, you can configure systemd-resolved to use the DNS servers in the order provided without dynamically switching based on speed. Here’s how you can do it:

    1. Edit the resolved configuration file:Open the resolved.conf file in a text editor:
       bash
          
      sudo nano /etc/systemd/resolved.conf
      
      
        
    2. Modify or add the following line:
       bash
          
      DNS=`IP_of_pihole` `IP_of_mikrotik`
      DNSStubListener=no
      FallbackDNS=
      
        
      Replace IP_of_pihole and IP_of_mikrotik with your actual DNS IP addresses. This tells systemd-resolved to only use the DNS servers in the order you've specified.
    3. Prevent automatic DNS changes by network manager:If you're using NetworkManager, create a drop-in configuration to prevent it from overriding DNS settings:
       bash
          
      sudo mkdir -p /etc/NetworkManager/conf.d/
      sudo nano /etc/NetworkManager/conf.d/dns.conf
      
        
      Add the following content:
       bash
          
      [main]
      dns=none
      
      
        
    4. Restart services:After making these changes, restart systemd-resolved and NetworkManager:
       bash
          
      sudo systemctl restart systemd-resolved
      sudo systemctl restart NetworkManager
      
        

    This should ensure that your system uses the DNS servers in the order provided without any automatic switching.