Ansible playbook to install and configure Pi-hole + DNSCrypt-proxy, with dnscrypt-proxy on 127.0.0.1:5053 and Pi-hole upstream set to 127.0.0.1#5053, and systemd socket activation support.
This repository automates:
- system preparation (apt update/upgrade)
- install required dependencies
- install Pi-hole (unattended)
- install dnscrypt-proxy via package
- configure dnscrypt-proxy (
/etc/dnscrypt-proxy/dnscrypt-proxy.toml) - configure systemd socket override to listen on
127.0.0.1:5053 - configure Pi-hole upstream DNS (
/etc/pihole/setupVars.conf) - restart and enable services (
dnscrypt-proxy.socket,dnscrypt-proxy.service,pihole-FTL)
pihole.yml: main playbookhosts: inventory with grouptestpiroles/system/tasks/main.ymlroles/dependencies/tasks/main.ymlroles/pihole/tasks/main.ymlroles/dnscrypt-proxy/tasks/main.ymlroles/dnscrypt-proxy/files/dnscrypt-proxy.tomlvars/vars.yml
- Control machine with Ansible installed
- SSH key access to target host
- Target host should be Debian/Ubuntu based
-
Clone repo:
git clone git@github.com:<your-user>/ansible-pihole-dnscrypt.git cd ansible-pihole-dnscrypt
-
Edit
hostswith your target:[testpi] 192.168.1.10 ansible_user=ansibleuser
-
Run playbook:
ansible-playbook pihole.yml --limit testpi
-
Check services:
ssh ansibleuser@192.168.1.10 "sudo systemctl status dnscrypt-proxy dnscrypt-proxy.socket pihole-FTL" -
DNS query tests:
ssh ansibleuser@192.168.1.10 "dig @127.0.0.1 google.com" ssh ansibleuser@192.168.1.10 "dig @127.0.0.1 doubleclick.net"
-
Pi-hole upstream:
ssh ansibleuser@192.168.1.10 "sudo pihole-FTL --config dns.upstreams"
dnscrypt-proxyin this playbook uses systemd socket activation and configlisten_addresses = [].- Pi-hole is set to query
127.0.0.1#5053, ensuring encrypted upstream via DNSCrypt. - If
dnscrypt-proxy.socketis masked, playbook unmask and applies override.
MIT