DNS filtering platform with DNS-over-HTTPS (DoH), a web UI, and an API to manage domains, clients, and blocklists.
Internet (clients)
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Reverse proxy (Nginx · audacious_frontend) │
│ :80 / :443 · TLS · LetsEncrypt │
└────────────────────┬────────────────────┬───────────────────┘
│ │
api.<domain> │ │ dns.<domain>
│ │ · SPA
▼ SPA calls API │ · DoH + DNS
┌───────────────┐ │
│ audacious_api │ │
│ FastAPI :8080 │ ▼
│ │ ┌─────────────────┐
└───────┬───────┘ │ audacious_core │
│ │ dnsdist │
│ │ PowerDNS │
▼ └────────┬────────┘
┌────────────────┐ │
│ database (vol) │ ▼
└────────────────┘ ┌────────────────┐
│ upstream │
│ resolvers │
└────────────────┘
Components
| Component | Role |
|---|---|
Reverse proxy (Nginx in audacious_frontend) |
Publishes the API, the DoH server, and the frontend SPA. TLS termination, routing by host/path. |
| Frontend SPA | Web UI served at dns.<domain>; talks to the API to manage domains, clients, blocklists. |
| audacious_api | REST API (domains, clients, categories, stats). Feeds blocklist/config to the core. |
| audacious_core | DoH (/dns-query on :5300) and DoT (:853). dnsdist + PowerDNS Recursor; applies policy and recursion. |
- Docker and Docker Compose
- LetsEncrypt certificates for
api.<domain>,dns.<domain>, and optional custom domain (e.g.capysecurity.com) - Host ports 80, 443 (frontend), and optionally 53, 853 (if exposing core directly)
-
Build images
docker compose build
-
Run
docker compose up -d
-
Configure
Editdocker-compose.yamland the frontend Dockerfile build args:domain,ip_address,custom_domainso Nginx and cert paths match your setup. -
Certificates
Mount your LetsEncrypt dir (e.g./etc/letsencrypt) intoaudacious_frontendandaudacious_coreas in the compose file. Obtain certs with certbot (standalone or DNS challenge) for the hostnames you use.
audacious_dns/
├── docker-compose.yaml # API, core, frontend
├── audacious_api/ # FastAPI app, SQLite, domain/client/blocklist logic
├── audacious_core/ # dnsdist + PowerDNS Recursor config
└── audacious_frontend/ # Nginx configs (templates), static SPA, custom site volume
Gaël Soudé — superjcvd@hotmail.com