Skip to content

Instantly share code, notes, and snippets.

@mbyczkowski

mbyczkowski/dnsmasq.sh

Last active Aug 20, 2018
Embed
What would you like to do?
Dnsmasq config for OS X
#!/usr/bin/env bash
# Resolve dev domains locally and passthrough other DNS requests
set -e
dnsmasq_installed=`brew list | grep dnsmasq`
if [ -n "$dnsmasq_installed"]; then
echo "Installing Dnsmasq..."
brew install dnsmasq
else
echo "Dnsmasq is already installed. Skipping."
fi
# .dev is now a legit domain, so this resolver need higher priority
echo "Adding resolver for .dev domain..."
sudo mkdir -p /etc/resolver
sudo tee /etc/resolver/dev >/dev/null <<EOF
nameserver 127.0.0.1
search_order 1
EOF
echo "Clearing local DNS cache..."
sudo dscacheutil -flushcache
echo "Listing list of DNS resolvers..."
scutil --dns
echo "Configuring Dnsmasq..."
tee /usr/local/etc/dnsmasq.conf >/dev/null <<EOF
strict-order
listen-address=127.0.0.1
address=/.dev/127.0.0.1
EOF
running_dnsmasq=`brew services list | grep 'dnsmasq.*started'`
if [ -n "$running_dnsmasq" ]; then
echo "Stopping Dnsmasq service..."
sudo brew services stop dnsmasq
fi
dns_list=(127.0.0.1)
dns_list+=($(sudo networksetup -getdnsservers Wi-Fi | grep -v 127.0.0.1))
echo "Updating DNS order in Network Preferences: ${dns_list[@]}"
echo "Starting Dnsmasq service..."
sudo brew services start dnsmasq
dig_cmd="dig some.random.domain.dev +short"
dig_res=`$dig_cmd`
if [ "$dig_res" != "127.0.0.1" ]; then
echo "Expected '$dig_cmd' to resolve to 127.0.0.1, but got '$dig_res' instead"
exit 1
else
echo ".dev domain resolves without specifying the resolver"
fi
dig_cmd="dig some.random.domain.dev +short @127.0.0.1"
dig_res=`$dig_cmd`
if [ "$dig_res" != "127.0.0.1" ]; then
echo "Expected '$dig_cmd' to resolve to 127.0.0.1, but got '$dig_res' instead"
exit 1
else
echo ".dev domain resolves with resolver set to 127.0.0.1"
fi
dig_cmd="dig google.com +short"
dig_res=`$dig_cmd`
if [ "$dig_res" = "127.0.0.1" ]; then
echo "Expected '$dig_cmd' to resolve to non-local IP, but got '$dig_res' instead"
exit 1
else
echo "google.com domain resolves without specifying the resolver"
fi
dig_cmd="dig google.com +short @127.0.0.1"
dig_res=`$dig_cmd`
if [ "$dig_res" = "127.0.0.1" ]; then
echo "Expected '$dig_cmd' to resolve to non-local IP, but got '$dig_res' instead"
exit 1
else
echo "google.com domain resolves with resolver set to 127.0.0.1"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment