dns-rs
dns-rs is a network-wide DNS sinkhole written in Rust, a modern alternative to Pi-hole built to run in a container and as stateless replicas on Kubernetes. It forwards queries to an upstream resolver with a cache, blocks the names on your blocklists, answers local records, and forwards chosen domains to their own server. It exports a query log, Prometheus metrics and Kubernetes probes.
All configuration is a TOML file that dns-rs reloads without a restart. The project is young: see the README for its current status.
Where to start
- New here: Getting started.
- Coming from Pi-hole: Migrating from Pi-hole.
- Deploying: Container image or Kubernetes.
Pages
| Page | Content |
|---|---|
| Getting started | Run the image or the Helm chart, check it, point clients at it |
| Migrating from Pi-hole | How Pi-hole concepts map to dns-rs, and what is missing |
| Configuration | Every setting, default, environment override and reload behavior |
| Blocklists | Supported formats, rule syntax, blocking modes, download limits |
| Metrics and probes | The HTTP endpoint: /healthz, /readyz, /metrics, /api/v1/check, /api/v1/status and the metric series |
| Logging | The query log and the operational log messages |
| Container image | Published tags, running the image, ports, signals |
| Releasing | Cutting a release: the tag checks and what gets published |
| Kubernetes | The Helm chart: objects, values, configuration changes, pod security |
| Architecture decisions | Why dns-rs works the way it does |
Source code and issues: github.com/EvannDev/dns-rs.