Discussion:
[Dnsmasq-discuss] upstream server selection algorithm - bug?
Kevin Darbyshire-Bryant
2018-05-15 15:27:52 UTC
Permalink
This is one of my classic ‘look in a logfile
. hmmmm’ moments.

dnsmasq is configured with 4 upstream resolvers, google, both IPv4 & 6. Manpage states:

-o, --strict-order
By default, dnsmasq will send queries to any of the upstream servers it knows about and tries to favour servers that are known to be up. Setting this flag forces dnsmasq to try each query with each server strictly in the order they appear in /etc/resolv.conf
--all-servers
By default, when dnsmasq has more than one upstream server available, it will send queries to just one server. Setting this flag forces dnsmasq to send all queries to all available servers. The reply from the server which answers first will be returned to the original requester.

I have neither of these flags set, so I’d expect dnsmasq to choose one of the servers, hopefully the fastest and stick with that. Obviously it has to at least try the others occasionally to check it’s made the correct choice. But I’m seeing dnsmasq make the same request to *ALL* servers quite frequently and am curious as to why?


Cheers,

Kevin D-B

012C ACB2 28C6 C53E 9775 9123 B3A2 389B 9DE2 334A
Dominik DL6ER
2018-05-15 16:00:42 UTC
Permalink
Dear Kevin,
Post by Kevin Darbyshire-Bryant
Obviously it has to at least try the others occasionally to check it’s made the correct choice. But I’m seeing dnsmasq make the same request to *ALL* servers quite frequently and am curious as to why?
dnsmasq is trying all servers quite frequently, either every 50 queries
or 10 seconds (whatever happens first) if I'm not mistaken. This fits
well to your observation.

I changed this locally to checking every 1000 queries (or every 10
minutes) and this is working great (I compile dnsmasq from source).

Best,
Dominik
Post by Kevin Darbyshire-Bryant
This is one of my classic ‘look in a logfile
. hmmmm’ moments.
-o, --strict-order
By default, dnsmasq will send queries to any of the upstream servers it knows about and tries to favour servers that are known to be up. Setting this flag forces dnsmasq to try each query with each server strictly in the order they appear in /etc/resolv.conf
--all-servers
By default, when dnsmasq has more than one upstream server available, it will send queries to just one server. Setting this flag forces dnsmasq to send all queries to all available servers. The reply from the server which answers first will be returned to the original requester.
I have neither of these flags set, so I’d expect dnsmasq to choose one of the servers, hopefully the fastest and stick with that. Obviously it has to at least try the others occasionally to check it’s made the correct choice. But I’m seeing dnsmasq make the same request to *ALL* servers quite frequently and am curious as to why?
Cheers,
Kevin D-B
012C ACB2 28C6 C53E 9775 9123 B3A2 389B 9DE2 334A
_______________________________________________
Dnsmasq-discuss mailing list
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
Kevin Darbyshire-Bryant
2018-05-15 18:57:11 UTC
Permalink
Post by Dominik DL6ER
Dear Kevin,
Post by Kevin Darbyshire-Bryant
Obviously it has to at least try the others occasionally to check it’s made the correct choice. But I’m seeing dnsmasq make the same request to *ALL* servers quite frequently and am curious as to why?
dnsmasq is trying all servers quite frequently, either every 50 queries or 10 seconds (whatever happens first) if I'm not mistaken. This fits well to your observation.
I changed this locally to checking every 1000 queries (or every 10 minutes) and this is working great (I compile dnsmasq from source).
Best,
Dominik
Ahh, excellent Dominik,

Thank you - I’m looking through the source now :-)

Cheers,

Kevin
Simon Kelley
2018-06-02 13:54:49 UTC
Permalink
Note that trying all servers frequently has no performance hit, apart
from the marginal extra bandwidth and upstream load. The original
requestor still gets an answer as soon as the fastest server responds.


(The parameters controlling this are in src/config.h)


Cheers,

Simon
Post by Kevin Darbyshire-Bryant
Post by Dominik DL6ER
Dear Kevin,
Post by Kevin Darbyshire-Bryant
Obviously it has to at least try the others occasionally to check it’s made the correct choice. But I’m seeing dnsmasq make the same request to *ALL* servers quite frequently and am curious as to why?
dnsmasq is trying all servers quite frequently, either every 50 queries or 10 seconds (whatever happens first) if I'm not mistaken. This fits well to your observation.
I changed this locally to checking every 1000 queries (or every 10 minutes) and this is working great (I compile dnsmasq from source).
Best,
Dominik
Ahh, excellent Dominik,
Thank you - I’m looking through the source now :-)
Cheers,
Kevin
_______________________________________________
Dnsmasq-discuss mailing list
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
Loading...