Spawn local DNS server for development (instead of /etc/hosts file)
Assume you have to manage multiple domains in your local setup, for example, you have a multi-workspace host-name based app (like web-version of Slack in the past):
domain.loc 127.0.0.1 | |
workspace1.domain.loc 127.0.0.1 | |
workspace2.domain.loc 127.0.0.1 | |
workspace3.domain.loc 127.0.0.1 |
Or multinode scaled DNS-based app. All these cases make management via editing /etc/hosts
file not super handly
Create file ./bind_inventory/run_bind.sh
:
#!/bin/bash | |
SCRIPTDIR="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" | |
# TODO: add record to /etc/systemd/resolve.conf file | |
docker build $SCRIPTDIR -t tracklify_local_bind | |
sudo docker run -p 127.0.0.1:53:53/udp --restart=always -d tracklify_local_bind |
./bind_inventory/Dockerfile
:
FROM jpillora/dnsmasq | |
ADD dnsmasq.conf /etc/dnsmasq.conf |
./bind_inventory/dnsmasq.conf
:
# this is file with DNS rules, here we map all domain.loc and subdomains to 127.0.0.1 | |
address=/domain.loc/127.0.0.1 |
Run DNS container:
./bind_inventory/run_bind.sh
Replace Resolve
record in /etc/systemd/resolved.conf
to look like:
[Resolve] | |
DNS=127.0.0.1 | |
Domains=~. | |
DNSStubListener=yes | |
#FallbackDNS= | |
#LLMNR=no | |
#MulticastDNS=no | |
#DNSSEC=no | |
#DNSOverTLS=no | |
#Cache=no-negative | |
#ReadEtcHosts=yes |
3. Restart systemd-resolved
sudo systemctl restart systemd-resolved
4. Test if it's working run.
host domain.loc | |
host sub.domain.loc |
In case it didn't work try restarting Linux.
After the restart just test if the host
the command returns host for domain.loc
domain.