26

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?

0

2 Answers 2

25

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.

3
  • an answer on another question indicates that address=/.devbox/192.168.3.99 might be more suitable syntax for your purposes. Apr 27, 2010 at 19:14
  • Gee, I should have just read the parts that I pasted in from the config, it was obvious that it's not what I need. The address directive solved the problem, thank you!
    – K. Norbert
    Apr 28, 2010 at 7:24
  • I used the above with a twist: the web/dns/dhcp server has a wireless interface in Adhoc mode. Although while capturing packets I can see the mDNS request AND response, I cannot access the server by name. As if the contents of the response never get registered. Any ideas?
    – George
    Feb 18, 2016 at 22:20
5

You can also set short hostnames in /etc/hosts

192.168.3.99 website1
192.168.3.99 website2
192.168.3.99 website3
192.168.3.100 website4

and tell dnsmasq to expand all names in /etc/hosts to the .devbox domain.

local=/localnet/
expand-hosts
domain=devbox

website3.devbox should resolve.

This enables you to define DNS names via /etc/hosts only, which I find more convenient than dnsmasq address= entries.

This approach has the disadvantage that all names managed like this must be in the same domain.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .