-
Notifications
You must be signed in to change notification settings - Fork 3
Frequently Asked Questions
This page answers common questions about nx9-dns-server installation, configuration, and operation.
nx9-dns-server is a high-performance, RFC-compliant authoritative DNS server implemented in Rust. It is designed to serve DNS records for your domains with support for various record types, DNSSEC, and management interfaces.
- Performance: Built in Rust with asynchronous I/O for high throughput
- Modern Design: Clean architecture with a focus on security and reliability
- Ease of Use: Upcoming web UI and API for simple management
- Focused Purpose: Specifically designed as an authoritative DNS server
- Lightweight: Small memory and CPU footprint compared to full-featured DNS servers
- SQLite Backend: Simple database storage for easy backup and migration
- Hosting DNS for your own domains
- Internal DNS for corporate networks
- DNS service for hosting providers
- Development and testing environments
- Educational purposes to learn about DNS
The core DNS server functionality is stable and suitable for production use. The web UI and API features are still under development. Many organizations are successfully using nx9-dns-server in production for authoritative DNS services.
nx9-dns-server supports the following record types:
- A (IPv4 address)
- AAAA (IPv6 address)
- MX (Mail exchange)
- NS (Name server)
- SOA (Start of authority)
- PTR (Pointer)
- TXT (Text)
- CNAME (Canonical name)
- SRV (Service)
- CAA (Certificate Authority Authorization)
- DNSKEY, RRSIG, DS (DNSSEC records)
Yes, nx9-dns-server includes comprehensive DNSSEC support. It can load existing DNSSEC keys, sign zone records, and serve DNSSEC-related records (DNSKEY, RRSIG, DS). Instructions for creating DNSSEC keys are provided in the README.
No, nx9-dns-server is designed specifically as an authoritative DNS server. It does not perform recursive resolution. For a recursive resolver, consider using software like Unbound or PowerDNS Recursor.
Minimal requirements:
- Linux (Debian, Ubuntu, CentOS, Alpine) or macOS
- 1 CPU core
- 256MB RAM
- 10MB disk space
- Rust 1.60+ (for building)
Recommended:
- 2+ CPU cores
- 1GB RAM
- SSD storage
- Rust 1.72+
Performance varies based on hardware, but typical benchmarks show:
- 5,000-10,000 QPS on modest hardware (2 cores, 1GB RAM)
- 20,000-40,000 QPS on better hardware (4+ cores, 2GB RAM)
- DNSSEC-signed responses perform at about 60-70% of unsigned responses
Clustering support is on the roadmap but not yet implemented. Currently, you can achieve high availability using multiple independent instances behind a load balancer.
There are several installation methods:
-
Build from source:
git clone https://github.com/thakares/nx9-dns-server.git cd nx9-dns-server cargo build --release -
Docker:
docker run -d --name nx9-dns \ -p 53:53/udp -p 53:53/tcp \ -v /path/to/dns.db:/var/nx9-dns-server/dns.db \ -v /path/to/keys:/etc/nx9-dns-server/keys \ nx9-dns-server:latest
-
Pre-built binaries: Download from the GitHub releases page.
While the core code should compile on Windows, we officially support and test on Linux and macOS. Windows users should use Docker or WSL (Windows Subsystem for Linux).
For production deployments, we recommend:
- Setting up a systemd service (see deployment section in README)
- Using proper firewall rules
- Configuring DNSSEC
- Setting up monitoring
- Implementing regular backups of the SQLite database
- UDP port 53 (standard DNS)
- TCP port 53 (DNS over TCP, zone transfers)
- TCP port 8080 (Web UI - if enabled)
- TCP port 8081 (API - if enabled)
- TCP port 9100 (Metrics - if enabled)
Configuration is primarily done through environment variables. See the Configuration Reference wiki page for a complete list of options.
Key environment variables:
export DNS_BIND="0.0.0.0:53"
export DNS_DB_PATH="/var/nx9-dns-server/dns.db"
export DNSSEC_KEY_FILE="/var/nx9-dns-server/Kexample.com.+008+24550.key"Currently, DNS records are managed through the SQLite database. You can:
- Use SQL commands directly
- Use the upcoming web UI (in development)
- Use the upcoming API (in development)
Example SQL to add a record:
INSERT OR REPLACE INTO dns_records VALUES
('example.com', 'A', '203.0.113.10', 3600);Since records are stored in a SQLite database, you can simply back up the database file:
cp /var/nx9-dns-server/dns.db /path/to/backup/dns.db.bakFor added safety, you should also back up:
- DNSSEC key files
- Configuration files and environment variables
- Customized scripts or templates
-
Generate a DNSSEC key pair:
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com
-
Set the
DNSSEC_KEY_FILEenvironment variable:export DNSSEC_KEY_FILE="/path/to/Kexample.com.+008+24550.key"
-
Submit DS records to your parent zone (usually through your domain registrar).
For detailed instructions, see the "How to Create DNSSEC_KEY_FILE" section in the README.
Common causes:
- Database permissions: Ensure the database file is readable by the server
- DNSSEC key issues: Check that the key file exists and is valid
- Record format errors: Verify your DNS records follow the correct format
- Resource constraints: Check system resources (CPU, memory)
Check server logs for specific error messages:
sudo journalctl -u dns-server.service
# or
sudo cat /var/log/nx9-dns-server/server.logUse the provided diagnostic tools:
# Check all record types
./tools/dnscheck.sh
# Test specific domain
dig @localhost example.com ACheck:
- Firewall rules: Ensure UDP and TCP port 53 are open
- Binding address: Make sure the server is binding to the correct interface
- Database content: Verify your database has records for the queried domain
- Network constraints: Check if your ISP blocks DNS traffic
Common issues:
- Key file format: Ensure the key file is properly formatted
- Key permissions: Check file permissions on the key file
- Missing DS records: Ensure DS records are published in parent zone
- TTL issues: Check if old records are cached
Check:
-
Service binding: Verify binding address is correct (
0.0.0.0vs127.0.0.1) - Firewall rules: Ensure ports 8080/8081 are open
- Service status: Confirm the services are enabled in configuration
- Authentication: Check credentials if authentication is enabled
We welcome contributions! See our Contributing Guidelines for details.
Priority areas for contribution:
- Web UI development
- API service implementation
- Documentation improvements
- Testing and quality assurance
Please use GitHub issues:
- Bug reports: https://github.com/thakares/nx9-dns-server/issues/new?template=bug_report.md
- Feature requests: https://github.com/thakares/nx9-dns-server/issues/new?template=feature_request.md
Yes, see our Roadmap for planned features and development priorities.
- Contribute code or documentation
- Report bugs and test releases
- Share your experience using nx9-dns-server
- Consider sponsoring the project on GitHub
- Help improve these wiki pages
Currently, there is no official commercial support. Support is provided through:
- GitHub issues
- Community forums
- Email support (for critical issues)
- GitHub Discussions: https://github.com/thakares/nx9-dns-server/discussions
- Community chat: [Link to chat platform]
- Monthly community calls (see project website for schedule)
- Watch the GitHub repository
- Follow the project on social media
- Subscribe to release announcements (link in project README)
- Check the releases page periodically
The project is maintained by a small team of core contributors led by Sunil P. Thakare sunil@thakares.com, with support from an active community of contributors.