IPv4 and IPv6, allocated like inventory.
One prefix tree, one source of truth. Subnets carry parent, VLAN, and location; IPs carry customer, service, and rDNS. The spreadsheet is retired the day it imports.
The mechanics, not the marketing.
Subnets form a parent-child tree by CIDR. The auto-allocator finds an exact-fit unallocated leaf — or, if it can’t, merges sibling free leaves up or splits a larger ancestor down to produce one.
IPv4 /8 down to /32, IPv6 /32 down to /128. Same engine, same UI, same allocation rules.
IP records carry customer, service, VLAN, and rDNS. Subnets carry location, VLAN, parent, and allocation status.
Per-product allocation rules fulfilled in one transaction at provision time. Rolls back on any failure.
Splits and merges run inside row-locked transactions; the unavailable flag parks a prefix without losing it.
Carve a /16 like you’d slice a budget.
Define a parent block, then split it on demand. Auto-allocation walks the tree to find the next free child at the requested prefix length — merging siblings or splitting ancestors as needed.
Subnets and IPs both carry an is_unavailable flag — admins can park a prefix or a single address out of rotation without deleting it. Locations cascade down the tree, so a parent in EU-FRA implicitly places its children there — the same locations and devices tracked in DCIM.
- 203.0.113.0/24
- EU-FRA · public pool subdivided
- 203.0.113.0/26
- cust-7421 · vlan 102 allocated
- 203.0.113.64/27
- cust-7422 · vlan 102 allocated
- 203.0.113.96/29
- parked · is_unavailable reserved
- 203.0.113.104/29
- next-free at /29 unallocated
- 2001:db8:1::/48
- EU-FRA · v6 pool subdivided
- 2001:db8:1:a::/64
- cust-7421 · vlan 102 allocated
IPs are part of the order, not a follow-up ticket.
Each product carries an ipam_config with allocation rules. When the service is provisioned, the engine fulfils the rules in a single transaction — or rolls everything back.
- IP / subnet
- Per-product rules
- v4 / v6
- Family selector
- exact / merge / split
- Strategy
- full / disabled
- Mode gate

What it tracks, what it automates.
No emoji checkmarks — the value column states the actual mechanism.
| Capability | Implementation |
|---|---|
Dual-family allocation ipv4 + ipv6 | Each subnet stores ip_version (4 or 6). Allocation rules target either family, with optional exact prefix length. |
Parent-child subnet hierarchy parent_id + cidr | Single tree per location. Subdivided parents move to allocation_status="subdivided"; leaves track their own status. |
Per-IP customer + service link foreign keys | IP records reference customer, service, device, and VLAN. Service termination releases the linked allocations. |
Per-IP reverse DNS rdns field | Each ip_addresses row carries rdns and rdns_updated_at. Three providers are supported: internal, PowerDNS, Cloudflare. |
VLAN binding vlans table | Subnets reference a VLAN; VLANs reference a location and can be enabled or disabled per location. |
Allocate on provision ipam_config | Products carry an ipam_config JSON describing rules (IP or whole subnet, family, count, allowed VLANs / pool subnets). Fulfilled in one transaction. |
Exact / merge / split strategy subnetTreeService | Auto-allocator first looks for an exact-prefix free leaf, then merges sibling free leaves up, then splits a larger free ancestor down. |
Park a prefix or address is_unavailable | Boolean flag on subnets and IPs hides the row from auto-allocation and manual allocate flows without deleting it. |
Location-scoped pools effective_location | A subnet inherits its first ancestor’s location_id. Allocation rules only see pools whose effective location matches the device. |
IP Transit billing 95th / commit / xfer | Native 95th percentile, commit-and-burst, per-GB transfer, or flat. Tiered overage rates and per-service direction overrides. |

The same prefix tree, billed by the megabit.
- 95th percentile.Industry standard — overage above the committed rate is billed automatically at the close of each cycle.
- Commit + burst.95th with a committed-rate floor; usage below the commit incurs no overage.
- Per-GB transfer.Total bytes against an included pool, then per-GB overage. Tiered rates supported.
- Direction control.In, out, max, or sum — configurable per service or globally via setting.
Every change is journaled with the service.
Allocation, split, merge, and release events write to provisioning_logs on the same transaction as the data change — rollback rolls them back too.
- ipam_allocate_ip
- Logged on success and failure with purpose, VLAN, and the resulting allocation id and IP address. Same transaction as the allocation row itself.
- ipam_allocate_subnet
- Same shape for whole-subnet allocations — captures the chosen pool subnet CIDR and the device-allocation id.
- ipam_subnet_split
- Records the source CIDR and the two child CIDRs whenever the auto-allocator carves an ancestor down to the requested prefix.
- ipam_subnet_merge
- Records the parent CIDR when two free sibling leaves are merged back up to satisfy a larger-prefix request.
- ipam_wipe_device
- On re-provision, all non-management allocations on a server are released first so the new IPAM rules dictate the final state. Management IPs (BMC, switch mgmt) are preserved.
- release on cancel
- Service cancellation releases its linked allocations and reverts the parent subnet status to unallocated. Management allocations remain attached to the hardware.
Try it on your own data. Refund inside 14 days if it’s not the fit.
Pick a tier and provision a tenant in under two minutes — isolated K3s namespace, your own database, the full product. If FluxBilling isn’t the right fit inside 14 days, open a ticket and we’ll refund the subscription. No sales call, no qualification gate.
- 01.< 1 minPick a tierLite from €4.95/mo. Upgrade later, no migration.
- 02.< 2 minProvision the tenantIsolated K3s namespace + your own PostgreSQL database. Full product, your data.
- 03.d0 — d14Refund inside 14 daysNot the fit? Open a ticket within 14 days and we refund the subscription. No questions, no qualification gate.
