I see many people struggeling to make consul-agent work with systemd.resolvd and eventually give up and go with dnsmasq or a similar approach. Here's a reasonably simple way to make everything play nicely together. If you found this useful, say thanks. And as much as i'd love your support via patreon, go and donate to the EFF. Here's an exerpt from the `install_consul_agent.sh` that my base packer builder runs for all my systemd hosts: ``` # Binary is in place, secured. Deploy the systemd components to make it useful ## echo "moving systemd components into place..." # deploy the service file mv systemd/consul-agent.service /etc/systemd/system/consul-agent.service mv systemd/dummy0.netdev /etc/systemd/network/dummy0.netdev mv systemd/dummy0.network /etc/systemd/network/dummy0.network # Then get the interface created echo "reconfiguring network for dummy0..." systemctl restart systemd-networkd # Ok, now we're ready! echo "Attempting to bring consul up for POST..." systemctl enable consul-agent systemctl start consul-agent # Confirm that consul actually came up... if [ `systemctl is-failed consul-agent.service` == 'failed' ]; then echo "Consul failed to start" # Bail, packer should fail this build... exit 1 fi ``` It really is that simple. Systemd.resolved will happily do split-zone DNS. I think this functionality was intended for VPN users, but we can take advantage of this for our purposes. Rather than tell systemd.resolved that `$host.internal.corp.com` can be reached via `ppp01`, we tell resolvd that `$host.consul` can be resolved via `dummy0` and bind consul-agent to `dummy0`. Oh the fun to be had with virtual interfaces.... :).