New GitHub Repo: A Dockerized UDP Broadcast Relay for Multi-VLAN Networks
Why I Built This
If you’ve segmented your home network into VLANs—IoT, Media, Guest, and so on—you’ve probably run into this: UDP broadcast discovery doesn’t traverse VLAN boundaries by default. Devices like an HDHomerun tuner or a Roku sit on one VLAN, and the client trying to discover them (Plex, Emby, whatever) sits on another, and they simply can’t find each other.
Most network controllers (UDM Pro, UniFi Dream Router, etc.) already handle mDNS repeating for things like Chromecast, AirPlay, and HomeKit. But plenty of discovery protocols aren’t mDNS—HDHomerun, Roku’s SSDP, TP-Link Kasa—and those still need something relaying the raw UDP broadcast across interfaces.
I found FirbyKirby/udp-broadcast-relay, which packages udp-broadcast-relay-redux into a clean, Docker Compose-friendly container, and it did most of what I needed. I forked it after running into issues with environment variables from my docker-compose file not being read reliably into the container’s arguments—I reworked the entrypoint’s argument handling with a Python entrypoint to make it more resilient to how Compose passes env vars.
What It Does
- Multi-VLAN UDP relay running in host network mode.
- Supports HDHomerun, Roku/SSDP, Kasa, and similar UDP-discovery devices.
- Complements controllers that already repeat mDNS—this container covers the non-mDNS UDP discovery gap.
- Environment-variable driven configuration, with a built-in health check.
VLAN 10 (IoT) VLAN 20 (Media)
| |
| UDP Broadcast |
|------------------------>|
| |
v v
HDHomerun Tuner Media Server
Quick Start
docker run -d \
--name udp-relay-hdhomerun \
--network host \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
-e RELAY_ID=1 \
-e BROADCAST_PORT=65001 \
-e INTERFACES=br0.10,br0.20 \
docker.io/fingerhutascode/udp-broadcast-relay:latest
A couple of things to know going in:
- Each container instance needs a unique
RELAY_IDbetween 1 and 99, or you’ll end up with relay loops. - A container relays to all the interfaces you list. If you need selective paths (say, VLAN 10 ↔ 20 but not 20 ↔ 30), run separate containers with different interface sets.
- On Unraid, VLAN interfaces typically show up as
br0.X(e.g.br0.10). - For Roku/SSDP on port 1900, also set
MULTICAST_GROUP=239.255.255.250.
Common Use Cases
- HDHomerun tuner discovery on 65001 for Plex, Emby, etc.
- Roku discovery via SSDP on 1900.
- TP-Link Kasa discovery on 9999 and 20002.
👉 You can check out the repo here: udp-broadcast-relay-docker