Configuration Reference - thakares/nx9-dns-server GitHub Wiki
This page provides a complete reference for all configuration options available in the nx9-dns-server.
Configuration of nx9-dns-server is primarily done through environment variables, making it flexible for different deployment scenarios including traditional server deployments, Docker containers, and orchestration platforms like Kubernetes.
Variable | Description | Default | Example |
---|---|---|---|
DNS_BIND | IP address and port to bind DNS server | 0.0.0.0:53 | 192.168.1.10:53 |
DNS_DB_PATH | Path to SQLite database file | dns.db | /var/nx9-dns-server/dns.db |
DNSSEC_KEY_FILE | Path to DNSSEC key file | (Required) | /var/nx9-dns-server/Kexample.com.+008+24550.key |
DNS_FORWARDERS | Comma-separated list of upstream DNS resolvers | (None) | 8.8.8.8:53,1.1.1.1:53 |
DNS_NS_RECORDS | Comma-separated list of NS records | (Required) | ns1.example.com.,ns2.example.com. |
DNS_CACHE_TTL | Cache TTL in seconds | 3600 | 7200 |
For traditional Linux deployments, a systemd service file is recommended. Create /etc/systemd/system/dns-server.service
:
[Unit]
Description=NX9 DNS Server
After=network.target
[Service]
Type=simple
User=dnsuser
Group=dns
WorkingDirectory=/var/nx9-dns-server
ExecStart=/usr/local/bin/dns_server
Restart=on-failure
RestartSec=5s
Environment="DNS_BIND=0.0.0.0:53"
Environment="DNS_DB_PATH=/var/nx9-dns-server/dns.db"
Environment="DNSSEC_KEY_FILE=/var/nx9-dns-server/Kexample.com.+008+24550.key"
Environment="DNS_FORWARDERS=8.8.8.8:53,1.1.1.1:53"
Environment="DNS_NS_RECORDS=ns1.example.com.,ns2.example.com."
Environment="LOG_FILE=/var/log/nx9-dns-server/server.log"
Environment="AUTH_SECRET=your-secure-random-string-here"
[Install]
WantedBy=multi-user.target
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable dns-server.service
sudo systemctl start dns-server.service
When running with Docker, environment variables can be passed directly to the container:
docker run -d --name nx9-dns \
-p 53:53/udp -p 53:53/tcp \
-p 8080:8080 -p 8081:8081 \
-v /path/to/dns.db:/var/nx9-dns-server/dns.db \
-v /path/to/keys:/etc/nx9-dns-server/keys \
-e DNS_BIND=0.0.0.0:53 \
-e DNS_DB_PATH=/var/nx9-dns-server/dns.db \
-e DNSSEC_KEY_FILE=/etc/nx9-dns-server/keys/Kexample.com.key \
-e DNS_FORWARDERS=8.8.8.8:53,1.1.1.1:53 \
-e DNS_NS_RECORDS=ns1.example.com.,ns2.example.com. \
-e WEB_UI_BIND=0.0.0.0:8080 \
-e API_BIND=0.0.0.0:8081 \
-e AUTH_SECRET=your-secure-random-string-here \
nx9-dns-server:latest
-
Security:
- Always bind web UI and API services to localhost (
127.0.0.1
) in production unless external access is required - Use strong, randomly generated values for
AUTH_SECRET
- Set up SSL certificates for web UI and API services
- Always bind web UI and API services to localhost (
-
Performance:
- Adjust
WORKER_THREADS
based on available CPU cores - Tune
DB_CACHE_SIZE
based on database size and available memory - Consider increasing
MAX_UDP_SIZE
for DNSSEC responses
- Adjust
-
Resilience:
- Always configure multiple DNS forwarders for redundancy
- Set up log rotation to prevent disk space issues
- Use the systemd
Restart=on-failure
option or Docker'srestart: unless-stopped
policy