Wanted to share something I ended up building after going down a fairly deep rabbit hole with my home router setup.
Backstory: I was running Home Assistant on Proxmox and kept hitting mDNS/SSDP discovery problems from VMs sharing a bridge — fixed that with SR-IOV for a while, but that comes with its own pain (not every NIC supports it, VF allocation by hand gets old, and OPNsense-on-FreeBSD really doesn't like VF devices). Looked at replacing the router itself — MikroTik, OPNsense, VyOS — and they all have the same gap: real per-box configuration, but no single description of the whole network's topology, and no clean way to move that config between boxes or spin up a backup from it.
Chasing the SR-IOV problem got me into Open vSwitch, and from there into OVN. Worth being clear about what these actually are, since it's easy to assume "SDN" means some cloud-only black box: Open vSwitch is just a Linux networking component — packaged in Debian/Ubuntu/RHEL like any other, running as an ordinary userspace daemon plus a kernel datapath. OVN is the control-plane layer on top of it, also just Linux daemons and a couple of databases. The router itself is plain Linux — no special appliance OS, no vendor firmware, nothing here that couldn't run on any box you'd already use as a home server. It's normally used for VM/Kubernetes networking (that's where the DB-driven, no-single-provisioned-interface model comes from), not home routers — but there's nothing cloud-specific about the software itself.
ovn-fabric is what came out of pointing that stack at a real home network instead: you describe your network (segments, uplinks, VPN tunnels) as plain TypeScript, and it emits one self-installing, idempotent shell script per host — no netplan, no hand-typed ovn-nbctl/ovs-vsctl, no drift between what you meant to configure and what's actually running. It's been running my own router setup (multiple VLAN segments, two WireGuard exits to different regions, one physical uplink) for a while now, on an otherwise unremarkable Linux box.
Write-up with the architecture (how OVN actually works, bridging it to a real VLAN, bridging it to WireGuard through a network namespace) and diagrams: Bridging OVN into a physical home network (or how “what is OVS?” led here)
Code: GitHub - mabels/ovn-fabric: Declarative OVN/OVS topology generator — one config, one self-installing shell script per host. (Apache-2.0)
Curious whether anyone else here has pushed OVN/OVS this far outside its usual cloud/VM habitat, or hit the same "every appliance gives you one router's config, not a network's" wall.
Backstory: I was running Home Assistant on Proxmox and kept hitting mDNS/SSDP discovery problems from VMs sharing a bridge — fixed that with SR-IOV for a while, but that comes with its own pain (not every NIC supports it, VF allocation by hand gets old, and OPNsense-on-FreeBSD really doesn't like VF devices). Looked at replacing the router itself — MikroTik, OPNsense, VyOS — and they all have the same gap: real per-box configuration, but no single description of the whole network's topology, and no clean way to move that config between boxes or spin up a backup from it.
Chasing the SR-IOV problem got me into Open vSwitch, and from there into OVN. Worth being clear about what these actually are, since it's easy to assume "SDN" means some cloud-only black box: Open vSwitch is just a Linux networking component — packaged in Debian/Ubuntu/RHEL like any other, running as an ordinary userspace daemon plus a kernel datapath. OVN is the control-plane layer on top of it, also just Linux daemons and a couple of databases. The router itself is plain Linux — no special appliance OS, no vendor firmware, nothing here that couldn't run on any box you'd already use as a home server. It's normally used for VM/Kubernetes networking (that's where the DB-driven, no-single-provisioned-interface model comes from), not home routers — but there's nothing cloud-specific about the software itself.
ovn-fabric is what came out of pointing that stack at a real home network instead: you describe your network (segments, uplinks, VPN tunnels) as plain TypeScript, and it emits one self-installing, idempotent shell script per host — no netplan, no hand-typed ovn-nbctl/ovs-vsctl, no drift between what you meant to configure and what's actually running. It's been running my own router setup (multiple VLAN segments, two WireGuard exits to different regions, one physical uplink) for a while now, on an otherwise unremarkable Linux box.
Write-up with the architecture (how OVN actually works, bridging it to a real VLAN, bridging it to WireGuard through a network namespace) and diagrams: Bridging OVN into a physical home network (or how “what is OVS?” led here)
Code: GitHub - mabels/ovn-fabric: Declarative OVN/OVS topology generator — one config, one self-installing shell script per host. (Apache-2.0)
Curious whether anyone else here has pushed OVN/OVS this far outside its usual cloud/VM habitat, or hit the same "every appliance gives you one router's config, not a network's" wall.