19

There is something terribly wrong with my current Debian install. Most programs like firefox, nslookup, dig etc. are ignoring entries in /etc/hosts file, actually I use this file for Ad-blocking.

an example

a line in /etc/hosts file

127.0.0.1 www.winaproduct.com

when I do dig +short www.winaproduct.com it returns the respective IP address of the server, not 127.0.0.1.

Open www.winaproduct.com on firefox, it shows the respective website, but this is not expected.

But there is no problem with ping, busybox nslookup, busybox ping, resolveip etc.

So, what is the problem ? And how to fix it ?I think the problem is with the DNS resolving library.

A temporary fix-up, setup dnsmasq and change nameserver to 127.0.0.1 in /etc/resolv.conf .

update

problem magically solved after installing libnss3, as a dependency of google-chrome

default /etc/nsswitch.conf looks like hosts: files dns

how to tell nslookup, dig etc. ask /etc/hosts file first instead asking directly to the DNS ?

but why busybox nslookup, wget, resolveip etc. are working differently than nslookup , dig etc. ?

Arnab
  • 1,541
  • 3
  • 14
  • 31

2 Answers2

23

nslookup, dig, and host are tools for querying DNS name servers.

If your configuration is not provided by a name server (like the information given in /etc/hosts) those tools will not show them, because they directly ask the name server.

If you want to check that the "usual" resolution is working (i.e. the way specified in /etc/nsswitch.conf) you can use getent:

getent hosts www.winaproduct.com
dan
  • 913
  • 6
  • 23
michas
  • 21,190
  • 4
  • 63
  • 93
  • `getent hosts www.winaproduct.com` is working perfectly, but `nslookup`, `dig`, `host` etc. are only as example, I want it on **firefox**. – Arnab Jun 29 '15 at 17:20
  • 1
    If it works with getent it should also work with firefox. (Both use the same resoltution mechanism.) If it really does not work check for "unusual" configuration in firefox. Maybe you set some kind of proxy or something like this. – michas Jun 29 '15 at 17:23
  • thanks for the comment, I dont use any unusual firefox configuration, no it is not working with firefox(38.0.1) . – Arnab Jun 29 '15 at 17:27
  • 3
    I'm very sure it is some browser issue. Try `wget` or some other browser like chrome. If `getent` gives the expected result all of them should. – michas Jun 29 '15 at 17:29
  • awesome, working perfectly with `wget`, so what is wrong with firefox , nslookup , dig etc ? I have tried after `rm -rf .mozilla` , remove any user set configuration, still not working. – Arnab Jun 29 '15 at 17:36
  • → Arnab: As @michas correctly explained it, there is nothing wrong with `nslookup`, `dig` and `host` because they just ask directly to the DNS. There is something wrong just within your `Firefox`. Check `Preferences > Advanced > Connection Settings...`, you should be on `No proxy`. – dan Jun 29 '15 at 17:47
  • 1
    @daniel Azuelos, there is nothing wrong with firefox settings, it's already using `No Proxy`. So how to tell `nslookup`, `dig` etc. ask `/etc/hosts` file first instead asking directly to the DNS ?. Thank you for your valuable comment. – Arnab Jun 30 '15 at 02:19
6

Configure Unbound package (installed by default on Linux these days) or install it on Windows. Then your resolver will look to this little lightweight service for all DNS queries. Unbound will read in your /etc/hosts entries and import them into the resolvers DNS cache.

For everything else, it will proxy your system's DNS queries to your machine's up-stream DNS servers.

Now, all your applications as well as your DNS tools such as dig, host and nslookup can receive answers that originated from your local /etc/hosts file.

As an alternative on Linux, you can use DNSmasq if you prefer however, when I last looked, it doesn't install on Windows yet.

Tony Barganski
  • 370
  • 4
  • 9