| .github/workflows | ||
| config-samples | ||
| docker | ||
| docs | ||
| scripts | ||
| src | ||
| .gitignore | ||
| LICENSE | ||
| pom.xml | ||
| README.md | ||
| README.pt.md | ||
DNSao
DNSao is a multi-upstream DNS forwarder written in Java, featuring caching, privacy-oriented DNS querying support (DoT and DoH), and a built-in dashboard for real-time metrics.
DNSao is currently under active development
Overview
DNSao is designed to serve as a lightweight, configurable, and privacy-oriented DNS forwarder.
It handles UDP, TCP and HTTP queries, and supports modern encrypted upstreams (DoT/DoH), while maintaining a robust caching system and a simple web interface for live metrics.
Current Features
- Answers UDP, TCP and HTTP for local DNS queries
- Multiple upstream DNS resolvers (UDP/DoT/DoH)
- TTL-aware caching system with asynchronous rewarm
- DNSSEC aware with configurable policies
- Query logging (optional)
- Real-time metrics dashboard built with Bulma + Chart.js
- Pluggable blocklists and local mappings/overrides
- Configuration via a single
application.yml - Systemd-ready installation and lightweight footprint
More info can be found at the documentation.
Building from Source
You can build DNSao using Maven and Java 17 or later.
git clone https://github.com/vitallan/dnsao.git
cd dnsao
mvn clean package -DskipTests
The resulting JAR will be located in:
target/dnsao-<version>.jar
To run it manually:
java -jar target/dnsao-<version>.jar \
-Dconfig=/etc/dnsao/application.yml \
-Dlogback.configurationFile=/etc/dnsao/logback.xml
or, using maven itself:
mvn exec:java
The main branch should be stable.
New releases and docker images are generated based on commit/push on main.
Configuration
All app configuration options are defined in a single application.yml.
More detailed info can be found at the documentation.
Dashboard
DNSao provides a built-in metrics dashboard that displays:
- Query volume
- Searchable queries resolved
- Cache hit/miss rate
- Average response time
- Upstream distribution
Access it via the admin port configured in your application.yml (e.g. http://localhost:8044).
Contributing
Contributions are welcome, but mostly for bug reporting, suggest improvements and general feedback. The server is fairly stable now, but some code is still being created, and a lot of inner interfaces might change without notice.
Issues are the recommended form of contact GitHub.
Credits
DNSao makes use of open-source libraries, including:
- dnsjava — DNS protocol implementation
- Javalin — lightweight web server
- SnakeYAML — YAML configuration
- Minimal-json - JSON manipulation
- Logback — logging framework
Links
Licensed under the MIT License © 2025 Allan Vital