Skip to content

1.7 Addresses, DNS records and reservations

Part 1 · FoundationsOperator⏱ ~30 min▶ Narrated video🖱 Interactive walkthrough🧪 Lab 5 (auto-checked)✓ Knowledge check

This is the step the previous modules set up. In SpatiumDDI, allocating an address is what creates its DNS records, and giving it the status static_dhcp is what creates its DHCP reservation. Because one record drives all three, the address list, the DNS zone and the DHCP server stay in step, and when they don’t, the subnet shows you where. You’ll name Ridgeline’s library printer, check the whole subnet against DNS with Sync DNS, and reserve an address for a security camera.

  • Allocate the next free address or a specific one, and choose its status and role
  • Explain which DNS records an allocation creates, and check them with dig
  • Read the DNS column and fix drift with Sync DNS
  • Reserve an address for a device with static_dhcp and its MAC address

The video allocates print-01, follows its records into the zone, checks the subnet with Sync → DNS (the gateway’s PTR is already there), and reserves 10.20.21.20 for cam-01. The walkthrough replays the same clicks.

▶ Addresses, DNS records and reservations · 2:18 · narrated, captions on (CC) · recorded on SpatiumDDI 1.0.0-beta.3
Chapters
Transcript

0:00Module 1.7: addresses, DNS records and reservations. You'll give Ridgeline's library printer a name and an address, watch SpatiumDDI publish its DNS records, check them against DNS in one click, and reserve an address for a security camera.

0:18Open Staff VLAN 21 and choose Allocate IP. Pick Specific IP, enter 10.20.21.10, then the host name print-01. The DNS zone is inherited from the block, so the form already knows the full name it will publish. Add a description, and allocate.

0:36The new row shows its DNS status as in sync. Behind it, SpatiumDDI wrote an A record for print-01 into corp.example.edu, and a PTR record into the reverse zone, and sent both to BIND9 as dynamic updates, with no reload.

0:55Back on the subnet, look at the gateway row. SpatiumDDI published the gateway's reverse record when it created the subnet, and skipped a forward record on purpose, since every subnet would otherwise publish one. To check a whole subnet against DNS at any time, open Sync, then DNS. It previews exactly what it would write, and nothing more. Here there's nothing to do: the subnet is in sync.

1:21Now a device that uses DHCP but must always get the same address: a security camera. Allocate 10.20.21.20 as cam-01, enter its MAC address, and set the status to static_dhcp. There's no scope to pick: the reservation goes on the subnet's scope automatically. One save creates the IPAM record, the DNS records, and the Kea reservation.

1:45The address list marks cam-01 as a reservation. Over in DHCP, it also appears among the group's static assignments, already delivered to Kea, so the camera gets the same address every time it asks.

1:58Ridgeline's printer and camera are now fully managed: addresses, names in both directions, and a DHCP reservation. From a terminal, dig confirms it: print-01 resolves to 10.20.21.10, and the reverse lookup returns the name. Next: everyday IPAM at speed.

Step 1 of 27: IPAM

Nice work — walkthrough complete.
Now do it for real in the lab below.

Allocate IP on the subnet opens Allocate IP Address. So does a click on one of the green free-range rows in the address table: once print-01 and cam-01 exist, “10.20.21.11 – 10.20.21.19 · 9 free · click to allocate” sits between them. First, choose how the address is picked:

  • Next available takes the lowest free address and shows it before you save. It skips the placeholder rows, addresses already in use, and every dynamic DHCP pool, and two people allocating at the same moment never get the same address.
  • Specific IP takes the address you type. Use it when the address is part of your plan, as .10 is for Ridgeline’s printer.

Then describe the address. Hostname is required, because together with the subnet’s DNS zone it’s what creates the DNS records. Write a description too; search matches descriptions (module 1.8). Type / Status says what the address is doing:

Status Use it for
allocated An address you assign by hand
reserved Holding an address for later, optionally until a date when it’s freed again
static_dhcp A DHCP reservation: it needs the device’s MAC address, and the subnet needs a DHCP scope
deprecated A decommissioned address you keep on record
dhcp A dynamic lease. Rows mirrored from a lease are locked: change the lease or reservation at its source

The quick reference lists every status, including orphan and discovered. Separately from the status, Role says what kind of address it is, for example host, gateway, loopback, secondary, bmc (a baseboard management controller such as iDRAC or iLO), or web, api and lb for addresses that serve TLS. The shared roles anycast, vip and vrrp turn off MAC-collision warnings, because one MAC legitimately answers for several addresses there; the dialog says so when you pick one.

If the name already exists in the zone, or the MAC is already on record, the save stops with a warning and the button becomes Allocate anyway. Read the warning before you override it; the IPAM tips explain when a duplicate is deliberate.

Addresses don’t go to Trash. Deleting one offers Mark as Orphan, which you can undo later, or Delete Permanently, which also removes the address’s DNS records and reservation.

When you save an address with a hostname, SpatiumDDI writes two records:

  • an A record (AAAA for IPv6) in the subnet’s forward zone: print-01.corp.example.edu → 10.20.21.10;
  • a PTR record in the most specific reverse zone that covers the address: 10.20.21.10 → print-01.corp.example.edu, in Staff VLAN 21’s own 21.20.10.in-addr.arpa (module 1.5).

The form previews the full name it will publish before you save, because the subnet inherits corp.example.edu from the block. Both records reach BIND9 as RFC 2136 dynamic updates, with no reload, and the new row’s DNS column shows it’s in sync.

Control plane, during the request 1UI / API mutatione.g. POST /dns/zones/{id}/records 2Service layervalidate · write DNSRecord row · compute delta · mark the server's bundle dirty 3Enqueue RecordOp rows{ id, server_id, zone_name, op: create | update | delete, record: {…}, serial_strategy: bump, created_at,state: pending } 4Response returned to caller (HTTP 2xx)the write is already durable in Postgres Worker, after the commit 5Worker renders the server's bundlebundles queue · stored in dns_agent_bundle · publishes a wake on Redis DNS agent 6Agent's long-poll on /config is releasedreturns the stored bundle plus the ops that render covers · without Redis it re-checks every 2 s 7Agent executes via loopbackBIND9 → nsupdate ‹signed with the local TSIG key› 8Agent ACKs on the next heartbeat RecordOp.state = appliedop complete on this server state = failed → alertafter 8 attempts, about 45 min of backoffdns_record_op_failed
One record change, from the API call to the applied update · Adapted from the SpatiumDDI documentation (Apache-2.0)

DNS Aliases on the same form (Add alias) add extra records for the address: a CNAME points at its hostname, and an A record points at the address. They’re withdrawn while the address is an orphan, come back when you restore it, and are deleted with it; the subnet’s Aliases tab lists them. Module 3.1 traces one change through every step in How SpatiumDDI works.

IPAM knows which records every address should have. The address table’s DNS column compares that with SpatiumDDI’s DNS data and shows each row as in sync (green) or out of sync (amber). The gateway row reads forward DNS skipped instead: a host named exactly gateway gets a PTR record but no A record, so the gateways of all your subnets don’t collide on gateway.corp.example.edu. Its PTR record was published when you created the subnet.

When anything in the subnet is out of sync, an amber banner above the tabs counts it and offers Open Sync DNS. The same report is under Sync → DNS in the subnet header, and blocks and spaces have a Sync DNS button that covers every subnet beneath them. The report sorts drift into three kinds:

Kind What it means What applying does
Missing in DNS IPAM expects a record that DNS doesn’t have Creates it
Mismatched The record exists with a different value Rewrites it to match IPAM
Stale records An auto-generated record that no address in the subnet calls for any more Deletes it, if you tick it: stale rows start unticked

It’s a preview: each row has a checkbox, nothing changes until you click Apply, and rows you leave unticked aren’t written. When nothing has drifted, it reads “✓ In sync — no drift detected.” and offers only Re-check and Close. To run the same reconciliation on a schedule, turn on IPAM → DNS Reconciliation in Settings; it’s off by default.

Some devices use DHCP but must always get the same address: cameras, printers, anything a firewall rule points at. In SpatiumDDI you create the reservation where you create the address. Allocate it with the status static_dhcp and the device’s MAC address, and one save creates:

  • the IPAM row, with a Reservation badge in the address table;
  • the A and PTR records, as for any named address;
  • the Kea reservation, listed under DHCP → the group → Static Assignments and delivered to Kea through its configuration long-poll.

There’s no scope to choose: SpatiumDDI puts the reservation on the subnet’s DHCP scope. If the subnet has none yet, the dialog says so and offers Create a scope. The same sync runs when you edit an address later: changing a row to static_dhcp creates its reservation, changing its MAC or hostname updates the reservation, and changing the status away from static_dhcp removes it.

Know the rules before you depend on a reservation:

  • A blank MAC is refused (HTTP 422), and nothing is created.
  • With no DHCP scope on the subnet, or more than one, the address is created without a reservation, and SpatiumDDI tells you why. Create exactly one scope first (module 1.6).
  • Creating or changing a reservation needs write on dhcp_static, and removing one needs delete; the built-in DHCP Editor role has both. Without the grant, the address is saved but the reservation isn’t, and SpatiumDDI says so. Deleting a reserved address without delete on dhcp_static is refused.
  • A MAC can be reserved only once per server group, and the reserved address must be inside the scope’s subnet. A reservation inside a dynamic pool is allowed: Kea won’t lease that address to anyone else.

The DHCP tips and the troubleshooting playbook cover what to check when a reservation doesn’t reach Kea.

Hands-on lab 5 · about 20 min

Name the printer, check DNS, reserve the camera

You will:

  • Allocate 10.20.21.10 as print-01 and watch its A and PTR records appear
  • Check with Sync DNS that the subnet's records are all published
  • Reserve 10.20.21.20 for cam-01 with static_dhcp and its MAC address
  • Check all three names with dig

Before you start: Labs 3 and 4 are done: Staff VLAN 21 has its reverse zone 21.20.10.in-addr.arpa and its DHCP scope.

  1. In IPAM, open 10.20.21.0/24 and click Allocate IP.

  2. Choose Specific IP and enter 10.20.21.10. Enter the Hostname print-01, and check that the form previews print-01.corp.example.edu.

  3. Enter the Description “Library printer” and click Allocate. The new row’s DNS column shows it’s in sync.

  4. Go to DNS, open the default group and its Zones tab, and open corp.example.edu. Find print-01 in the record list.

  5. Back on the subnet, find the gateway row, 10.20.21.1. Its DNS column reads forward DNS skipped: SpatiumDDI published the gateway’s PTR record when you created the subnet, and no A record on purpose.

  6. Open Sync and choose DNS. The preview reads “✓ In sync — no drift detected.”: the printer’s records and the gateway’s PTR are all published. Click Close.

  7. Click Allocate IP again and choose Specific IP. Enter 10.20.21.20, the Hostname cam-01 and the MAC Address 52:54:00:12:34:56.

  8. Set Type / Status to static_dhcp and click Allocate. There’s no scope to pick: SpatiumDDI puts the reservation on the subnet’s scope, and the new row is marked Reservation.

  9. Go to DHCP, open the default group and its Static Assignments tab, and find cam-01’s MAC address and IP address.

  10. In a terminal, check the printer’s A and PTR records and the gateway’s PTR record. Expect 10.20.21.10, print-01.corp.example.edu. and gateway.corp.example.edu..

    Terminal window
    dig @127.0.0.1 -p 1053 +short print-01.corp.example.edu
    dig @127.0.0.1 -p 1053 +short -x 10.20.21.10
    dig @127.0.0.1 -p 1053 +short -x 10.20.21.1
✅ Check your work from the course folder:./lab/check.sh 5
Knowledge check · 6 questions

Addresses, DNS records and reservations

1. You allocate 10.20.21.10 with hostname print-01 and DNS zone corp.example.edu. What does SpatiumDDI create?

2. The camera cam-01 (MAC 52:54:00:12:34:56) must always get 10.20.21.20 from DHCP. What do you set when you allocate the address?

3. You allocate 10.20.21.20 as static_dhcp but leave the MAC blank. What happens?

4. An address shows an amber out of sync dot in the DNS column. What does it mean, and what do you do?

5. You're asked to remove 10.20.21.44, but its owner might want it back next week. Which option do you choose?

6. Select all the true statements about address statuses.

Select all that apply.

  • IPAM features: address statuses (§5), roles (§15.14), collision warnings (§15.11), dynamic pools (§15.12) and allocation rules (§16)
  • DHCP features §3: static assignments, the IPAM workflow, the dhcp_static permission and the “nothing happened” traps
  • DNS features §4 and §14: which reverse zone takes a PTR, what Sync DNS writes, and the scheduled IPAM → DNS and zone ↔ server reconciliation jobs
  • Getting Started, step 10: addresses, and troubleshooting the first IP
  • GitHub issues #1150 (the gateway PTR at creation), #1628 (reservations synced from every IPAM path) and #2101 (no forward record for gateway)
  • GitHub issue #476: the MAC-format report behind the field note
Finished 1.7 Addresses & reservations?
Mark it complete to track your progress (stored only in this browser).