All documentation pages ↓

On this page

How LiteBlox works

LiteBlox runs your BIND servers for you. Give it a few Debian machines with a sudo account and it takes over their BIND configuration: zones, server options, ACLs and keys are all edited in the browser. One server is the primary for every zone and the others are its secondaries, so a change is made in one place and the rest copy it within seconds. On the same machines it can also run Kea for DHCP and chrony for time, and it keeps an address list (IPAM) of every network.

Each of these is a module you can switch off. LiteBlox can run DHCP only (registering clients at a DNS server you already have), or be just an address list, with no BIND anywhere.

The pieces

Piece What it is
LiteBlox This web app, running in a container. It keeps every zone's history in a git repository and everything else in a small database.
Node A server LiteBlox manages: usually BIND, with Kea and chrony if you like. A node can also run without BIND (DHCP or time only), or just the agent, as a scanner that tells IPAM who is on its network (Modules).
Agent liteblox-agent, a small Python service on each node (TCP 8530). LiteBlox talks only to it, over HTTPS where both sides prove who they are with certificates from LiteBlox's own certificate authority.
Setup A one-off SSH login (with a password or key you provide, never stored) that installs BIND if needed, installs the agent and takes over the BIND configuration (on a node without BIND, only the agent, and Kea or chrony if chosen). SSH isn't used again until you repair or upgrade the agent.
Kea The DHCP server LiteBlox can run on a node next to BIND, with a configuration LiteBlox writes: the interfaces it answers on, subnets, pools and options, all set on the DHCP tab. Two nodes can run it as a failover pair (DHCP (Kea)).
browser ──▶ LiteBlox container ──(mutual TLS, port 8530)──▶ agent on ns1 ─▶ BIND (primary)   ─▶ Kea (DHCP)
                │                                        └▶ agent on ns2 ─▶ BIND (secondary) ─▶ Kea (DHCP)
                ├─ zone history (git)
                └─ backups of each node        BIND: ns1 ──NOTIFY, IXFR──▶ ns2
                                               Kea:  ns1 ◀──failover (TLS, 8001)──▶ ns2
                                                     each Kea's D2 ──DNS updates──▶ the DNS primary

Kea is optional: a node runs only BIND until you set DHCP up on it.

IPAM lives in LiteBlox itself: it reads the zones, the leases and what the nodes see on the network, and adds names of its own (IPAM).

LiteBlox owns the whole BIND config

After setup, a node's /etc/bind/named.conf only includes files LiteBlox writes:

File Holds Edited on
/etc/bind/liteblox/options.conf options { … } for this node the node's Server settings
/etc/bind/liteblox/acls.conf named address lists, the same on every node Settings → ACLs
/etc/bind/liteblox/keys.conf TSIG keys, the same on every node Settings → TSIG keys
/etc/bind/liteblox/top.conf other top-level statements (logging…), and BIND's statistics channel on 127.0.0.1:8053, where the agent reads the query counts for the Dashboard the node's Server settings
/etc/bind/liteblox/zones.conf every zone the node serves Zones

The package's own root hints stay included as they were, and rndc.key stays the node's own. The node's original files are kept in /etc/bind/pre-liteblox/. A server that already has a configuration of its own can be taken over too: LiteBlox imports it and proves its version is equivalent before switching.

Every configuration change works the same way: LiteBlox backs the node up, sends the new files, and the agent checks each file against a strict allow-list, runs named-checkconf on the whole set and switches over with rndc reconfig. Changes to more than one node go one node at a time, and LiteBlox checks after each that its zones still answer. If one stops answering, every node the change touched is rolled back.

If someone edits these files by hand, LiteBlox notices within a minute (config drift) and lets you overwrite the edit or keep it. See Primary, failover and drift.

One primary, the rest secondaries

Make ns1 the primary (on the Nodes page) gives ns1 the zone files and makes every other node its secondary. LiteBlox publishes to the primary only. The primary tells its secondaries (NOTIFY) and they fetch just the changes (IXFR), signed with a key LiteBlox creates for itself. If the primary fails, Promote a secondary; the old primary is demoted automatically when it comes back.

Kinds of zones

Kind What it is
Forward lookup names to addresses (example.com)
Reverse lookup addresses to names, for one network (192.168.0.0/24 → 0.168.192.in-addr.arpa)
Forwarding only a domain other servers answer: the nodes forward its queries there (type forward). No records, no primary.

A forward or reverse zone is either:

Changing a static zone

  1. Edit: changes go into a draft, never straight to the servers. Changing an A/AAAA record can also change the matching PTR in a reverse zone; the two drafts are then linked.
  2. Review: what changed, named-checkzone's verdict, the file diff, and the state of every node.
  3. Publish: LiteBlox:
    • checks the primary still has the file LiteBlox last wrote (if someone edited it by hand, that's drift, and you choose what to do)
    • bumps the serial above anything a node serves
    • stages the new file on the primary, which checks it with its own named-checkzone, then switches over (atomic file swap + rndc reload)
    • asks the primary, then each secondary, over DNS which serial it now serves

Every publish is a commit in the zone's History, with an optional message. Any two versions can be compared, and any version can be restored into a draft. See Editing and publishing.

DHCP

On a node with Kea, LiteBlox writes Kea's configuration the way it writes BIND's: the interfaces it answers on, the subnets with their pools, options and reservations, and DNS registration. Every change is previewed as a diff, checked on the node by kea-dhcp4 -t, applied one node at a time, and rolled back if Kea stops answering. Two nodes can share the work as a hot-standby failover pair, and clients' names can be registered in a dynamic zone, or at another DNS server (DNS registration). Leases live in Kea; LiteBlox reads them live. See DHCP (Kea).

Safety nets

Accounts

LiteBlox has its own accounts, separate from the servers' logins:

Roles apply to all of LiteBlox, not per zone. Every change, login and failed login is recorded in the audit log (Users → Audit log; sign-ins are hidden unless you ask for them). See the Security model.