handpose-facemesh-demos
🎥🤟 8 minimalistic templates for tfjs mediapipe handpose and facemesh
Self-hosted DNS with Pi-hole + Unbound + Docker on Raspberry Pi
git clone https://github.com/cherifon/Ultimate-DNS-Shield.gitcherifon/Ultimate-DNS-ShieldBuild your own private, recursive, ad-free DNS server on a Raspberry Pi.
Pi-hole + Unbound + Docker — no Google, no Cloudflare, no ISP in your DNS chain.
Licensed under CC BY-NC 4.0 — free to share with attribution, non-commercial use only. Made by Cherif Jebali
Every DNS query you make goes somewhere. By default, that somewhere is Google (8.8.8.8), Cloudflare (1.1.1.1), or your ISP — and they log it.
This project sets up a fully self-hosted DNS stack on a Raspberry Pi 4:
No third-party resolver ever sees your queries.
Your devices
│
▼
Pi-hole (172.20.0.3:53) ← blocks ads & trackers
│
▼
Unbound (172.20.0.2:5335) ← recursive resolver (no forwarding)
│
▼
Root nameservers ← authoritative source, no intermediary
Unbound is never exposed to the LAN — only Pi-hole can reach it on the internal Docker bridge network.
sudo accessgit clone https://github.com/cherifon/Ultimate-DNS-Shield.git cd ultimate-dns-shield
nano scripts/install.sh
Change these values at the top:
TIMEZONE="Europe/Paris" # Your timezone PIHOLE_PASSWORD="ChangeMePlease" # Choose a strong password PIHOLE_DIR="$HOME/services/pihole"
sudo bash scripts/install.sh
The script automatically:
docker-compose.yml and unbound.confnano scripts/security.sh # Set LOCAL_NETWORK to your subnet (e.g. 192.168.0.0/24) sudo bash scripts/security.sh
Configures UFW firewall, Fail2Ban, and automatic security updates.
In your router's admin panel, set the primary DNS server to your Pi's IP address. Every device on your network will automatically use Pi-hole.
# DNS resolves correctly dig @YOUR_PI_IP google.com # Ads are blocked (returns 0.0.0.0) dig @YOUR_PI_IP doubleclick.net # DNSSEC validation works dig @YOUR_PI_IP sigfail.verteiltesysteme.net # → SERVFAIL (correct) dig @YOUR_PI_IP sigok.verteiltesysteme.net # → NOERROR (correct)
All scripts support --dry-run — shows exactly what would happen without changing anything:
bash scripts/install.sh --dry-run bash scripts/security.sh --dry-run bash scripts/update.sh --dry-run
Run monthly to keep Pi-hole and Unbound up to date:
bash scripts/update.sh
ultimate-dns-shield/
├── README.md
├── config/
│ ├── docker-compose.yml # Ready-to-use container config
│ └── unbound.conf # Recursive resolver config
├── scripts/
│ ├── install.sh # Full automated installation
│ ├── security.sh # UFW + Fail2Ban hardening
│ └── update.sh # Update containers
└── guide/
└── Ultimate_DNS_Shield_Guide.pdf # Full step-by-step guide
The PDF guide goes deep into every step:
Add these in Pi-hole under Adlists > Update Gravity:
| List | Description |
|---|---|
| Steven Black | Gold standard, ~200k entries |
| Hagezi Pro | Aggressive, low false positives |
| OISD Big | Large, tuned for smart home devices |
This project is licensed under CC BY-NC 4.0.
You are free to share and adapt this material for non-commercial purposes, as long as you give appropriate credit to Cherif Jebali.
Cherif Jebali
Built as a practical project to learn Docker, Linux hardening, and DNS privacy.
more like this
🎥🤟 8 minimalistic templates for tfjs mediapipe handpose and facemesh
Firefox and Chrome extensions to prevent Google from making links ugly.
search projects, people, and tags