AirPlay is great and "just works" if all your devices are on the same network. But if your device and TV are on separate broadcast domains, for example different VLANs, they will not be able to discover each other. Luckily the solution is simple.
Find somewhere to run Linux (in my case a Raspberry Pi), plug it on a hybrid switch port, and create a new interface for each VLAN you would like to "bridge" the multicast domain.
$ apt install -y vlan $ cat /etc/netplan/50-vlans.yaml network: version: 2 ethernets: eth0: optional: true vlans: vlan10: id: 10 link: eth0 dhcp4: true macaddress: aa:bb:cc:dd:ee:01 vlan20: id: 20 link: eth0 dhcp4: true macaddress: aa:bb:cc:dd:ee:02 $ netplan generate $ netplan apply
Next we need to install Avahi and enable its mDNS reflector.
$ apt install -y avahi-daemon $ sed -i 's/#enable-reflector=no/enable-reflector=yes/' /etc/avahi/avahi-daemon.conf $ sed -i 's/#allow-interfaces=eth1/allow-interfaces=vlan10,vlan20/' /etc/avahi/avahi-daemon.conf $ systemctl restart avahi-daemon
That's it! You should see mDNS traffic on the Avahi host with
tcpdump -n host 126.96.36.199 and port 5353 between your MacOS/iOS and AirPlay devices.