November 29, 2019

dnscrypt-proxy on systemd targets (at least Ubuntu)

If you ever tried to run dnscrypt-proxy on a recent Ubuntu 18, you will likely encounter something like this:

[FATAL] listen udp 127.0.0.1:53: bind: permission denied

Well, turns out that the systemd configuration file isn't allowing dnscrypt-proxy to bind to priviledged ports (everything less than 1024).

The fix is simple. Modify your systemd configuration file , in my case located at

/etc/systemd/system/multi-user.target.wants/dnscrypt-proxy.service

and add

# Add capabilities to bind to privileged ports
AmbientCapabilities=CAP_NET_BIND_SERVICE

somewhere within the [Services] section. Bad thing is that it seems to overwrite that configuration file on an update. Yikes.