Back to Labs

Takelan DNS Server

A BIND9-compatible DNS server with health-aware answers, clustering and DNSSEC

tldns is an authoritative and recursive DNS server written in Rust. It reads your BIND9 zone files and named.conf, then adds what a small team would otherwise bolt on: health-aware failover, nodes that stay in sync, DNSSEC, encrypted DNS and a dashboard.

Labs projectRustSource-availableDNSSECClustering

At a glance

  • Reads BIND9 zone files and named.conf
  • UDP, TCP, DNS over TLS, HTTPS and QUIC
  • DNSSEC signing, including multi-signer
  • Health-aware pools and GeoDNS
  • Nodes that sync zones, config and credentials
  • Behind Takelan DNS hosting and Dynamic DNS

Where it stands

What this project is, and what we do not claim.

A Labs project

The server is source-available under the Takelan OSS License and still changing. This page describes the server and how it is wired to Takelan. It is not a service promise.

Behind two live products

DNS hosting and Dynamic DNS in Takelan Utilities are live. They run on a cluster of these servers, in Michigan, New Jersey and Germany.

Honest about versions

Some server features need a recent build: the per-domain query log, cluster DNSSEC, cluster-wide zone deletes and Defense Intelligence. Utilities shows a server that lacks one as not available. It does not guess.

No numbers we cannot back

We do not publish an uptime figure, an SLA or a speed claim here. The server's own docs hold a benchmark, with its method and caveats, and a list of what BIND9 still does better.

What it supports

Taken from the server's own docs. Each feature is off by default and fails open, unless the docs say otherwise.

Answers

  • Authoritative serving and recursive resolution, with a cache that can serve stale answers and prefetch.
  • UDP and TCP on port 53, DNS over TLS (RFC 7858), DNS over HTTPS (RFC 8484, GET and POST) and DNS over QUIC (RFC 9250). The encrypted listeners are switched on in configuration.
  • EDNS(0), DNS cookies, NSID, extended DNS errors and EDNS client subnet.
  • BIND9 zone files and named.conf, parsed and never rewritten. Wildcards, DNAME, glue and SVCB/HTTPS records (RFC 9460).
  • A check mode that tells you which named.conf directives and zones it can serve, before you switch.

Zones and changes

  • Zone transfers: AXFR and IXFR, NOTIFY and secondary zones. Transfers and updates are denied unless you allow them.
  • Dynamic updates (RFC 2136) with TSIG (RFC 8945), and catalog zones (RFC 9432).
  • Dynamic DNS keys: a signed HTTP update for one name, for routers and scripts.
  • Zone versions with diff and rollback. A comment and a few metadata keys on each zone.
  • Hot reload without a restart. Backup, restore and verify from the command line.

DNSSEC

  • Online signing, with one combined key per zone by default. Algorithms 8, 10, 13 (the default), 14 and 15.
  • Authenticated denial with NSEC3 (the default) or NSEC, with correct wildcard proofs. CDS and CDNSKEY records are served.
  • It prints the DS records to publish at your registrar. It reads and writes standard BIND key files.
  • Multi-signer (RFC 8901, model 2), so a zone can be signed by more than one provider, or by every node of a cluster, each with its own keys.
  • A validating forwarder for recursed answers is built. Its notes say to check how far it is wired in your release before you rely on it.

Smart answers

  • Health-aware pools: a name answers with the members that are alive now. Priority tiers, weights, N-of-M and standby members.
  • Probes over TCP, UDP, HTTP, HTTPS, DNS and TLS, and a local command check that never leaves its node.
  • GeoDNS: named country and continent regions, or the nearest healthy datacenter by distance, with failover.
  • All of it is off until you switch it on, and it fails open to the plain zone answer.

Clusters

  • Nodes push zone, record and config changes to each other, with retries and a catch-up pass so a node that was away converges when it returns.
  • Last writer wins, with a fixed tie-break. A zone delete spreads too, and every node keeps a marker so an old write cannot bring the zone back.
  • Credentials sync on their own channel. Node-local settings such as identity, listen ports and file paths never leave their node.
  • The management plane uses TLS with a cluster certificate authority the nodes create themselves.

Defense

  • Rate limits per client, response rate limiting and a guard against amplification.
  • Defense Intelligence: each node watches its own traffic for query floods, random-name floods, amplification, spoofed sources, connection floods and password guessing, and shares what it finds with its peers.
  • Mitigations are throttle, block, force TCP, and a limit on made-up names under one domain. Each one expires on its own, and there are caps and a never-block list.
  • A node starts in observe mode: it detects, records and shares, and enforces nothing until you switch it to enforce.

Running it

  • One binary. It can take the place of the named and rndc programs and keep your units and flags.
  • A dashboard and a REST API, with API keys that carry permissions and can be limited to some domains, and web roles.
  • Analytics and per-domain query log and stats. A multi-worker mode, by default one process per core up to a cap.
  • Packages for deb and rpm, a tarball, a self-extracting installer and a Docker image.

How the nodes work together

Three nodes answer the same zones. A change lands on one node and is pushed to the others.

Inside the cluster

Three nodes answer the same zones. A change lands on one node and is pushed to the others. Each node signs with its own keys and shares only the public half.

How it connects to Takelan Utilities

Utilities is the front door for DNS hosting and Dynamic DNS. The server does the answering, and Utilities keeps the accounts, the rules and the history.

How DNS plugs into Utilities

Utilities owns the accounts, the rules and the history. The DNS servers own the zones and answer the questions. Healthcheck watches them, Reputation hears from them.

Zones come from Utilities

You add a domain in Utilities. It checks the name, checks ownership by delegation or a TXT record, lints the zone on a node, then writes it to one node. The node pushes it to the others, and Utilities confirms that each one now shows the new serial. A node that lags gets a repair task that is retried until it matches.

Dynamic DNS goes through a relay

A router or script signs its update with a key. A relay in Utilities checks the key, the time and the signature, then forwards it to a node, which checks it again. The nodes' management APIs stay private. The key lives on the nodes and is copied to each one. Utilities keeps an encrypted copy of the secret to check the signature.

DNSSEC keys stay on their node

Each node signs with its own keys. The nodes swap only the public keys, so every node serves the same key set and the same DS records. Utilities shows the state per node and the DS records to publish. It refuses to turn signing on unless every node agrees. Nothing is published at your registrar for you.

Logs and stats flow back

Each node keeps a query log. Utilities asks every node for your domain only, merges the answers and shows the log and stats. Client addresses are shortened by default, and the retention is set per domain.

Healthcheck watches the nodes

Healthcheck probes each node for a DNS answer to a known name, its HTTPS status and port 53 over TCP and UDP. A separate Domain name check runs more than 100 tests on any domain.

Attacks become reports

When a node stops a flood or a password-guessing run, it can report the heaviest address to the Takelan reputation API. It needs no key for that, and an anonymous report counts for less. A node can also look up the standing of its heaviest clients and throttle or block the ones that are poor or blocked.

Utilities holds the rules

Ownership, quotas, roles, versions, the audit log and the per-domain privacy settings live in Utilities. Zone contents and DNSSEC keys live on the nodes. Utilities talks to a node over HTTPS with a pinned certificate authority, and holds only a reference to the credential, never the value.

DNS overview in Takelan Utilities with domain counts, quota and a map of three nameserver locations. Made-up data.
DNS hosting in Utilities: overview and the three locations. Made-up data.
List of domains in Takelan Utilities with status and record counts. Made-up domains.
The domain list in Utilities. Made-up domains.

Using it as a customer? Read about DNS hosting, Dynamic DNS and Takelan Utilities.

The dashboard

Real screens from a local test cluster. The zones, names and addresses are made up.

tldns dashboard overview with a health banner, queries per second, answered and NXDOMAIN shares, query volume by response code and top zones. Made-up zones.
Overview: health, traffic and what needs attention. Made-up zones.
Zone page for a made-up domain listing A, AAAA, CNAME, MX, TXT, SRV, CAA, NS and SOA records with comments, a DNSSEC signed card and per-zone stats.
A zone with its records, DNSSEC state and stats.
Zone history tab with seven versions and a comparison of an older version against the current one.
Zone versions with a diff. Roll back from here.
Cluster page with three nodes up and in sync, replication lag, clock skew and per-peer sync state for zones, deletions, configuration and credentials.
Three nodes, in sync. Local test cluster.
DNSSEC page with signed zones, ECDSA P-256 keys and a multi-signer table showing each node key per zone.
DNSSEC and the multi-signer key table.
Pools and checks page with a pool of three members, two up and one down, answering only with the live ones.
A health-aware pool answers with live members only.
Defense Intelligence in observe mode with two active mitigations, a block on a documentation-range network and the reason, marked observe only.
Defense Intelligence in observe mode. Thresholds were lowered for the test.
System page with uptime, memory, CPU, answer-time percentiles, queries per second and cache hit rate.
Answer times, load and cache hit rate.

Run it yourself

Build from source, use the Docker image, or install a package. Check your named.conf first.

Build and check

cd rust
cargo build --release -p tldns-server
./target/release/tldns --check-compat /etc/bind/named.conf
./target/release/tldns --config bind9_manager.yaml

The check lists which directives and zones it can serve. It listens on an alternate port by default, so you can run it beside BIND9 while you test.

Print the DS records

tldns --print-ds /etc/bind/named.conf
# example.com. IN DS <keytag> 13 2 <digest>

Hand each line to your registrar. The command only reads. It never creates a key.

License: the Takelan OSS License is source-available, not OSI-approved. You may use, modify and distribute it, including commercially, and improvements flow back to the canonical repository.

Questions

What is the Takelan DNS server?

tldns is an authoritative and recursive DNS server written in Rust. It reads BIND9 zone files and named.conf, and adds health-aware answers, GeoDNS, clustering, DNSSEC, encrypted DNS and a dashboard. It is a Takelan Labs project with source available under the Takelan OSS License.

Is it a drop-in replacement for BIND9?

For many setups, yes. It serves your named.conf and zone files, can take the place of the named and rndc programs, and BIND9 can take over again from the same files. Its docs list what BIND9 still does better. Only the rndc commands status, reload and flush are wired so far.

Which DNSSEC algorithms does it sign with?

RSASHA256 (8), RSASHA512 (10), ECDSAP256SHA256 (13, the default), ECDSAP384SHA384 (14) and ED25519 (15). It uses NSEC3 by default or NSEC, and supports multi-signer (RFC 8901, model 2).

How does it connect to Takelan Utilities?

Utilities is the front door for DNS hosting and Dynamic DNS. It checks ownership and quotas, writes zones to one node, confirms the others have them, relays Dynamic DNS updates, merges query logs and shows DNSSEC state. Healthcheck probes the nodes, and the nodes report attacks to the reputation API.

Can I run it myself?

Yes. Build it from source, use the Docker image, or install a deb, rpm or tarball. The source is on the Takelan GitLab. The license is source-available, not OSI-approved, and asks that improvements flow back to the canonical repository.

Does it publish DS records for me?

No. It prints the DS records, and Takelan Utilities shows them for your domain. You publish them at your registrar.

Is DNS hosting on Takelan live?

Yes. DNS hosting and Dynamic DNS are live in Takelan Utilities. This page is about the server underneath them, which is a Labs project.

Back to Labs

Analytics & Cookies

We use self-hosted Matomo analytics. By default we measure anonymously with no cookies. Enable cookies to help us improve your experience. You can change this anytime.