Plex Remote Access Over Tailscale (No Port Forwarding)

Stream Plex from anywhere at full speed without opening a router port. Point Plex at your Tailscale IP and treat the tailnet as LAN — direct, encrypted, no relay throttle.

On this page
  1. Why remote Plex is slow or risky by default
  2. The plan: reach Plex over Tailscale
  3. Task 1: Put Plex and your phone on the same tailnet
  4. Task 2: Advertise the Tailscale address to Plex
  5. Task 3: Treat the tailnet as LAN (and the one mistake to avoid)
  6. Confirm you’re direct, not relayed
  7. Why this is the most secure option
  8. Take private access beyond Plex

Plex is wonderful at home and frustrating the moment you leave. Away from your network, streams crawl and buffer, or you find yourself staring at your router’s port-forwarding page wondering whether opening a hole to the internet is really a good idea. It isn’t the only way. I reach my server from anywhere over Tailscale — a mesh VPN (a private network that stitches your devices together over encrypted tunnels) — so my phone behaves as if it were sitting on my couch, and I never forwarded a single port.

This post explains why remote Plex is slow or risky by default, then walks through the two Plex settings that turn a Tailscale connection into a fast, direct one. It builds on installing Plex and the general-purpose Tailscale subnet router setup.

First: make these values your own

Every address below is a placeholder. Before you copy anything, swap in your own:

  • 192.168.1.50 → your Plex server’s real LAN IP
  • 192.168.1.0/24 → your home subnet
  • 100.x.y.z → your Plex server’s Tailscale IP (it starts with 100. — find it in the Tailscale admin console or by running tailscale ip on the server)
  • 100.64.0.0/10 → leave this exactly as-is; it’s the fixed range Tailscale draws every device’s IP from, so it is not machine-specific
  • YOUR_PLEX_TOKEN → your account’s Plex token

If a value looks specific to one machine, it’s a placeholder to change — not a literal to copy.

What this stack is for
Everything in this guide automates managing and streaming media you have the rights to — your own rips, DRM-free purchases, home video, Linux ISOs, and public-domain or Creative Commons releases. Downloading copyrighted material you haven't paid for is illegal in most places, and it isn't what this guide teaches. What you point these tools at is on you.
Three ways to reach Plex from outside your home1 · Port forwardYour phoneawayYour router:32400Plex serverat homeOpens an inbound hole to the whole internet2 · Plex RelayYour phoneawayPlex Relay cloud2 Mbps capPlex serverat homeWorks anywhere, but throttled — a 4K stream just buffers3 · Tailscale — this guideYour phoneawayPlex serverat homeencrypted WireGuard tunnelDirect, full-speed, encrypted — and no inbound port openOnly path 3 opens nothing on your router and never touches the 2 Mbps relay cap.

Why remote Plex is slow or risky by default

When a Plex app is away from home and can’t reach your server directly, Plex quietly routes the stream through its own Relay — a middleman server that both ends connect to securely. It’s a clever fallback that works from anywhere, but it comes with a hard ceiling: relayed connections are limited to 2 Mbps for free and paid accounts alike. That’s fine for music or a phone-sized episode, and nowhere near enough for a high-bitrate movie — so it stalls and buffers. If your remote streams look permanently low-quality, you’re almost certainly on Relay.

The classic way to escape Relay is to forward a port — tell your router to send inbound traffic on port 32400 straight to your Plex server. It works, but it means opening a door to your server that the entire internet can knock on. That’s a bigger commitment than most people realize, and it’s the part I never liked.

A note on the 2025 remote-streaming change

Since April 29, 2025, Plex requires a Plex Pass or Remote Watch Pass to stream personal media to genuinely remote clients; streaming on your own local network stays free. The setup below is worth doing on any plan for the speed and security — and because it makes your remote devices behave like local ones.

There’s a third path that avoids both problems: put your remote device on your network so the connection is direct, encrypted, and never leaves a private tunnel.


The plan: reach Plex over Tailscale

Tailscale builds a private mesh network across your devices using WireGuard, a modern, fast VPN protocol. Every device gets a stable 100.x address, and Tailscale connects them through NAT without any port forwarding — there is no inbound port to open, and the traffic is end-to-end encrypted. Install it on your Plex server and on your phone, and the two can talk as if they were on the same LAN, wherever you are.

The catch is that Plex doesn’t automatically know the Tailscale path is a good one. Left alone, it still hands remote clients to Relay. Two settings fix that: one tells Plex to advertise its Tailscale address, and one tells Plex to treat the tailnet as local. Let’s do both.


Task 1: Put Plex and your phone on the same tailnet

1Install Tailscale on the server and the client10 min

Install Tailscale on the machine running Plex and on every device you want to stream from, and sign both into the same account. On the server, note its Tailscale IP — it starts with 100.:

Find the server's Tailscale IP

tailscale ip -4
# prints something like 100.x.y.z

From your phone (with Tailscale connected), you should now be able to open http://100.x.y.z:32400/web and see Plex. If that loads, the tunnel works — Plex just isn’t using it for streaming yet. If Tailscale itself is new to you, the subnet router walkthrough linked at the end covers installing and signing in step by step.


Task 2: Advertise the Tailscale address to Plex

Plex publishes a list of URLs that its apps try when they connect. If your tailnet address isn’t on that list, the apps never try it and fall back to Relay. The Custom server access URLs field fixes that — Plex’s own docs call it out specifically for “if you’re using a VPN to get back home.”

1Add your Tailscale URL in Settings → Network3 min

In Plex Web, open Settings → Server → Network, turn on Show Advanced, and set:

Field Value
Custom server access URLs http://100.x.y.z:32400

Use your server’s real Tailscale IP. Save, then restart Plex so it re-publishes its connection list. Now the apps have a direct address to try.

Prefer to script it on a headless server? The same setting can be written over the Plex API — the copy-paste version is in the companion playbook.


Task 3: Treat the tailnet as LAN (and the one mistake to avoid)

Advertising the address isn’t quite enough. By default Plex treats any non-local connection as remote, which means it can still apply remote bandwidth limits and secure-connection requirements to your tailnet clients. The LAN Networks setting tells Plex which address ranges to consider local — and Plex lets you specify a range or a single address here.

Every Tailscale device draws its IP from one fixed block: the 100.64.0.0/10 CGNAT range. Add that block to LAN Networks and Plex treats every tailnet client as if it were on your couch — no relay, no remote cap.

1Add the tailnet range to LAN Networks3 min

Still in Settings → Server → Network, set:

Field Value
LAN Networks 192.168.1.0/24,100.64.0.0/10

Save and restart Plex. On your phone, force-quit and reopen the Plex app; it should flip from a Relay connection to a direct Remote connection, streaming at full quality.

Do not list only the tailnet range

This is the mistake that cost me an evening. If you set LAN Networks to 100.64.0.0/10 alone, it overrides Plex’s automatic local-network detection — so your real home devices are suddenly classified as remote, hit the remote bitrate cap, and your 4K files refuse to play at home. The value must contain both your home subnet and the tailnet range. List both, and everyone streams direct.

The diagram below shows exactly what goes wrong and what to type instead:

The LAN Networks trapWrong — tailnet onlyLAN Networks: 100.64.0.0/10TV at home · 192.168.1.60seen as remote → capped4K won’t playPhone on tailnet · 100.x.y.zseen as local → full speedThe tailnet works, but you just brokeevery device on your real LAN.Right — both rangesLAN Networks: 192.168.1.0/24,100.64.0.0/10TV at home · 192.168.1.60seen as local → full speedPhone on tailnet · 100.x.y.zseen as local → full speedHome and tailnet devices both count aslocal. Everyone streams direct.

Confirm you’re direct, not relayed

Two quick checks tell you it worked. First, in the Plex app while streaming remotely, open the playback settings — a direct connection shows as Remote (or the stream simply plays at full quality instead of the Relay cap). Second, from any device on your tailnet you can ask the server what it thinks each client is:

Ask Plex how it classifies the active streams

# Run from a device on your tailnet. A local client shows location="lan".
curl "http://100.x.y.z:32400/status/sessions?X-Plex-Token=YOUR_PLEX_TOKEN"

Look for location="lan" on the session — that’s Plex confirming the tailnet client counts as local.

Ignore the Remote Access banner

Your server’s Settings → Remote Access page may still say “Relay” or show a warning, because that page tracks the public port-forward path — which you’re deliberately not using. As long as your clients connect directly over Tailscale, that banner is cosmetic. It’s the one piece of the Plex UI that will try to talk you out of a setup that’s working perfectly.

If a remote 4K stream still won’t play smoothly once you’re direct, the bottleneck has moved from the network to the server’s CPU — that’s a transcoding problem, and it’s covered in Plex Direct Play and transcoding on weak hardware.


Why this is the most secure option

Port forwarding exposes your Plex server to the public internet and relies on Plex’s own TLS and auth to hold the line. The Tailscale approach removes the exposure entirely: there is no inbound port to open, and every byte between your phone and your server travels inside an encrypted WireGuard tunnel that only those two devices can read. Nothing on your router changes, and there’s no public endpoint for a scanner to find. You get the speed of a direct connection with a smaller attack surface than either Relay or a forwarded port.


Take private access beyond Plex

You can now stream your whole library from anywhere at full quality without exposing a thing. If you want the same no-port-forward reach for the rest of your lab — dashboards, other services — the Tailscale subnet router (in the related posts) extends this idea to every machine at once. And if a remote stream is smooth on the network but still struggles, the server-tuning side is covered in Direct Play and transcoding.


Related posts:

Comments

Comments are powered by GitHub Discussions — sign in with a GitHub account to join the conversation.