DNSMasq – Setting Up DNSMasq for a Local Network

dnsmasqdomain-name-system

I and a small group of developers have just moved to a new office, and I'd like to set up dnsmasq on our development
server, so when we deploy web apps there, we don't have to edit our own hosts files. We have a router at 192.168.3.1
which we don't have access to. I figured I'd install a DNS server on the development box, and we all record its IP
as a secondary DNS server. Unfortunately, I'm struggling to make this work.

The name of the devel server is devbox, its IP is 192.168.3.99, and it's running the latest Ubuntu Server (Karmic)

My computer is running Ubuntu Desktop (Karmic)

What I'd like to achieve

Let's say I have three websites, website1, website2, website3, running on the development box.
I'd like to access them by the URLs:

http://website1.devbox
http://website2.devbox
http://website3.devbox

So I have configured Apache on the devel box, installed dnsmasq, and put the following lines into its hosts file:

192.168.3.99 website1.devbox
192.168.3.99 website2.devbox
192.168.3.99 website3.devbox

and edited my own resolv.conf file to include the devel box as a nameserver:

nameserver 192.168.3.99 

It's working fine, I can access the sites. The problem is that it doesn't scale well. I'd like all the domains ending with
.devbox forwarded to the development box, and this is what I'm struggling with.

I have tried putting

192.168.3.99 devbox

into the hosts file, and editing the line in dnsmasq.conf:

# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
local=/devbox/

But I cannot get it working. If I try any URL that is not explicitly present in the development box's hosts file, the DNS lookup fails.

Is the local directive for something else? Am I looking at the wrong place?

Best Answer

Refer to the DNSmasq documentation, especially the dnsmasq manpage and sample configuration file. The local keyword tells DNSmasq to perform those domain lookups with local data. This affects requests send to DNSmasq for foo.localnet and bar.localnet, for example. I don't think this is what you want.

# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
local=/localnet/

To force host/subdomain lookups to resolve to a specific address, you'd probably want to use the address keyword. The second example below should allow web1.devbox and web2.devbox and web73872.devbox to all resolve to the address specified.

# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
address=/doubleclick.net/127.0.0.1

# for your example
address=/devbox/192.168.3.99

I use DNSmasq at home to handle simple DNS stuff for my LAN; in that case, local and the associated domain and expand-hosts keywords are appropriate. The DNSmasq server is my primary nameserver, so all requests go through it; any nonlocal addresses are passed back to the ISP's nameserver. You might consider that configuration if possible.

Related Topic