SpipCP
DNSSelf-hosted

Set up nameservers

Step by step — buy a nameserver domain, enroll two cheap VPS in different locations as nameserver nodes, let SpipCP install PowerDNS, then run the one-time glue wizard at the registrar and verify it.

This is the one-time setup for self-hosted DNS: stand up the two boxes that will answer for the domains. It happens once; after that, domains are simply delegated to them. Everything here lives under Networking → Nameservers in the panel — a page titled DNS Servers with a Nameserver boxes tab and a Self-hosted zones tab, separate from Settings (managed providers) and from the generic Add-Node flow. (The old DNS → DNS Servers link still works.)

Two VPS — ideally on two different providers

Before starting, have two cheap VPS ready, plus one domain to host the nameservers on. The two boxes are the failover pair, so what matters is that they fail independently:

  • ns1+ns2 on a single box — pointless; one reboot takes out all the DNS.
  • Two boxes, same provider, same region — weak; they can land on the same physical host, and they share the provider's network, power, and account.
  • Two boxes, two different providers (and regions) — best. Separate companies means separate hardware, separate upstream networks (ASNs), separate power, and separate control planes, so no single outage, BGP incident, or account suspension can dark both nameservers at once.

SpipCP writes to each box independently (no link between them — see How it works), so splitting ns1 and ns2 across two providers is the natural setup, not a special case.

VPS specs

A nameserver is light — PowerDNS answers queries and holds a small zone file; it's not a busy web server. The cost driver is two boxes in two locations, not the size of each box. The smallest tier at most providers is plenty to start.

ResourceMinimumRecommendedWhy
vCPU11–2DNSSEC signing and query load are tiny; 1 core serves a small fleet. A 2nd core only helps with many busy zones.
RAM512 MB1 GBPowerDNS fits in a few hundred MB; 1 GB leaves headroom for the OS, updates, and key ops.
Disk10 GB20 GB SSDThe OS, PowerDNS, and the zone data are small; the room is for logs and updates. SSD keeps signing snappy.
Network1 public IPv4 (static)1 IPv4 + 1 IPv6, staticEach box needs a stable public IP — it's the glue record. IPv6 lets v6-only resolvers reach it directly.
Bandwidthwhatever the tier includes—A non-issue for DNS. Queries are tiny UDP packets (tens to a few hundred bytes); even a busy fleet uses a sliver of a 1 TB/mo allowance. Not worth paying extra for.
OSUbuntu 24.04 LTSUbuntu 24.04 LTSWhat the enroll flow hardens and installs PowerDNS on.
Locations2 boxes, 2 regions2 boxes, 2 providers + 2 regionsSee the callout above — separate providers give independent hardware, network, power, and control planes.

Why so small?

A nameserver does only DNS — SpipCP won't run instances or sites on it — so the sizing is for DNS alone, which is cheap. The typical $4–6/mo "nano"/"micro" tier at Hetzner, Bunny, OVH, Vultr, etc. is enough for each box. The budget is best spent on the second location, not on bigger boxes.

1. Buy a nameserver domain

Register one domain whose only job is to host the nameserver hostnames — for example spipdns.com. Two hostnames get created under it, ns1.spipdns.com and ns2.spipdns.com, and every self-hosted domain delegates to that pair.

It can be at any registrar; it doesn't have to be the same one as the domains being served. Keep it cheap and boring — it's plumbing, not a brand.

Some ccTLDs won't register glue — name nameservers under a gTLD

This is why a separate domain is bought for the nameservers rather than naming them inside a domain being served. Registrars can create glue (host records) for generic TLDs like .com/.net, but some ccTLDs — .eu (EURid) is the notable one — do not permit registrar-created in-domain glue; the registrar's glue / "Hosts" screen is simply disabled for them ("feature not supported for this extension"). So if the domain to be served is a .eu (or similar), the nameservers cannot be named inside it (ns1.example.eu is a dead end).

Instead, name them under a glue-friendly domain — a .com like spipdns.com — register the glue once there, then delegate the .eu (and every other) domain to ns1/ns2.spipdns.com with no glue needed at the served domain. This is the generally-recommended pattern anyway (a dedicated nameserver domain); the .eu restriction just makes it mandatory. The nameserver domain itself stays on its own registrar's DNS — only the ns names + glue get added to it, not delegation.

2. Enroll two VPS as nameserver nodes

In the panel, go to Networking → Nameservers → Nameserver boxes tab → Add a nameserver. This is its own flow, not the generic Add-Node wizard — a nameserver node is a distinct kind that won't host instances or sites. Run it twice, once per VPS:

For the first VPS (location A), give the flow the SSH connection details (host, user, private key) plus the nameserver hostname (ns1.spipdns.com) and the box's public address(es). There are two fields — Public IPv4 and Public IPv6 — and at least one must be filled; enter both if the box is dual-stack (recommended: it lets IPv6-only and IPv4-only resolvers reach the DNS). No PowerDNS API key needs typing — the panel generates it. The box can also be tagged with a Provider label (free text — e.g. Hetzner, OVH) and an expiry date for the box's domain or VPS; both then show on the nameserver card for an at-a-glance view of where each box lives and when it renews. It enrolls and hardens like any node, just tagged nameserver. This becomes ns1.

Don't know the box's IPv6 yet? Add it after enroll

If only the IPv4 is available at enroll time, that alone is fine — once the box reports in, the panel reads the public addresses it actually has and the glue-records card offers a one-click "add" for any family not set yet (e.g. its reported IPv6). PowerDNS already listens on both 0.0.0.0 and ::, so a box serves IPv6 the moment its AAAA glue is published.

Repeat for the second VPS in a different location (location B), as ns2.spipdns.com. This becomes ns2.

The public addresses entered become the glue records at the registrar (step 4) — an A record for each IPv4 and an AAAA record for each IPv6.

The Add-a-nameserver dialog with SSH details, nameserver hostname, public IPv4 and IPv6 fields, and provider-label and expiry fields
📷The Add-a-nameserver dialog: SSH details, nameserver hostname, public IPv4 / IPv6 (at least one), and the provider-label / expiry fields.img/dns-nameserver-add.avif
The Add-a-nameserver dialog: SSH details, nameserver hostname, public IPv4 / IPv6 (at least one), and the provider-label / expiry fields.

3. SpipCP installs PowerDNS

When a nameserver box enrolls, the panel installs PowerDNS on it (the authoritative server plus its API, kept private to the box, with rate-limiting on port 53 to blunt abuse). No manual PowerDNS configuration or API key pasting is needed — the panel generates the key, stores it encrypted, and writes it onto that box during the install. The key never returns to the browser and never leaves the panel except onto its own box.

The PowerDNS API is bound to localhost on the box — it is never exposed to the network. The panel drives it through the node's agent (the same authenticated agent WebSocket used for everything else), so the only thing listening publicly is port 53. On a real Ubuntu 24.04 box, systemd-resolved's stub listener normally holds port 53; the nameserver recipe frees it (it sets DNSStubListener=no and restarts resolved) before PowerDNS starts, so PowerDNS can bind :53 — the panel handles this automatically, with nothing to do by hand.

4. The one-time glue wizard

This is the part the panel cannot do automatically — it's Layer 1 at the registrar — so the panel guides and verifies it instead. "Glue" tells the world the IP addresses of the nameserver hostnames, breaking the chicken-and-egg where ns1.spipdns.com is itself inside spipdns.com.

The wizard shows exactly what to enter at the registrar of the nameserver domain (spipdns.com). Each box carries one row per address family — a dual-stack box gets both an A and an AAAA row, and both get set:

Register as a "host" / "private nameserver"TypeValue
ns1.spipdns.comAfirst VPS's IPv4
ns1.spipdns.comAAAAfirst VPS's IPv6
ns2.spipdns.comAsecond VPS's IPv4
ns2.spipdns.comAAAAsecond VPS's IPv6

Run nameservers dual-stack

A nameserver reachable only over IPv6 can't be queried by IPv4-only resolvers (and many registrars require at least one A glue), so an IPv6-only NS set silently fails for some users — the panel warns when that's the case. The reverse costs nothing but reach: adding AAAA glue lets the growing population of IPv6-only resolvers reach the DNS directly. Workload boxes can be IPv6-only; nameservers should be dual-stack. (Set each box's second family in the enroll form, or one-click it from the glue card once the box reports the address.)

At the nameserver domain's registrar, find "register a host", "private nameservers", or "glue records" (the name varies). Create each row exactly as the wizard shows it — an A record for every IPv4 and an AAAA record for every IPv6.

Back in the panel, click Verify glue. SpipCP resolves the two hostnames from outside and confirms they return the right IPs. Glue can take a little while to propagate at the registrar — re-run Verify until it's green.

Glue is registered once, for the nameserver domain only

This happens once, for spipdns.com (the nameserver domain) — not per domain served. After it's verified, every self-hosted domain just delegates to ns1/ns2.spipdns.com (delegate a domain) with no further glue work.

5. The NS-health dashboard

The Nameserver boxes tab under Networking → Nameservers lists the nameserver boxes with a live health check for each: whether the box is reachable, whether PowerDNS is answering on port 53, and whether its glue verifies. Each card also shows the box's provider label and expiry badge. A green pair means the setup is ready to serve zones; an unreachable box shows here so it can be fixed before the second one also fails.

A nameserver box card showing health checks, a provider label, and an expiry badge
📷A nameserver box card: health checks, provider label, and expiry badge.img/dns-nameserver-card.avif
A nameserver box card: health checks, provider label, and expiry badge.

Next steps

  • Delegate a domain — put the first real domain on the nameservers.
  • Failover — what the two boxes buy and what the dashboard watches.
  • DNSSEC — sign the zones.

On this page