Skip to content

Instantly share code, notes, and snippets.

@zaherg
Last active January 11, 2017 16:16
Show Gist options
  • Save zaherg/5720950 to your computer and use it in GitHub Desktop.
Save zaherg/5720950 to your computer and use it in GitHub Desktop.
this is what i have used to create a wildcard dns resolver when am trying to work with #laravel and domain routings

#orginal one from http://clintberry.com/2011/wildcard-sub-domains-on-osx-web-development-on-localhost/

Bind DNS Setup (OSX 10.8+)

BIND is the little piece of software the runs the internet. BIND is a DNS server and it works in a distributed fashion. It’s really fascinating how DNS works but that’s outside the scope of this post. There are a few steps to get BIND set up to serve domains and they are crucial.

sudo -s

This will let you run a shell as root. I suggest doing this because most of the next commands you will execute need to be on privileged files and directories.

Create the rndc.conf and rndc.key You can easily do this by running the following commands:

rndc-confgen > /etc/rndc.conf
head -n5 /etc/rndc.conf |tail -n4 > /etc/rndc.key

Add the zone to /etc/named.conf I am going to use .dev for all my examples. I have used .local on my machine but I have found that this can be troublesome with the OS X default Multicast being .local. You can make this whatever top level domain you would like (.dev, .rails, .php, etc.) In /etc/named.conf add:

zone "dev" IN { type master; file "dev.zone"; allow-update { none; }; };

Create /var/named/dev.zone Use this template for your zone file:

$TTL  60
$ORIGIN dev.
@      1D IN SOA localhost. root.localhost. (
          42   ; serial (d. adams)
          3H   ; refresh
          15M    ; retry
          1W   ; expiry
          1D )   ; minimum

      1D IN NS localhost
      1D IN A    127.0.0.1
localhost.dev. 60 IN A 127.0.0.1
*.dev. 60 IN A 127.0.0.1

The only thing you should have to change is the serial (42) to any random number and if you decided to go with something else other than .dev: everthing that has .dev in it. Note that the dots (.) after the dev entries are intentional and required.

launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist

This will cause named to load everytime the system restarts.

named

This loads named now. It doesn’t give you any input if it fails to load so I recommend running named -g first to make sure it parses you zones and configs. -g will tell named to run in the forground and write all logging to STDOUT. Once you’ve verified that it starts then Ctrl-c and run named as normal.

CREATE THE RESOLVER

Next we have to create an entry in the /etc/resolver folder. This folder is checked every time a DNS entry is looked up. If a file exists here then it will use the special resolv configuration to look up DNS names. Here you can specify custom domains, search orders, and in this case nameservers. The resolver folder may not exist in the /etc directory. If it doesn’t, create it.

Create a file with the root domain you want to use for your projects.. I.e. if your root domain is *.dev then create the file dev ( i got this note from the comments ) and inside it put:

nameserver 127.0.0.1

Now when you go to http://clint.dev your root web directory should load, but you can also go to http://www.clint.dev or http://theskyisblue.clint.dev and it should still go to your root web directory.

Log out of the root shell by typing exit.

Your wildcard DNS settings are now ready to go.

now anything you have to do is related to your apache one

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment