Learn six network words
You only need WAN, LAN, IP address, gateway, DHCP, and DNS for the first lab. The guide explains them without assuming networking experience.
WANLANDHCPDNS
Describe the router first. Change the network only when you are ready.
routerd makes WAN, LAN, DNS, NAT, routes, and system settings explicit in one YAML file. Start with a lab host and keep a console or separate management interface: a live run can change connectivity.
You only need WAN, LAN, IP address, gateway, DHCP, and DNS for the first lab. The guide explains them without assuming networking experience.
WANLANDHCPDNSUse a spare VM or host with console access or a separate management NIC. Do not make the first live change on a production or only router.
Ubuntu Serverconsole accessseparate management NICStart with interfaces and a narrow LAN service, then add DHCP, DNS, and outbound IPv4 NAT one responsibility at a time.
InterfaceDHCPv4ServerNAT44RuleInstall layout and service-manager integration scaffolding exist, but native platform renderers and feature parity are still pending. Start your first router on Ubuntu Server.
Ubuntu Server primaryFreeBSD groundworkNixOS groundworkFollow this order. Validation and dry-run do not change the host network. The console apply and daemon can; use a console or independent management path. Use routerctl only after the daemon is running.
WAN / LAN / DHCP / DNSconsole / management NICrouter.yamlrouterd validaterouterd apply --once --dry-runrouterd apply --oncerouterd serve → routerctlInstall routerd on a spare Ubuntu Server VM or host, place the sample YAML at the path below, and keep a console or independent management path available before the live step.
Read the Ubuntu Server installation guide →
This checks YAML and resource rules. It does not change the host network and does not need routerd to be running.
sudo routerd validate --config /usr/local/etc/routerd/router.yamlThis uses temporary state, ledger, and status paths while it exercises the one-shot apply path. It does not apply network changes or write routerd’s normal state files; no daemon or routerctl command is involved.
LAB_DIR="$(mktemp -d)"
sudo routerd apply --config /usr/local/etc/routerd/router.yaml --once --dry-run --skip-service-manager --state-file "$LAB_DIR/state.db" --ledger-file "$LAB_DIR/ledger.db" --status-file "$LAB_DIR/status.json"This changes the host network and then exits. Run it only from the lab console or with an independent management path available.
# Live one-shot apply: changes the host network, then exits.
sudo routerd apply --config /usr/local/etc/routerd/router.yaml --oncerouterd serve is live and continues to reconcile the host network. After it starts, use another terminal for routerctl.
# Start the live daemon from the console.
sudo routerd serve --config /usr/local/etc/routerd/router.yaml
# Only after routerd serve is running, use another terminal.
sudo routerctl get status
sudo routerctl get events --limit 20routerd is pre-release v1alpha1 software. Do not use the first live run on the only router or only remote-management path for a network.
routerctl talks to the running local routerd daemon. It is for checking an already-running router, not for the standalone validation and dry-run steps above.
Check the resource phases reported by the running daemon before changing anything else.
Run focused health diagnostics through the daemon after the router is up.
Review recent controller events when a resource does not reach the expected phase.
A console or separate management path is the recovery path if a live network change affects remote access.