Wildcard subdomains hosts in ubuntu

2013-08-26

The classic hosts file does not support wildcard domains. In fact, you have to specify everything manually for every subdomain. During development you sometimes need arbitrary subdomains to resolve to a certain development machine. So this is a bit annoying. Luckily it's not that difficult to set things up. That's what this page might help you with.

I'm basically following the instructions at https://groups.drupal.org/node/16862#debian, with the main exception that the config file works and I had to edit some other files. If not worky, check that link instead.

We will add a test domain called example.net

1. Install bind9 if it isn't there already
Code:
sudo apt-get install bind9


2. Add a "zone", this will be your target domain
Code:
sudo nano /etc/bind/named.conf.local

Somewhere in this (probably empty) file, and otherwise the end, add this:

Code:
zone "example.net" {
type master;
file "/etc/bind/db.example.net";
};

(Note that db. does not refer to a specific subdomain, I think it's just a name.)

3. You can check and confirm the syntax of this file, to make sure it's not crashing. If ok, it prints nothing.

Code:
named-checkconf /etc/bind/named.conf.local


4. Create the zone file (adds your development domain and wildcard subdomains)

Code:
sudo nano /etc/bind/db.example.net

Then paste this, replacing example.net with your domain (this may be just a "tld", or a subdomain). Make sure to keep trailing dots. They are important.
Code:
@ 86400 IN SOA example.net. root.example.net. (
20091028 ; serial yyyy-mm-dd
10800 ; refresh every 15 min
3600 ; retry every hour
3600000 ; expire after 1 month +
86400 ); min ttl of 1 day
@ 86400 IN NS example.net.
@ 86400 IN MX 10 example.net.
@ 86400 IN A 192.168.0.1
*.example.net. IN A 192.168.0.1

(Replace 192.168.0.1 with the IP of your development machine!)

5. You can check and confirm the syntax of this file too. If ok, it will print OK

Code:
named-checkzone mydev /etc/bind/db.example.net


6. Update dhcp to use this dns first. If you're not on DHCP, check the original tutorial for instructions. Those instructions point you towards /etc/dhcp3/dhclient.conf, but I had to modify /etc/dhcp/dhclient.conf. If neither, do a locate dhclient.conf ...

Code:
nano /etc/dhcp/dhclient.conf

Find the line #prepend domain-name-servers 127.0.0.1; and remove the hash (#). If the line is not there I don't know what you should do. Make sure you're in the right file and add that line (without the hash) or maybe just bail.

7. Restart the dhcp client (I think you can use service for that, but this worked just the same for me)

Code:
sudo dhclient


8. (Re-)start bind9

Code:
sudo service restart bind9


9. Profit! Test by pinging your domains

Code:
ping example.net
ping foo.example.net

They should resolve to your development machine, provided it accepts pings ;)

Hope it helps you