Roadmap¶
Current release: v0.9.17
The milestone list below is included verbatim from ROADMAP.md in the repository root, which is the single source of truth for what is shipped. Edit that file β this page cannot drift from it, and the docs build fails if the include is removed or the version above stops matching Cargo.toml.
πΊοΈ Roadmap¶
β v0.1.0 - Foundation¶
- Project structure with Clean Architecture
- Rust workspace with 5 crates + tests
- Axum web server integration
- Modern dashboard with HTMX + Alpine.js
- REST API endpoints structure
- SQLite persistence
- Basic DNS server implementation
- Full DNS resolver (A, AAAA, CNAME, MX, TXT, PTR, RFC...)
- Upstream DNS forwarding UDP
- Upstream DNS-over-HTTPS (DoH)
- Upstream DNS-over-TLS (DoT)
- Load balancing across upstreams
- Query caching with TTL
- Local DNS records (domain.local)
- Cache L1/L2
- Cache LFUK eviction (sliding window)
- Bloom filter
- Core tests coverage
β v0.2.0 - Blocklist & Whitelist¶
- Auto detect client IP and MAC address
- Client groups
- Wildcard domain blocking (
*.ads.com) - Whitelist support
- Blocklist functionality
- Blocklist URL import
- Blocklist regex support
- Allow and block buttons in query log
- Conditional forwarding
β v0.3.0 - Advanced Features¶
- Advanced analytics and graphs (upstream latency, top sites, blocked sites)
- DNS-over-QUIC (DoQ) upstream
- HTTP/3 upstream
- IPv6 upstreams
- DNS name upstreams (e.g. dns.google.com)
- CNAME cloaking detection
- Safe Search enforcement
- Blockable services (1-click)
β v0.4.0 - Parental Controls¶
- Per-group blocklist assignment (assign specific blocklists to client groups)
- Scheduling per group + Parental Controls UI
β v0.5.0 - Server Advanced Features¶
- DoH/DoT server (listener-side, serve encrypted DNS to clients)
- PROXY Protocol v2 (real client IP behind load balancers)
- PTR auto-generation from A records (192.168.1.10 β server.local creates 10.1.168.192.in-addr.arpa PTR)
- DNS Rebinding Protection
β v0.6.0 - Performance & Scale¶
- Pi-hole compatible API
- Performance benchmarks vs. competitors
- dashboard Setting system status, pools dns status, cache ouverview, system information, kernel, uptime, load etc..
β v0.7.0 - Security¶
- Login / Auth
- HTTPS for Web UI
- API Key / token
- Rate limiting DNS (token bucket per-subnet, slip TC=1, dry-run, NXDOMAIN budget)
- DoS protection (TCP/DoT per-IP connection limiting, RAII guards)
- DNS Tunneling Detection (two-phase: hot-path O(1) guard + background statistical analysis)
- NXDomain hijack detection (detect ISP/upstream NXDOMAIN redirection)
- Response IP filtering (block known C2 IPs in DNS responses)
- DGA Detection (Domain Generation Algorithm β entropy + n-gram + lexical analysis)
- Separate listening ports for DoH and Admin UI
π― v0.8.0 - Export & Observability (Current)¶
- Config export/import (backup and restore)
- Prometheus metrics
- OpenAPI / Swagger docs
- Predictive prefetch β delivered via
cache_optimistic_refresh(popularity/recency-weighted near-expiry refresh + serve-stale); speculative Markov co-occurrence prefetch evaluated and dropped as low-value/privacy-risk for a forwarder
π― v0.9.0 - Protocol Hardening & Privacy¶
- Upstream anti-spoofing β off-path forgery validation on every plain-UDP (Do53) upstream response, for every record type: transaction-ID + question name/type checks always on; DNS Cookies (RFC 7873) always sent and validated gracefully; opt-in 0x20 QNAME case randomization (draft-vixie-dns-0x20) via
qname_case_randomization, stripped from the response before it is cached so it never reaches clients. Encrypted transports (DoT/DoH/DoQ) skip cookie/0x20 validation (TLS already authenticates the upstream), tolerating upstreams that normalize QNAME case. Upstream source ports rotate so a discovered port goes stale - DNSSEC downgrade detection β an empty DS answer is checked against the parent's authenticated NSEC/NSEC3 denial (RFC 4035 Β§5.2); a signed proof that contradicts the answer is Bogus. Detection, not enforcement: a missing or unauthenticated authority section fails open to the previous insecure-delegation behaviour, so an attacker who composes the whole response can still downgrade by omitting the proof. Fail-opens are counted at
GET /api/dnssec/stats(ds_denial_fail_opens) so the gap is visible; making it enforcing needs an opt-in strict knob, still to do - EDNS UDP payload size negotiation + correct TC truncation (RFC 6891 Β§6.2.5 / RFC 7766) β honor client-advertised buffer, set TC=1 on oversized responses
- DNSSEC validation enforcement (RFC 4035 / RFC 6840) β SERVFAIL on Bogus, AD bit set/clear from validation, honor client CD bit (upgrade from current advisory
dnssec_statustagging) - DNS-over-QUIC (DoQ) server listener (RFC 9250) β serve encrypted DNS to clients over QUIC (upstream DoQ already supported)
- DNS64 / NAT64 AAAA synthesis (RFC 6147) β
[dns64]enabled/prefix(well-known64:ff9b::/96, /96 only) synthesizes AAAA from A records for IPv6-only clients; reverse PTR synthesis;dns64_synthesizedquery-log tag + Prometheus metric. NAT64 packet translation remains the network gateway's job - EDNS Client Subnet (RFC 7871) β strip client ECS by default for privacy; optional configurable subnet injection upstream for CDN-correct results
- Custom sinkhole IP for blocked responses (configurable A/AAAA target beyond
0.0.0.0/::) β[blocking]sinkhole_ipv4/sinkhole_ipv6, applied tonull_ipblocked answers - TOTP / 2FA β two-phase login (TOTP enrollment +
/auth/2fa/verify) plus WebAuthn passkeys as a second factor or passwordless login, gated on[auth.webauthn]; API keys are exempt
π v1.0.0 - Production Ready¶
- Supply-chain scanning & vulnerability disclosure (cargo audit + Trivy image scan + Dependabot + secret scanning + SECURITY.md private reporting)
- Security audit (threat model + manual review / pentest of the DNS parsing, auth and API attack surface)
- Comprehensive test coverage (>80%)
- Production deployment guide
- API v1 stable
- Full documentation
π― v1.1.0 - Next Features¶
- Suspicious TLD blocking (high-risk TLDs with dedicated UI β .tk, .top, .xyz, .buzz, .gq)
- Threat Intelligence feeds (abuse.ch, OpenPhish, PhishTank β native CSV/JSON ingestion + fast refresh)
- Newly Registered Domain (NRD) blocking (< 30 days, dedicated UI + configurable quarantine window)
- Time-based Blocking (per blocklist and per domain)
- Blocklist Dry-Run / Simulation Mode
- Blocklist Impact Analysis
- Per-blocklist hit stats (24h / 7d / 30d)
- DDNS HTTP endpoint
- ACME DNS-01 challenge endpoint
- Split-horizon DNS (Views)
- Per-group upstream DNS
- Webhook / push notifications
- Audit log for configuration changes
- WebSocket dashboard for slow query monitoring
- Query anomaly detection
- DoH bypass detection (detect malware using direct DoH to public resolvers)
- mDNS / Bonjour device discovery β passive UDP 5353 listener (multicast 224.0.0.251) to label clients by device name instead of bare IPs (listener landed; name parsing + UI labeling in progress)
RFC Compliance¶
| RFC | Topic | Status |
|---|---|---|
| RFC 1035 | DNS basics β A, AAAA, CNAME, MX, TXT, PTR | Done |
| RFC 6891 | EDNS0 OPT records, 1232-byte upstream payload | Done |
| RFC 7766 | DNS over TCP, TC=1 truncation semantics | Done |
| RFC 7858 | DNS-over-TLS (DoT) β server + upstream | Done |
| RFC 8484 | DNS-over-HTTPS (DoH) β server + upstream | Done |
| RFC 9250 | DNS-over-QUIC (DoQ) β server + upstream | Done |
| RFC 9114 | HTTP/3 upstream | Done |
| RFC 4035 / RFC 6840 | DNSSEC validation β AD/CD handling, SERVFAIL on Bogus in strict mode | Done |
| RFC 5155 / RFC 9276 | NSEC3 denial of existence, incl. opt-out and parameter limits | Done |
| RFC 7873 | DNS Cookies β client side always on, server side configurable | Done |
| RFC 8914 | Extended DNS Errors (EDE) | Done |
| RFC 6147 | DNS64 AAAA synthesis (64:ff9b::/96) | Done |
| RFC 6761 | Special-use names (.invalid probes for NXDOMAIN hijack detection) | Done |
| PROXY Protocol v2 | Real client IP behind load balancers (HAProxy spec) | Done |
| draft-vixie-dns-0x20 | QNAME case randomization | Done (opt-in) |
| RFC 7871 | EDNS Client Subnet β strip by default, optional injection | Planned |
| RFC 5011 | Automated trust anchor rollover | Planned |
| RFC 7828 | edns-tcp-keepalive | Planned |
See Security Hardening for what each of the security-related entries actually does and where it stops.
Release history¶
Per-version highlights live in the Changelog; full release notes are published on GitHub Releases.