Fast DNS cache
TTL-clamped LRU caching returns repeat lookups immediately and restores warm state after restart.
self-hosted DNS sinkhole - written in Rust
Privacy-first DNS for home labs and small networks: encrypted upstreams, smart blocklists, custom records, live stats, and a web UI that feels like an ops panel instead of a chore.
Network control
Ferrite keeps the hot path small: cached decisions, compiled blocklists, direct custom DNS answers, and encrypted upstream fallback when the request needs to leave your network.
TTL-clamped LRU caching returns repeat lookups immediately and restores warm state after restart.
Hosts files, Adblock rules, plain domain lists, wildcards, whitelist, and blacklist controls are merged into a fast lookup layer.
Use plain DNS, DNS-over-HTTPS, DNS-over-TLS, and DNS-over-QUIC in one resolver pool with failover.
Local A, AAAA, and CNAME records support exact and wildcard domains, so internal services get clean names.
The dashboard summary is served from memory, safe to poll frequently, and includes counters, recent activity, and timeseries data.
Settings, lists, custom records, auth, client aliases, updates, and query history are managed through the API without restarting the resolver.
Resolver pipeline
Ferrite resolves local records first, skips logging for configured noisy domains, blocks known bad traffic, and only then forwards to encrypted upstreams. That keeps the network calm and the UI honest.
53/udp
<1ms
FST
TLS
Web UI
The UI mirrors the resolver: dense, readable, and live. Watch query volume, blocked traffic, client activity, custom DNS, blocklists, and settings from the same place.
http://fe.te
Install
The installer downloads the server and web UI release assets, prepares system paths, and sets up the service for systemd, OpenRC, or launchd where available.
curl -fsSL https://raw.githubusercontent.com/syntlyx/ferrite-server/refs/heads/main/install.sh | sudo sh
cargo build --release
sudo cp target/release/ferrite /usr/local/bin/ferrite
ferrite passwd
Ferrite serves a built-in
fe.te record that points to the
detected local server address, so the panel is
easy to find on the LAN.
User config lives at
~/.config/ferrite/config.toml;
system-wide config lives at
/etc/ferrite/config.toml.
The web UI can be updated through
POST /api/update/web once Ferrite
is running.