Multiple subnets and Sonos on Ubiquiti EdgeOS (ERPOE-5) with bcast-relay

  • 10 November 2017
  • 3 replies
  • 1342 views

Troubleshooting Subnets and Players:


Summary:


Recently, I had two (2) players drop off the network: one P1 and one P3. The P1 returned after 2+ hours all by itself and updated. The P3 did not, this is her story.

I won't TL;DR you here, suffice it to say I tried the listed options below per-typical when speakers drop off and these steps did not work due to other issues I call out below. Enough is written on them in Sonos Community and maybe other forums to aide you with questions and exacting order of operation for these items:

( Listed in order of trial: )
  • Sonos Controller > Settings > Add Player > re-add the lost player -- wait ~3-10 minutes for speaker to re-appear;
  • Unplug - wait 30s (at LEAST 10s) -- replug - wait ~3-10 minutes for speaker to re-appear;
  • RESET (I don't do this lightly and don't recommend you do either since it means loss of most (all?) speaker history from Sonos account) using the PLAY+Plug-In_until_amber(red)_white flash and wait for green.


Comment: I typically, and before today have always, added speakers via WiFi connectivity and setup -- I'd never used a network cable! Also, some of these fixes below MAY be necessary for dual-subnets where controllers and or speakers may be operating on separate subnets as was my case since I had reset (lobotomized) my P3 and wanted to reconnect it using a hard-wire connection, my workstation app (Windows) instead of my phone app (android).

My Short Backstory:


Soon after adding 3rd player to our mix back in 2015, I was plagued with anomalous drops of both music and/or speaker(s) and separated groups due to various reasons. Flash-forward 2-3 months of research and trials and found my router fix: UDP PORT 1900 was effectively BLOCKED (dropped) by my router (UBNT ERPOE-5) but not deliberately. Another part of the fix was re-configuring my APs but that is irrelevant to this discussion. I found a working community contributed service (bcast-relay) which I researched and eventually loaded, configured and have been a happy 3+ Sonos playing fool since ~Apr'15 and owner since Nov'14. And needless to say, I now have many more players and "rooms" and always planing my next update.

My Necessary System Correction:


If you check out this Sonos Community relevant posting you will read that several more ports were opened on the router firewall in that situation. As a security minded IT person, I don't just open ports freely and hope for the best. So I searched and found this Sonos Customer Help Gem . NOW we're talking, a list of ports and purposes...well, kindda. I called up Sonos help desk trying to understand WHICH of those ports were needed during CONNECTION phase because either my 1900 port relay was working to help solve the "DISCOVERY/ANNOUNCEMENT" phase of the ADD PLAYER process or that port relay was not of any consequence during discovery because the P3 was always identified and MAC address presented and clicking Continue to add the speaker ALWAYS yielded the dreaded "!" Not Connected message!!!
So, the first thought for me was to add UDP port 1901 to my broadcast relay router rule. But, that alone did NOT fix the problem for my router and I don't suspect it would for other routers.
Finally, upon reviewing the list in the above second link again, I hit upon two "Sonos" ports: 6969 and 4444, which just seem to be a bit instrumental and worth a further test. I updated the router configuration adding those two ports so that I now have relay routes for 1900, 1901, 4444, and 6969 and literal magic and music started happening.

Findings:


(all timings are relevant to my system size, network, and traffic load, YMMV)
A) The P3 speaker was always detected during "discovery" phase with relay rule for UDP port 1900;
😎 However, P3 speaker only re-connected to the system with 1901, 4444 and 6969 AND in less than 8 seconds!! (I have NEVER had speakers add that fast -- this is a whole new realization for me, incredible!!!)
😎 It took another 5 seconds for the announcement that "a new speaker needs to be added to my account" and upon entering my user id and password the player IMMEDIATELY showed up in the Windows app asking which room to identify it with. Upon which I was able to get music to it immediately.
C) Opening the Controller app on my phone afterwards showed the room playing in the group and everything else was as it should be.

My Solution template for the record:


Router: Ubiquiti ERPOE-5 (2013 model, 5 ports total)
Service add-in: bcast-relay (you can search this term in forum: https://community.ubnt.com/t5/EdgeMAX/bd-p/EdgeMAX)
Below is my configuration where eth4 is my LAN (wired) subnet port and switch0 is my WLAN (wireless) subnet ports (eth2 and eth3, aggregated on switch0). I segregate my subnets on the third octet where LAN is x.x.12.0/24 and WLAN is x.x.13.0/24 and routing rules (outside scope of this discussion) are setup to allow appropriate data to flow between the two subnets. If you are not using the internal switch within the router, substitute in your appropriate ethX interfaces and yes you can have more than two interface definitions per rule if you need.
EdgeOS CLI instructions:
code:
configure
set service bcast-relay id 1 description 'Sonos Bcast Relay1'
set service bcast-relay id 1 interface eth4
set service bcast-relay id 1 interface switch0
set service bcast-relay id 1 port 1900

set service bcast-relay id 2 description 'Sonos Bcast Relay2'
set service bcast-relay id 2 interface eth4
set service bcast-relay id 2 interface switch0
set service bcast-relay id 2 port 1901

set service bcast-relay id 3 description 'Sonos Bcast Relay3'
set service bcast-relay id 3 interface eth4
set service bcast-relay id 3 interface switch0
set service bcast-relay id 3 port 6969

set service bcast-relay id 4 description 'Sonos Bcast Relay4'
set service bcast-relay id 4 interface eth4
set service bcast-relay id 4 interface switch0
set service bcast-relay id 4 port 4444

save
commit

3 replies

Hi

Thanks for you very intersting post. I have almost same issue. Could you please help me to solve this issue?:

I have separated two Sonos Connect (Sonos 1 and Sonos 2) with two Subnetworks (192.168.10.1 and 192.168.20.1) and using firwall rules, that they can't find each other. This solution helps me, that the users of Sonos 1 only can control Sonos 1 and not Sonos 1 and 2.

Now i want to control Sonos 1 and Sonos 2 with a windows computer with the ip 192.168.1.117 with Sonos Desktop. But Sonos Desktop can't find the Sonos 1 and Sonos 2. How i need to set the Bcast relay?

Interfaces:
Router: 192.168.1.1
Eth0: 192.168.1.100
Eth1: 192.168.10.1
Eth2: 192.168.20.1

My firwall rules:

Ruleconfiguration 1
Default Action: Drop
Interface: "eth1" Direction: "in"
Ruleset: Drop /
Destination Adress 192.168.20.0/24

Ruleconfiguration 2
Default Action: Drop
Interface: "eth2" Direction: "in"
Ruleset: Drop /
Destination Adress 192.168.10.0/24

My network draft:

Hi maka,
I won't be able to script this out, but you should be capable of doing this. While Sonos (the company) won't directly support my config nor yours, it's not because it can't be done, it's because it's outside the Apple-esque norm and they don't want to be in the networking support business.
So, assuming you are using 255.255.255.0 for all your subnet masks, all that is generally required is the following:
1) ensure the router can properly route between all subnets. Use ping to verify route pathing compliance. Use trace route to ensure expected hops from one subnet to the other.
2) create a bcast-relay entry for each subnet pair for each port. (Eth0 to eth1, eth0 to eth2, eth1 to eth2). This can be done simply by replacing switch0 with eth1 in the lines above AND adding a third interface instruction to each port relay definition group for eth2.
You must ensure that your windows firewall is configured to allow these same ports from internal connections. HTH.
Hi DarkonIV

Thanks for your reply. To be sure would it be like this correct to open the ports as example between eth0 and eth1?:

set service bcast-relay id 1 description 'Sonos Bcast Relay1'
set service bcast-relay id 1 interface eth0
set service bcast-relay id 1 interface eth1
set service bcast-relay id 1 port 1900

set service bcast-relay id 2 description 'Sonos Bcast Relay2'
set service bcast-relay id 2 interface eth0
set service bcast-relay id 2 interface eth1
set service bcast-relay id 2 port 1901

set service bcast-relay id 3 description 'Sonos Bcast Relay3'
set service bcast-relay id 3 interface eth0
set service bcast-relay id 3 interface eth1
set service bcast-relay id 3 port 6969

set service bcast-relay id 4 description 'Sonos Bcast Relay4'
set service bcast-relay id 4 interface eth0
set service bcast-relay id 4 interface eth1
set service bcast-relay id 4 port 4444

Reply