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?
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.
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.
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.
You can also set short hostnames in
/etc/hosts
and tell dnsmasq to expand all names in
/etc/hosts
to the.devbox
domain.website3.devbox
should resolve.This enables you to define DNS names via
/etc/hosts
only, which I find more convenient than dnsmasqaddress=
entries.This approach has the disadvantage that all names managed like this must be in the same domain.