hosts file seems to be ignored

I have almost fresh Ubuntu desktop box. OS was installed two weeks ago and updated from karmic repositories. Last week I had no problems with DNS. But this week something had changed. I'm not sure what and when, and not sure whether I changed any configs.

So now I have some really weird situation. According to logs name resolving should work normally.

/etc/hosts

127.0.0.1   localhost test
127.0.1.1   desktop

/etc/host.conf

order hosts,bind
multi on

/etc/resolv.conf

# Generated by NetworkManager
search search servers obtained via DHCP
nameserver 192.168.0.3

/etc/nsswitch.conf

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

But if fact it is not.

user@test ~>ping test

PING localhost (127.0.0.1) 56(84) bytes of data.
[skip]

Pinging is ok.

user@test ~>host test

test.mydomain.com has address xx.xxx.161.201

I suspect that NetworkManager might cause this misbehavior, but don't know where to start to check it. Any thoughts, suggestions?


Solution 1:

With this configuration, most applications will happily work with your entry from /etc/hosts.

However host doesn't look at /etc/nsswitch.conf. That is by design, not by accident, since host is specifically a DNS lookup program. /etc/hosts is not DNS, it's (mostly) what we used before we had DNS.

The same is also true for dig and nslookup - they're DNS specific too.

Solution 2:

The host command (along with dig and nslookup) is part of the bind DNS utilities. As a DNS resolver utility, it does DNS resolution alone.

If you're interested in fetching an entry from any libnss-driven data store, you can use the getent program. To get a hosts entry, for example, use it like this:

getent hosts google.com

This follows the resolution order set out under hosts: in /etc/nsswitch.conf in order, which includes /etc/hosts if "files" is lised as one of the options.

Solution 3:

For me this issue occurred due to incorrect file permissions. Only root could read /etc/hosts. The file should be world-readable.