--- title: "router7: architecture" menu: main: title: "Architecture" weight: 20 --- # Architecture router7 is based on [gokrazy](https://gokrazy.org/): it is an appliance which gets packed into a hard disk image, containing a FAT partition with the kernel, a read-only SquashFS partition for the root file system and an ext4 partition for permanent data. The individual services can be found in [github.com/rtr7/router7/cmd](https://pkg.go.dev/github.com/rtr7/router7/cmd) * Each service runs in a separate process. * Services communicate with each other by persisting state files. E.g., `cmd/dhcp4` writes `/perm/dhcp4/wire/lease.json`. * A service notifies other services about state changes by sending them signal `SIGUSR1`. ## Configuration files | File | Consumer(s) | Purpose | |---|---|---| | `/perm/interfaces.json` | `netconfigd` | Set IP/MAC addresses of `uplink0` and `lan0` | | `/perm/portforwardings.json` | `netconfigd` | Configure nftables port forwarding rules | | `/perm/dhcp6/duid` | `dhcp6` | Set DHCP Unique Identifier (DUID) for obtaining static leases | ## State files | File | Producer | Consumer(s) | Purpose | |---|---|---|---| | `/perm/dhcp4/wire/ack` | `dhcp4` | `dhcp4` | last DHCPACK packet for renewals across restarts | | `/perm/dhcp4/wire/lease.json` | `dhcp4` | `netconfigd` | Obtained DHCPv4 lease | | `/perm/dhcp6/wire/lease.json` | `dhcp6` | `netconfigd`, `radvd` | Obtained DHCPv6 lease | | `/perm/dhcp4d/leases.json` | `dhcp4d` | `dhcp4d`, `dnsd` | DHCPv4 leases handed out (including hostnames) | ## Available ports | Port | Purpose | |---|---| | `:8053` | `dnsd` metrics (forwarded requests) | `:8066` | `netconfigd` metrics (nftables counters) | `:80` | gokrazy web interface | `:67` | `dhcp4d` | `:58` | `radvd` | `:53` | `dnsd` | `:8077` | `backupd` (serve backup.tar.gz) | `:7733` | `diagd` (perform diagnostics) | `:5022` | `captured` (serve captured packets) Here’s an example of `cmd/diagd` output: diagd output Here’s an example of `cmd/netconfigd` metrics when scraped with [Prometheus](https://prometheus.io/) and displayed in [Grafana](https://grafana.com/): metrics in grafana