Skip to content

DNS Server

The DNS server allows you to run your own DNS server with custom host mappings and upstream DNS fallback.

Basic Usage

Start Basic Server

Start a DNS server on the default port 53:

bash
dns server --port 53

Start with Custom Port

bash
dns server --port 5353

Options

--port

DNS server port. Default: 53.

bash
dns server --port 5353

--host

Listen address. Default: 0.0.0.0.

bash
dns server --host 127.0.0.1 --port 53

--upstream

Upstream DNS server. Can be specified multiple times. Supports:

  • Plain DNS: 8.8.8.8:53
  • DNS-over-TLS: tls://1.1.1.1
  • DNS-over-HTTPS: https://dns.adguard.com/dns-query
bash
dns server --port 53 --upstream 8.8.8.8:53 --upstream tls://1.1.1.1

--config

Path to configuration file. See Configuration for details.

bash
dns server --config /path/to/config.yaml

--dot

Enable DNS-over-TLS (DoT) server.

bash
dns server --port 53 --dot --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem

--tls-cert / --tls-key

TLS certificate and key files for DoT, DoH, and DoQ servers.

bash
dns server --dot --tls-cert cert.pem --tls-key key.pem

--dot-port

DoT server port. Default: 853.

bash
dns server --dot --dot-port 853 --tls-cert cert.pem --tls-key key.pem

--doh

Enable DNS-over-HTTPS (DoH) server.

bash
dns server --port 53 --doh --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem

--doh-port

DoH server port. Default: 443.

bash
dns server --doh --doh-port 443 --tls-cert cert.pem --tls-key key.pem

--doq

Enable DNS-over-QUIC (DoQ) server.

bash
dns server --port 53 --doq --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem

--doq-port

DoQ server port. Default: 853.

bash
dns server --doq --doq-port 853 --tls-cert cert.pem --tls-key key.pem

--ttl

TTL for DNS responses in seconds. Default: 500.

bash
dns server --port 53 --ttl 300

--disable-system-hosts

Disable system hosts file lookup.

bash
dns server --port 53 --disable-system-hosts

--system-hosts-file

Path to system hosts file. Default: /etc/hosts.

bash
dns server --port 53 --system-hosts-file /custom/hosts

Response cache (upstream answers)

Caches final A/AAAA answers that required upstream (including config/system alias chains). Static hosts and /etc/hosts IP hits are not cached and are always evaluated first.

FlagDefaultDescription
--disable-cacheoffDisable response cache (DNS_DISABLE_CACHE=true)
--cache-ttl300sTTL when the answer has at least one IP (DNS_CACHE_POSITIVE_TTL)
--cache-negative-ttl60sTTL for empty / NXDOMAIN-style answers (DNS_CACHE_NEGATIVE_TTL)
--cache-max-entries10000Max entries (DNS_CACHE_MAX_ENTRIES)

With a config file, YAML cache.* overrides these defaults unless you set the corresponding flag explicitly on the CLI. --disable-cache wins over cache.enabled: true.

bash
# Cache is on by default; tune TTLs:
dns server --port 53 --upstream 8.8.8.8:53 --cache-ttl 10m --cache-negative-ttl 120s
dns server --disable-cache

See Configuration for the cache: YAML block.

Command Line Flags Override Config File

Command line flags take precedence over configuration file values:

bash
# config.yaml has port: 53, but command line overrides it
dns server --config config.yaml --port 5353

Examples

Basic Server with Upstream

bash
dns server --port 53 --upstream 8.8.8.8:53

Server with DoT

bash
dns server --port 53 --dot --tls-cert cert.pem --tls-key key.pem

Server with DoH

bash
dns server --port 53 --doh --tls-cert cert.pem --tls-key key.pem

Server with DoQ

bash
dns server --port 53 --doq --tls-cert cert.pem --tls-key key.pem

Server with Multiple Protocols

bash
# Enable all protocols (DoT, DoH, DoQ)
dns server --port 53 \
  --dot --dot-port 853 \
  --doh --doh-port 443 \
  --doq --doq-port 853 \
  --tls-cert cert.pem --tls-key key.pem

Server with Configuration File

bash
dns server --config config.yaml

Next Steps

Released under the MIT License.