Hot on the heels of my desktop media player series, my next task was to find a way to free my music from the confines of my own house without having to download a bunch of files to my phone. Oddly enough, I had already encountered some of the parts I’d need to make this happen.
I’ll give a broad overview of what I did, but I won’t go into too many specifics mainly because once I had implemented the solution, I promptly forgot what I did.
What started it all
When I got my 3D printer, I printed a whole lot of things and spent a lot of time online looking for more things to print. One project that a lot of printers seem to like is creating home server enclosures, mainly for a Raspberry Pi NAS. The one I liked the most was made by Michael Klements. His design sports 4 SSDs and a pretty fly lookin’ case. I had one Pi 5 running already, but it’s already spoken for, so I had a friend pick up another one for me as well as the proscribed Radxa Penta SATA Hat board which allows for the connection of 4+1 SATA devices to a Pi. I printed the case per Klements’ instructions — though I don’t have a cutter that could do the nice plexiglass window, so my case is solid all-around — and after waiting for what seemed an eternity for the metric screws to arrive, I got everything assembled and running.
Since I needed to be able to access this device from my Windows 11 machine, I needed something that would be fuss-less. I’m nowhere near being a Linux savant, and I had encountered the fussy world of getting Windows to talk to Linux in the past and I wasn’t keen to go through that again. Klements’ post ends with a stub of an instruction on how to set up Open Media Vault for this purpose, so that’s what I did. And it works, and has a pleasing user interface through which I could format my drives, set them up in a RAID configuration, and designate shared folders. To cap things off, I connected my 12TB USB drive to the NAS for long-term storage, and I was off to the races.
At this point I could certainly get to my media on my local network, but I often want to be able to access my music from elsewhere, like in the car or in the kitchen. Considering I always have my phone with me the logical solution was to find a way not just to stream to the phone from the NAS, but to do it when I wasn’t on my home network.
Safety first

Since I don’t know all that much about Linux, and because I don’t want to have to fight the OS just to get the most basic of things done, and because I don’t want to gum up the server with my own brand of half-assed attempts and failed installations, I turned to my ol’ pal Docker. Docker has allowed me to do all kinds of weird things without soiling the relatively pristine base operating system, although it does come with a few caveats of it’s own.
OMV has plugins, and there might be plugins that allow me to do a lot of these things I might want to do, but it has one plugin in particular, openmediavault-compose, that will let me do almost anything. I am a fair hand with the Docker CLI, but this plugin removes the need for such shenanigans, allowing for Docker use through a nice, clean UI. The original need for having Docker at all was to set up a way to share photos with the in-laws (which I did with an app called PhotoPrism, but that’s for another day), but in researching photo sharing solutions I ran into a whole lot of interesting avenues which helped with the music side of the biz.
My own private network
The problem with OMV is that it works great on the same network, but doesn’t have any ability to open up to the outside world. On top of that, I didn’t have any mobile software which could connect to media that wasn’t streaming from Big Service or which wasn’t downloaded to the phone.
Way back in the adolescence of the Internet, we used a tunneling VPN product called Hamachi — you might be aware of it, but for the young’ns Hamachi created a private network between two or more computers over the Internet. In cases where our games didn’t work so well over the open internet, or required some third party service to connect, Hamachi made games believe they were running on a LAN, which all multiplayer games seemed to support back in the day. At some point Hamachi went corporate and was subsequently deemed persona non grata as a result, but I figured there had to be something fresh out there that did the same thing.
My first attempt at trying to share photos from a shared folder on the NAS lead me to something called Tailscale. After installing the client on the server, it registered itself with the Tailscale service under my account. Each device connected thusly was provided an IP address within the VPN; originally I’d have to have install this on the in-laws PC so they could join the private network and access the photo sharing website, but since that was complex and cumbersome for the elderly, I removed Tailscale from the original equation, but when thinking about music, I returned to it.
I set up a new share in OMV specifically pointing at the “music” folder. I then used the following compose.yml
file set up through the OMV Docker UI that’s a part of OMV:
services:
tailscale:
image: tailscale/tailscale:stable
container_name: tailscaled
environment:
- TS_AUTHKEY=[TAILSCALE_AUTH_KEY]
- TS_STATE_DIR=/var/lib/tailscale
- TS_USERSPACE=0
- TS_HOSTNAME=omv-rpi5
volumes:
- /path/to/shared/Music:/mnt/shared/music
- /var/lib/tailscale:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
restart: unless-stopped
Now my setup is running OMV with the Tailscale client running in a Docker container. I had to get an auth key from the Tailscale dashboard in order to get this container registered with the Tailscale service, and the how-to on that is outlined by the helpful documentation on the Tailscale website. I had to use that auth key in the compose file, and also had to set the host path which is mapped to the container path under the volumes
section of the compose file.

Mobile media player
The last mile was probably the hardest. I had just received my new iPhone 17 — I mean literally had this whole server thing in progress when the phone arrived on my doorstep — so after transitioning everything from my old phone to the new phone, I had to go in search of any media player for iOS which would allow me to connect to the music folder that was being shared over my “talinet”. I feel that this is understandably harder than I think it should be. Mobile ecosystems lean towards big mindshare players in any space, and when it comes to music, Apple would love for us to use Apple Music. Barring that, there’s Spotify, Amazon Music, and probably others I don’t know and couldn’t care less about. If I want to play music downloaded to my phone it’s going to be Apple’s own Music app first, and absolutely anything else dead last as far as Tim Cook is concerned.
After some creative online searching, I ended up with an app called MusicStreamer — duh.

MusicStreamer allows for playing audio that’s on the device, is available via WiFi, but can also open media that’s made available though network shares when on a local network. After installing Tailscale on the phone and making it a member of my VPN, Tailscale showed up as a new “local network source” allowing me to point MusicStreamer to the shared music folder on the NAS.
Time will tell
I took a spin around the neighborhood this morning, hoping to maintain access to my in-home library while away from the wifi, and aside from a bit of a delay during which I assume the phone was switching over from wifi to 5G, the setup worked like a champ. I did notice that MusicStreamer has some peculiarities, however, like how clicking on a song will only play that song and won’t roll over to the next in the list unless I specifically told it to play an album or a playlist from the top. That is incredibly annoying but until I find another player which can access Tailscale’s network share, I’m stuck with it.
Some of the things I need to keep an eye on are that Tailscale authorizations have a freshness date, and need to be re-registered; this means I’ll have to continuously modify my compose.yml
file with new auth keys every once in a while. I hope there’s a way to get around this somehow.
I also am curious about whether or not MusicStreamer will register any new music I add to the NAS share. Sometimes these solutions take a while to arrive at, only to be stymied by the absolutely bonkers logic that developers apply to their products. I am really hoping I don’t have to re-scan my entire library every time I add a new album.