|
| 1 | +--- |
| 2 | +title: darvaza.org/penne |
| 3 | +description: Config-driven, pipeline-oriented DNS resolver that allows complex workflows to be defined simply, with split-horizon DNS support built on the Darvaza sidecar engine and resolver interface. |
| 4 | +category: |
| 5 | + - darvaza |
| 6 | + - networking |
| 7 | + - go |
| 8 | +repo: github:darvaza-proxy/penne |
| 9 | +licence: MIT |
| 10 | +go: darvaza.org/penne |
| 11 | +--- |
| 12 | + |
| 13 | +Config-driven, pipeline-oriented DNS resolver that allows complex |
| 14 | +workflows to be defined simply. Built using the Darvaza sidecar |
| 15 | +engine and :go-pkg{mod="darvaza.org/resolver"}. |
| 16 | + |
| 17 | +## Architecture |
| 18 | + |
| 19 | +Penne uses a pipeline/middleware design with three resolver modes: |
| 20 | + |
| 21 | +- **Iterative** — performs iterative DNS resolution from root servers. |
| 22 | +- **Forwarder** — forwards queries to upstream resolvers. |
| 23 | +- **Chained** — chains multiple resolver strategies together. |
| 24 | + |
| 25 | +## Key features |
| 26 | + |
| 27 | +- **Horizons** — named CIDR sets that route, annotate, or filter DNS |
| 28 | + requests based on the client's IP address, enabling split-horizon DNS. |
| 29 | +- **Pattern matching** — uses globbing (via |
| 30 | + :go-pkg{mod="github.com/gobwas/glob"}) instead of regex for suffix |
| 31 | + matching and name rewrites, with capture group replacements |
| 32 | + (`${n}`). |
| 33 | +- **Capabilities** — domain-specific resolver restriction, record |
| 34 | + filtering (e.g., dropping `AAAA` records), and request/response |
| 35 | + rewriting. |
| 36 | + |
| 37 | +## Configuration |
| 38 | + |
| 39 | +Penne is designed to be config-driven, with YAML or JSON |
| 40 | +configuration files defining resolver pipelines, horizons, |
| 41 | +and transformation rules. This allows complex DNS workflows to |
| 42 | +be declared without writing code. |
| 43 | + |
| 44 | +## Planned features |
| 45 | + |
| 46 | +Future versions of Penne will adopt a plugin architecture — each |
| 47 | +capability below is planned as a standalone plugin, so you only |
| 48 | +install the pieces you need. The planned plugins are: |
| 49 | + |
| 50 | +- **Authoritative DNS** — host your own DNS zones with persistent |
| 51 | + storage, turning Penne into a full network DNS server. |
| 52 | +- **DHCP server** — integrated DHCP lease management alongside DNS, |
| 53 | + keeping address assignment and name resolution under one roof. |
| 54 | +- **IPAM server** — IP Address Management for tracking address |
| 55 | + usage, planning subnets, and managing allocations across the |
| 56 | + network. |
| 57 | +- **Security license (Protective DNS)** — threat protection at the |
| 58 | + DNS layer, blocking known malicious domains, phishing sites, and |
| 59 | + malware command-and-control servers. |
| 60 | +- **Enhanced reporting** — richer analytics and reporting on DNS |
| 61 | + activity across the network. |
| 62 | +- **Blocklists** — network-wide domain blocking, similar to ad-blockers |
| 63 | + but applied at the server level for all clients. |
| 64 | +- **HA clustering** — high-availability mode with multiple Penne nodes |
| 65 | + staying in sync to provide failover if one node goes down. |
| 66 | + |
| 67 | +## See also |
| 68 | + |
| 69 | +- DNS resolver library — :go-pkg{mod="darvaza.org/resolver"} |
| 70 | +- Core helpers — :go-pkg{mod="darvaza.org/core"} |
| 71 | +- Structured logging — :go-pkg{mod="darvaza.org/slog"} |
0 commit comments