DNS resolution slow + fix



I had troubles using NetworkManager with Verizon DSL here in
Philadelphia. My computer is the only device plugged into the DSL modem.
The DSL modem (Westell Versalink 327W) does NAT and acts as gateway and
name server. But DNS was very slow, taking 5-10 seconds to resolve
domain names, whereas everything else works at DSL speeds. 

After sniffing the traffic between me and the DSL modem, I found out
that Network Manager starts bind to forward the resolution requests to
my DSL router. Bind adds the optional edns0 field to the DNS request
initially, which is not answered by my DSL modem. So the timeline is as
follows:

Bind asks for DNS lookup + edns0.
Bind waits for 2 seconds.
Bind asks for DNS lookup + edns0.
Bind waits for 2 seconds.
Bind asks for DNS lookup + edns0.
Bind waits for 2 seconds.
Bind gives up on edns0 and asks for DNS lookup without edns0.
My DSL modem answers the DNS request immediately.

Apparently, the DSL modem's DNS server does not understand the edns0
extension, and just ignores the requests. I can dig dns replies >512
bytes from other name servers, so it does not seem to be a firewall
problem. In any case, I did disable the DSL router's and my computer's
firewall. 

Everything works fine if I disable edns in the named.conf, as in the
following:

==== snip on =======================================================
[root computer ~]$ rpm -q bind
bind-9.3.1-10_FC4
[root computer ~]$ rpm -q NetworkManager
NetworkManager-0.4-20.FC4.1
[root computer ~]$ cat /usr/share/NetworkManager/named.conf
// Named configuration, generated by NetworkManager

// The Westell Versalink has a broken DNS server, must disable edns
server 192.168.1.1 {
        edns false;
};

options {
        directory "/";
        query-source address * port *;
        forward only;
        forwarders { @@FORWARDERS@@ };
        listen-on  { 127.0.0.1; };
        pid-file "@@PID_FILE@@";
};

// Disable rndc
controls { };

@@DOMAIN_ZONES@@
==== snip off ======================================================

I'm not convinced that this is the right thing (TM) to do, but
NetworkManager should "just work" with common DSL hardware. Ideally,
NetworkManager would use only simple DNS queries as the lowest common
denominator. As far as I know, there is no way to globally turn off
edns0 in bind.

Volker





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]