Network Services Control
The agent runs a small set of network services alongside the data plane — among them the built-in DNS resolver and the DHCP server. Each one is independently switchable, so an operator can turn DNS or DHCP on or off, see whether it is actually listening, and tune how it binds and who may talk to it. This page covers the service command group, the DNS and DHCP configuration knobs, and the dns … / dhcp … operator commands. For zone and pool concepts, see DHCP & DNS.
The service command group
cenvero-str-ctl service shows and toggles the agent's switchable network services: the REST, gRPC and WebSocket management APIs, the Prometheus metrics endpoint, DNS, and DHCP. The local control socket that cenvero-str-ctl itself rides is always up and is deliberately not a toggleable service — it cannot be turned off.
Seeing what is running
cenvero-str-ctl service status
Network services
================
SERVICE ENABLED ADDRESS STATE NOTE
REST API on 0.0.0.0:7070 listening
gRPC API on 0.0.0.0:7071 listening
WebSocket API on 0.0.0.0:7072 listening
Metrics on 127.0.0.1:9090 listening
DNS on 10.0.0.1:53 listening
DHCP on :67 listening
ENABLED reflects the operator switch (applied at next restart); STATE is a live listen probe.
Apply a change with: systemctl restart cenvero-stratum
The two columns mean different things:
- ENABLED is the operator switch — what the agent would start on its next restart.
- STATE is a live probe of the address:
listening(something is bound there now),down(nothing is), orunknown(the address could not be probed).
status also answers to list, top, ls, and ps, and a bare cenvero-str-ctl service prints the same table. Add --format json (or yaml) for machine-readable output.
Turning a service on or off
Both word orders work, as do the enable/disable aliases:
# Turn the DNS resolver off
sudo cenvero-str-ctl service dns off
# Turn the DHCP server back on (these are equivalent)
sudo cenvero-str-ctl service dhcp on
sudo cenvero-str-ctl service on dhcp
sudo cenvero-str-ctl service enable dhcp
Toggling a service records its enable flag in the agent's local override store — the same mechanism config set uses — so the change persists across reboots. It is not applied to the running process immediately: it takes effect on the next agent restart. The command reminds you how:
Service dns (DNS) disabled.
Verify with: cenvero-str-ctl service status
sudo systemctl restart cenvero-stratum
DNS and DHCP only switch their network listeners. With DHCP off, the agent stops binding UDP :67 (it hands out no addresses) but the lease table and its expiry bookkeeping keep running, so existing leases are still tracked. With DNS off, the resolver does not bind a port; zone and record data is untouched and still served over the management API. Turning the service back on and restarting re-binds it.
The IPC control socket cannot be disabled — asking to turn off ipc (or socket) is refused with an explanation rather than silently accepted, because it is the channel this very command travels over.
Configuring DNS
The agent is authoritative for each network's internal zone (e.g. app-net.internal) and acts as a recursive forwarder for everything else. Two settings control where it listens and who may use it for recursion.
Listen address
By default the resolver binds the management bridge's IPv4 address (falling back to the user bridge, then loopback 127.0.0.1:53 before a bridge has an address). It is never bound to a wildcard such as 0.0.0.0:53, so it is not exposed as an open forwarder on an untrusted NIC.
To pin it to a specific address, set dns_listen_addr to a bare IP or a host:port. config set takes the key and value positionally:
sudo cenvero-str-ctl config set dns_listen_addr 10.0.0.1
Setting it back to empty reverts to the bridge-address default:
sudo cenvero-str-ctl config set dns_listen_addr ""
The address change is applied on the next agent restart; confirm the resulting bind with service status.
Allowed clients (recursion ACL)
Recursion — forwarding a query for a name outside the local zones to an upstream resolver — is gated by a client ACL so the agent is never an open resolver. Set the allowed clients as a comma-separated list of IPs and/or CIDRs:
sudo cenvero-str-ctl config set dns_allowed_clients "10.20.0.0/24,10.30.0.0/24"
When the list is empty (the default) it falls back to the loopback and private ranges (127.0.0.0/8, ::1/128, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7). A query from a client outside the allowed set is refused, not silently forwarded. Authoritative answers for the local zones are always returned regardless of the ACL.
Zones, records, and forwarders
Day-to-day zone and record management uses the dns command group:
| Command | Purpose |
|---|---|
dns zones | List the authoritative zones |
dns records / dns list | List records (all zones, or one network/zone) |
dns add | Add a record to a zone |
dns delete | Remove a record |
# List zones, then add and remove a record
cenvero-str-ctl dns zones
sudo cenvero-str-ctl dns add --network app-net --name api --type A --value 10.20.0.55
sudo cenvero-str-ctl dns delete --network app-net --name api --type A
Upstream forwarders (the resolvers recursion is sent to) are part of a network's definition, not a live config set knob — they are delivered as part of the node's configuration. See DHCP & DNS → Upstream forwarders for the per-network shape and cross-network delegation.
Configuring DHCP
The DHCP server leases addresses to each network's endpoints from that network's IPAM pool and binds UDP :67 while it is enabled.
Scopes
A scope binds a client subnet to its own IPAM pool and the reply parameters advertised to clients on that subnet — the server identity, gateway, subnet mask, DNS servers, and an optional per-scope lease length. A relayed request is matched to its scope by the relay's giaddr; a directly-attached one by the interface it arrived on. A network created with network create gets a scope automatically; multiple scopes let one agent serve several subnets (including relayed ones).
Scopes (dhcp_scopes) are part of the node's configuration rather than a live config set field — they are provisioned with the node config, not set on the node. Each scope carries:
| Field | Meaning |
|---|---|
subnet | The client subnet the scope serves (CIDR) |
pool_id | The IPAM pool addresses are leased from |
server_ip | The DHCP server identity advertised to clients |
gateway | The default gateway offered to clients |
subnet_mask | The subnet mask offered to clients |
dns | The DNS server(s) offered to clients |
lease_seconds | Optional per-scope lease length (0 = the server default) |
Reservations and leases
Use the dhcp command group to inspect leases and to pin or release an address:
| Command | Purpose |
|---|---|
dhcp leases | List current leases (MAC, IP, hostname, expiry) |
dhcp reserve | Pin a specific IP to a MAC (a static lease) |
dhcp release | Release a lease/reservation early |
# Always hand db-primary the same address
sudo cenvero-str-ctl dhcp reserve \
--network db-net \
--mac 52:54:00:de:ad:01 \
--ip 10.30.0.10 \
--hostname db-primary
# Inspect what is leased
cenvero-str-ctl dhcp leases --network db-net
# Release a lease before re-provisioning a workload
sudo cenvero-str-ctl dhcp release --network db-net --mac 52:54:00:ab:01:02
A reservation is reflected in DNS immediately — the hostname resolves to the reserved IP whether or not the endpoint is online. See DHCP & DNS → Reservations for how reservations and the lease table behave in more depth.
Quick reference
| Task | Command |
|---|---|
| See every service's switch + live state | cenvero-str-ctl service status |
| Turn DNS off / on | sudo cenvero-str-ctl service dns off / … dns on |
| Turn DHCP off / on | sudo cenvero-str-ctl service dhcp off / … dhcp on |
| Apply a service toggle | sudo systemctl restart cenvero-stratum |
| Set the DNS listen address | sudo cenvero-str-ctl config set dns_listen_addr <ip> |
| Set the DNS recursion allow-list | sudo cenvero-str-ctl config set dns_allowed_clients <cidrs> |
| Reserve / release a DHCP address | sudo cenvero-str-ctl dhcp reserve … / dhcp release … |
| Manage a DNS record | sudo cenvero-str-ctl dns add … / dns delete … |
See also
- DHCP & DNS — pools, leases, zones, forwarders, and delegation in depth.
- Networking Overview — where DNS and DHCP sit in the data plane.
- Zero-Trust Firewall — DNS on port 53 must be explicitly allowed for cross-network queries.
- Configuration — how settings reach a node and what lives in the node config.
- CLI Reference — the full command surface.