This is a quick post on how to set up your own DNS server with custom TLDso you can easily and more quickly get started on your next project. I am doing my programming on the Linux machine (Ubuntu to be Precise :)). The idea behind this set-up is to evade the need to ever modify your /etc/hosts
file. Also, there is a possibility to even skip the creating of Apache VirtualHost directive and restarting the web server. Onward with the How-To.
Disclaimers:
- I use Ubuntu, so substitute
apt-get
with yum
or what ever you use
- Anywhere you see the IP 192.168.1.253, replace with your own
- I haven’t set up any forwarders in
named.conf.options
Install and configure DNS (BIND9)
sudo apt-get install bind9
Edit these files
/etc/bind/named.conf.local:
zone "dev" {
type master;
file "/etc/bind/db.dev";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
};
/etc/bind/db.dev
$TTL 604800
@ IN SOA dev. root.dev. (
2012042301 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dev.
@ IN A 192.168.1.253
*.dev. 14400 IN A 192.168.1.253
/etc/bind/db.192.168.1:
$TTL 604800
@ IN SOA dev. root.dev. (
2012042301 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dev.
253 IN PTR dev.
Be careful to replace 253 in your files for your own last IP octet. Also, the filename should reflect your IP.
DNS servers setup…
Ok, now that we got this set up, we need to tell our system to use the local DNS server before going for the ISP and beyond. To achieve this, use Networking manager in Ubuntu, here’s how mine looks like. The final goal is for the /etc/resolv.conf
too read: nameserver 127.0.0.1
.
…and finishing up
Now that everything is set up, restart bind:
sudo /etc/init.d/bind9 restart
Test your setup by pinging anything.dev. If you get the response from your server, all is working great.
Apache Virtual Document Root
If your projects have similar / identical directory structure (i.e. public
directory for publicly available files) than you can go a step further and setup the Apache Virtual Document Root. In doing so, you will be able to create a new directory in your projects root and have it magically turned up by calling http://newdirectory.dev.
<IfModule vhost_alias_module>
<VirtualHost *>
UseCanonicalName Off
VirtualDocumentRoot "/path/to/projects/%1/public"
ServerName projects.dev
ServerAlias *.dev
SetEnv APPLICATION_ENV development
</VirtualHost>
</IfModule>
# Enable mod_vhost_alias apache module
sudo a2enmod vhost_alias
# Restart server
sudo /etc/init.d/apache2 restart
I don’t have this enabled for myself, but it does work, although not well tested. For further info on this topic, check the following links:
P.S. Yes, I got carried away while creating the featured image :)