I've been using my DSL connection for over 2 years now but was not happy with how long names took to resolve, especially when using services like stumbleupon. So 6 months ago I changed the DNS server used to OpenDNS, which is still the best option I think.

Zyxel DNS config

Changing the DNS settings on the DSL router has the advantage of applying to all your systems whether they be linux, windows, mac etc. So to change to opendns I updated the highlighted fields below on the zyxel DSL router provided by BT. The default configuration of this device is to act as a caching forwarder if no DNS servers are set. I.E. if 0.0.0.0 is in the highlighted fields, then the LAN IP of the zyxel is served to DHCP clients as the DNS server, and the zyxel will forward DNS requests to the ISP's DNS servers.

One can see and change more attributes of the DNS proxy with the following zynos commands.
telnet 192.168.1.1
$password
24
8
ip dns st disp

 DNS Proxy Statistics
 State: 2
 Proxy Table Size: 128
 Active DNS: 194.125.2.241
 Primary DNS: 194.125.2.241
 Secondary DNS: 194.125.2.240
 Max Entry: 127
 Timeouts: 330
 Response Discards: 41
 Request Discards: 0
 Send Failures: 0
 No DNS Entry : 41
 Request Count : 30782
 Free Count : 44908

Comparing performance of ISP and openDNS name servers

When I originally changed over to opendns 6 months ago I noticed a significant improvement in lookup times, but trying to quantify that benefit now showed not much difference between them. I'm guessing that BT have upgraded their DNS servers or curtailed compromised clients which can have a significant impact. It's worth noting that opendns will redirect all your google search queries through their servers for supposedly benevolent reasons, though there are many ways around that if you prefer. The plots below were made with very simple python and gnuplot scripts and show no significant differences in performance between opendns and either my work or home ISPs DNS servers.

Testing the performance of a local recursive DNS server

So then I tried out a suggestion to use a local recursive DNS server — specifically powerDNS. This was trivial to install on my Fedora 8 system at least, and just required installing the "pdns-recursor" package (default configuration suffices) and setting my DNS server to 127.0.0.1. Testing the performance of this though showed that it was slightly slower than the solutions above. This is probably because the recursive transitions are done over the DSL line instead of more centrally over lower latency links. I also noticed that the internal cache of the powerDNS server was lost on restart, and that occasionally DNS look-ups would fail for periods of up to 2 minutes. So I'm not using this solution for the moment anyway.

[Update Nov 2014: See the settings and advantages for enabling a local DNS server on Fedora >= 21, especially in the presence of VPNs]
© Sep 4 2008