Everything you want from a DNS server.
Pharos speaks CoreDNS: same Corefile, same plugins, same metrics. We just rebuilt it in Rust so it goes faster and stays out of trouble.
- 62 plugins
Plugins you love
kubernetes, forward, cache, rewrite, file and the rest of the CoreDNS favourites, built right in. Stack the ones you need in a Corefile.
Browse the plugins - Corefile
Bring your Corefile
If CoreDNS 1.15 runs it, Pharos runs it, and it means the same thing. Switching is an image swap, not a rewrite.
See how moving works - k8s · etcd · route53
Service discovery, sorted
Answer straight from Kubernetes, etcd or Nomad, or from Route 53, Azure DNS and Cloud DNS. No glue scripts.
Find your backend - 0 allocs / query
Fast by design
No heap allocation per query and a plugin chain compiled for your build. The speed comes from what the hot path skips.
Why it’s quick - forbid(unsafe)
Safe Rust all the way down
Every crate forbids unsafe code, including the parser that reads whatever the network throws at it.
How we keep it safe - dot · doq · doh
Encrypted DNS, any flavour
DNS over TLS, QUIC, HTTPS and HTTP/3 out of the box, plus gRPC. Each one is a single line in your Corefile.
See the transports
Pharos vs CoreDNS.
We’re putting both servers through the same paces. Throughput, latency and memory land right here once the runs are done.
- Pharos
- CoreDNS 1.15
- Throughputqueries/s, higher is better
- Pharosnot measured yetCoreDNS 1.15not measured yet
- Latency p50ms, lower is better
- Pharosnot measured yetCoreDNS 1.15not measured yet
- Latency p99ms, lower is better
- Pharosnot measured yetCoreDNS 1.15not measured yet
- Peak memoryMiB, lower is better
- Pharosnot measured yetCoreDNS 1.15not measured yet
Try it on your Corefile.
Ask Pharos what it thinks of your config, then let it serve. It reads /etc/pharos/pharos.conf, so one mount is all it takes.
# see what changes for your Corefile, if anything$ docker run --rm \-v "$PWD/Corefile:/etc/pharos/pharos.conf:ro" \ghcr.io/itsmeyaw/pharos:1.0.0 check # serve it on port 53$ docker run --rm -p 53:53/udp -p 53:53/tcp \-v "$PWD/Corefile:/etc/pharos/pharos.conf:ro" \ghcr.io/itsmeyaw/pharos:1.0.0