Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Environment

My LAN setup is quite basic:

  • A router connected to the ISP's modem and the internet
  • My development pc directly connected to the router

The router provides DHCP but does not run its own DNS server. In fact, there is no DNS server hosted anywhere on my LAN (typical home network setup). The router is configured to send the ISP's DNS servers as part of the DHCP lease information.

I set up a VirtualBox machine on my development PC and installed Debian Squeeze (6.0.4) on it. The VirtualBox network mode is Bridged Adapter to simulate a standalone server on my LAN. Being a VirtualBox server instead of a physical server is not really important, but I mention it for completeness.

The Problem

Every time a network operation executes a DNS reverse lookup of a LAN ip prior to executing, the server has long delays. Some examples of slow network operations:

  • SSH connection to the server from my dev PC
  • Connection to admin port of Glassfish server
  • netstat -l (netstat -nl is very fast)
  • Starting MTA: exim4 on boot takes a long time to complete

Some of these have workarounds like adding my dev pc's Ip to /etc/hosts or adding a command-specific option to avoid doing DNS reverse lookups. Obviously, using /etc/hosts only goes so far because it is at odds with DHCP.

However, I can't help but think that I'm missing something. Do I really need to setup a DNS server somewhere on my LAN? That seems like a huge and useless effort for my needs and I can't believe there isn't another option in a DHCP environment like mine.

I searched the net a lot for this and maybe I don't have the right search terms, but I can't find the solution...

update 1 following BillThor's answer

Using host (dig gives the same results):

# ip of stackoverflow.com
$ time host -v 64.34.119.12
Trying "12.119.34.64.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15537
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;12.119.34.64.in-addr.arpa.     IN      PTR

;; ANSWER SECTION:
12.119.34.64.in-addr.arpa. 143  IN      PTR     stackoverflow.com.

Received 74 bytes from 192.168.1.1#53 in 15 ms

real    0m0.020s
user    0m0.008s
sys     0m0.000s

# ip of dev pc
$ time host -v 192.168.1.50
Trying "50.1.168.192.in-addr.arpa"
;; connection timed out; no servers could be reached

real    0m10.004s
user    0m0.004s
sys     0m0.000s

My /etc/resolv.conf (was automatically created during installation)

nameserver 192.168.1.1

Both host and dig return very fast for a public ip but take 10s to timeout for a LAN ip. I guess 10s is my current timeout value.

update 2

With dev-pc in /etc/hosts file:

$ time getent hosts 192.168.1.50
192.168.1.50    dev-pc

real    0m0.001s
user    0m0.000s
sys     0m0.000s

Without dev-pc in /etc/hosts file:

$ time getent hosts 192.168.1.50

real    0m10.012s
user    0m0.004s
sys     0m0.000s

It looks more and more like I'll have to find piecewise program options or parameters for each one trying to do reverse DNS lookups! None of the machines (virtual or not) can act as a DNS server on my LAN since they are not always up. Unfortunately, the router's firmware doesn't include a DNS server.

share|improve this question

4 Answers 4

up vote 2 down vote accepted

Is 192.168.1.1 your router's IP address?

nameserver 192.168.1.1 suggests your router is advertising itself as a DNS server, rather than "sending the ISP's DNS servers".

What brand and model of router do you have? Does the web interface show log messages?

I'm wondering if your router is forwarding the request to your ISP's nameservers, but your ISP's nameservers are dropping the request, because they don't want you to know what their machine with IP 192.168.1.50 is called.

Suggestions:

  • Double check your router's settings. It should answer requests for your own private network. Maybe you can add a static host entry in your router's web interface?
  • Try installing Avahi on all the systems on your network.
  • Tell your router to use Google Public DNS (8.8.8.8 and 8.8.4.4) or OpenDNS
share|improve this answer
    
My router is a "NETGEAR Router WNR3500L" @ 192.168.1.1. The logs only show DHCP leases and logins to the admin interface. You are right, the router sends 192.168.1.1 as the dns server when handling out DHCP leases (confirmed with Wireshark). On the router's admin interface, I'm using "Get Automatically from ISP" for the DNS adresses. The other option is to specify directly DNS servers by IP. I guess this means DNS requests are actually forwarded by the router. –  bernie Apr 27 '12 at 20:38
    
Yeah, I'm guessing it's forwarding the DNS requests. What if you change it to use Google Public DNS (8.8.8.8 and 8.8.4.4) instead? –  Mikel Apr 27 '12 at 22:57
    
Wow this actually makes a BIG difference! Apparently these DNS servers (Google's and OpenDNS') fail fast when given a private IP address. I'll run a few more tests, but I think this solves my problem! –  bernie Apr 28 '12 at 15:21
    
Did the tests work? If so, please consider accepting the answer. –  Mikel May 2 '12 at 0:03
    
Marking this as accepted answer. The 3 answers were helpful, but changing the dns servers solved the problem "at large". –  bernie May 3 '12 at 17:08

Had same problem after changing from dynamic to static IP. My Network configured now: STATIC - NO IPv6 and not intending of using a mailserver.

I resolved the problem by doing:

1: run dpkg-reconfigure exim4-config

2: When you get to the DNS lookups question -> Set the DNS lookups to minimum (Dial up)

It gave me an error that this kind of lookups wasn't going to work and the suggestion to edit /etc/hosts - but the only thing I did with /etc/hosts was commenting out the ip6-allnodes and ip6-allrouters lines.

Reboot should be fast now (for me it is at least).

Hope it might helps others too :)

share|improve this answer

Failing DNS lookups should fail fast. However, I generally run dnsmasq which will read the hosts file and serve those entries for forward and reverse lookups. It also acts as a DNS caching server to reduce load on your upstream DNS servers.

You may want to use the host or dig command to see which lookups are slow. If you are redirected to a DNS server which isn't running DNS will take quite a while to fail. You can tune the timeouts and retries in /etc/resolv.conf to speed up the failures.

EDIT: To test the resolver response try using time getent hosts 192.168.1.50. This should return lookups from your /etc/hosts file as well as DNS. The host and dig commands only check DNS. If this returns but takes a few seconds, you may want to change the order of the hosts entry in /etc/nsswitch.conf move files to the front of the list.

Setting up dnsmasq and using it as your primary DNS nameserver in /etc/resolve.conf should resolve the issue if you have any programs which rely only on DNS for name lookups. Exim should use the resolver for is base lookups. You will need a /etc/hosts file, unless you can disable the DHCP server on your router, you can use dnsmasq for DHCP. dnsmasq will automatically register names if they are provided in DHCP requests it handles.

EDIT2: If none of your computers are always up, you may want to look at installing samba and using wins in your nsswitch configuration. It should be fast, so it may work if you put it ahead of dns in the hosts entry.

You could also look at installing the avahi utilities which will enable automatic discovery on link-local networks. I have it working on the IPv6 side, but it is not publishing IPv4 addresses. The default domain for hosts is '.local'. This may not be suitable in your case, but can be overridden. It also seems slower doing lookups than wins so putting mdns ahead of dns in the nsswitch configuration may not be suitable.

share|improve this answer
    
I think he said all (and only) LAN looks up are slow, and he's trying to avoid a hosts file altogether. –  ckhan Apr 27 '12 at 7:39
    
Thanks. I updated my post with more info. –  bernie Apr 27 '12 at 16:01
    
Since this is only a test server (and a virtual one too!), I can't rely on it as a DHCP server for the whole LAN. There are other occasional wireless clients too that need an IP even when my dev pc, and therefore the test server, is not running. –  bernie Apr 27 '12 at 19:01
    
Updated my post again. Thanks for your help so far. –  bernie Apr 27 '12 at 19:17

If you don't want to go through the exercise of setting up a local DNS (and potentially DHCP) server for your home network, you could tell the services where possible to not perform reverse DNS lookups.

For example, to disable reverse dns lookup for SSHD, add the following to the sshd_config file (or similar depending on distro):

UseDNS no

You could remove this line from the Exim configuration, though I'm not clear if this will have impact on the startup speed, it will prevent reverse dns lookup on connecting clients:

host_lookup = *

It looks like you can export this environment variable for the user that starts the Glassfish process:

export AS_NO_REVERSE_DNS=true

share|improve this answer
    
I wish I could set up a DNS server with the actual equipment I have, but it's not really feasible unless I load an alternate firmware on the router. Thanks for the config options; I hadn't found out about the AS_NO_REVERSE_DNS option for Glassfish so I'll have a look. –  bernie Apr 27 '12 at 20:40

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.