Skip to content

tiehfood/airoon

Repository files navigation

Release Version Release workflow License Stars ByMeACoffee

airoon

Play Roon to AirPlay speakers and Roon endpoints that live in a different IP subnet — typically across a site-to-site VPN between two homes, two offices, or a home and a holiday flat.

Out of the box, Roon's AirPlay and endpoint discovery only work on a flat local network. The moment your Roon Core sits at site B and the speakers (HomePod, Apple TV, AirPlay-capable Mac, Roon Bridge on a Raspberry Pi, …) are at site A behind a routed VPN, the speakers either don't show up at all in Roon, or they show up but playback silently fails. airoon fixes that.

You run a small daemon on a router (or any always-on Linux box) at each site. The one near your speakers discovers them; the one near your Roon Core re-publishes them on the Core's network as if they were local. The audio stream is proxied transparently between the two sides through a single TCP connection over your existing VPN. To Roon Core, every remote speaker looks like a speaker in the next room.

Status

Working end-to-end across a UniFi Site Magic VPN with Apple TV and HomePod mini on the speaker side, and Roon Core 2.x on the other. Roon Bridge / Roon Ready endpoints are also discoverable through the same daemon.

Build

make build

Cross-compiles inside Docker — no Go toolchain on the host required. Produces build/airoon-linux-arm64 plus amd64 and darwin variants.

Deploy

See deploy/udm/README.md for the UniFi UDM deployment flow (systemd unit, on_boot.d hook, per-side config templates). On a non-UDM Linux host the same systemd unit applies with paths adjusted.

Why this is needed

Roon assumes a single broadcast domain. Its AirPlay stack picks the wrong IP address when an mDNS reflector is in the middle, and its Roon-endpoint discovery on UDP/9003 (SOOD) relies on the UDP source address of the discovery packet — so a naive UDP forwarder breaks both. Generic broadcast relays (udpbroadcastrelay, udp-proxy-2020) handle the multicast plumbing but don't fix the RTSP/RTP path. airoon does the whole thing in one binary, so you deploy one service per site and not three.

License

MIT — see LICENSE.