Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
wildcard DNS record on OS X in localhost development with dnsmasq

wildcard DNS in localhost development

$ brew install dnsmasq
$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
  • edit /usr/local/etc/dnsmasq.conf
  • start dnsmasq
$ sudo brew services start dnsmasq
  • any time we change dnsmasq.conf we have to re-start dnsmasq:
$ sudo launchctl stop homebrew.mxcl.dnsmasq
$ sudo launchctl start homebrew.mxcl.dnsmasq
  • For OS X to resolve requests from *.local to localhost we need to add a resolver:
$ sudo mkdir /etc/resolver
$ sudo touch /etc/resolver/local
  • edit /etc/resolver/local
  • re-start the computer to enable the resolver


Copy link

@hauleth I recently downgraded to Mojave 10.14.6 (18G103) so I can tell you that it works.

The .localhost is already accepted in the old
That said the .test is off course a lot shorter.

Copy link

hauleth commented Dec 20, 2019

It was reserved there as:

The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use. Any other use would conflict with widely deployed code which assumes this use.

But it do not requires it to be defined as such. I am on Mojave 10.14.6 (18G1012) and this is not available:

$ ping foo.localhost
ping: cannot resolve foo.localhost: Unknown host

If I setup the dnsmasq though it will work.

$ cat /etc/resolver/localhost
$ ping -c1 foo.localhost
PING foo.localhost ( 56 data bytes
64 bytes from icmp_seq=0 ttl=64 time=0.021 ms
--- foo.localhost ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.021/0.021/0.021/0.000 ms

Copy link

slavikme commented May 8, 2022

As @TheM1984 stated, *.localhost does work, but only in browsers like Chrome and Firefox. This is because the browser itself makes the domain resolution to
Outside of browsers it might not work without a DNS server.

Copy link

slavikme commented May 8, 2022

By the way, *.test TLD is the best choice for local apps and services, as this TLD is specifically reserved for such cases, as stated here.

Copy link

hauleth commented May 8, 2022

@slavikme by what metric it would be the "best"? Because .localhost is also reserved for exactly that purpose (it is literally in the same article you have posted).

Copy link

Using *.localhost or *.test is nearly the same, with few small differences:

  1. test is a bit shorter - so it's somewhat a plus.
  2. When using localhost as TLD, and accessing it from other machine on the same network, it causes some conflicts with other local machines.

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