simple-dns-proxy is very simple tool that sets up a DNS server that will provide
customized responses to certain queries while letting the rest go through an upstream
DNS server, this is, acting like a proxy.
This can be useful when you don't have access to the DNS records for a domain or just want to fake the response for testing purposes.
For instance, imagine you're developing an application that allows registered users to
have their own subdomain on your site, something like
<username>.my-app.com. You can
easily test this scenario on your development machine using
npm install -g simple-dns-proxy
simple-dns-proxy *.mydomain.com:A:127.0.0.1 -u 126.96.36.199
The above will run a DNS server listening on UDP port 53 (the default DNS service port)
that will resolve
A queries for ANY subdomain of the domain
mydomain.com with the IP
127.0.0.1. Any other request will be forwarded to the upstream server at
More than one rule can be defined, just separate them using whitespaces, like so:
simple-dns-proxy test-*.domain.com:A:10.0.0.1 prod-*.domain.com:A:10.0.0.2
Also, any valid DNS record type can be used:
simple-dns-proxy will try to bind to the standard DNS port (UDP 53). Depending on
your configuration this will fail. First, you may need to run it with elevated privileges, in
Windows, or as a superuser, in linux based systems:
sudo simple-dns-proxy ...
Second, it may fail if you already have any other piece of software listening at that port. This
can be the case, for instance, for Ubuntu based systems, which use
dnsmasq. You can take rid
of this by editing the
/etc/NetworkManager/NetworkManager.conf file, commenting out the
dns=dnsmasq line and restarting the network manager service (
sudo service network-manager restart).
Note that if you're running
simple-dns-proxy as a superuser you may be also interested in using the
-G <group id/group name> and
-U <user id/user name> parameters to force it use a different
account after initialization.