Category Archives: DNS

Override DHCP assigned DNS Server and Domain Search in dhclient

Sometimes, particularly if you are on a residential broadband Internet connection, your Linux box might need to get its external IP addressed assigned by your ISP.

In this case, and in the case of Debian, you define your network interface with the dhcp flag in /etc/network/interfaces

auto eth0
iface eth0 inet dhcp

When you do this, by default, your /etc/resolv.conf file will be overwritten by whatever your ISP wants to assign you for your DNS servers and your search domain as well. It’s not always desirable that your /etc/resolv.conf file gets overwritten.

In Debian, if you are not using Network-Manager, that is, if you have a nice, minimal system, like for a router, it is the “dhclient” program that is handling the task of getting your IP address and network configuration information from your ISP.

You can, if you like, alter, override or ignore whatever your ISP is assigning you by editing the dhclient configuration file in Debian:

edit /etc/dhcp/dhclient.conf

In here, at the bottom, if you want to ignore your ISP’s name server assignment and use your own machine as the DNS server, you can “supersede” what the ISP’s name server gives you – that is, completely ignore the stupid thing:

supersede domain-name-servers;

That gives you just your local machine as your DNS server. So please do make sure you have one. But perhaps you still want to use your ISP’s name servers, but want to use yours as well, say, for example, reverse DNS entries in the ARIN black holes that you might locally use for your subnet. In that case, you can just “prepend” or “append” your own entry to what the ISP will assign:

prepend domain-name-servers;

That way, you get yours first, then whatever they want to give you.

Of course, you’ll probably want to assign your own search domain too, so you don’t have to go typing FQDN’s all the time and give yourself carpel tunnel’s syndrome. So here’s some preventative care:

supersede domain-search "";
supersede domain-name "";

If you do these things, then your /etc/resolv.conf file will be just how you like it, even with that presumptuous dhclient trying to make your machines believe everything it hears from your ISP.

Of course, you’ll need to bring the interfaces down and up to see the changes happen – just use the

# ifdown eth0
# ifup eth0

I would think that is self-evident, but I’ve been nagged at before for not saying such things. And I’m delicate.

Hope this helps!