How to Access Your Plex Media Server Remotely with Localtonet
Localtonet gives your Plex Media Server a secure public HTTPS URL so you can stream from anywhere, without port forwarding, a static IP, or router changes. This guide covers the 2025 Plex subscription change you need to know about, a full setup guide for Windows, Linux, macOS, and Docker, how to keep the tunnel running automatically after a reboot, and answers to the most common Plex remote access questions.
As of April 29, 2025, Plex requires a paid subscription to stream personal video content remotely. The Remote Watch Pass costs $1.99/month per viewer and is the lowest-cost option for remote streaming. The Plex Pass costs $6.99/month (or $69.99/year) and unlocks the full Plex feature set for the server admin. Music via Plexamp and photos remain free without a subscription. A Localtonet tunnel provides the connection quality. The subscription requirement is enforced by Plex's own apps separately.
Why Use a Tunnel Instead of Plex Built-in Remote Access?
Plex includes a built-in remote access feature, but it depends on opening port 32400 on your router and having a reachable public IP address. Many home and mobile networks block this entirely.
When Plex cannot establish a direct connection, it falls back to Relay mode. Relay routes your stream through Plex's own servers and caps the speed at 2 Mbps. That cap makes 1080p unwatchable and 4K impossible. High-bitrate content gets transcoded down, causing quality loss even before buffering starts.
A Localtonet tunnel bypasses all of this. It creates an outbound encrypted connection from your machine to Localtonet's servers, so no inbound ports ever need to be open. The result is a stable, uncapped, direct connection from any device to your Plex library.
With Localtonet Tunnel
- Works behind NAT, double NAT, and CGNAT
- No router or firewall changes needed
- No dynamic IP problems
- No 2 Mbps Relay cap
- Port 32400 never exposed publicly
- Automatic HTTPS on the public URL
Plex Built-in Remote Access
- Requires router port forwarding
- Fails behind CGNAT (common on mobile ISPs)
- Falls back to Relay at 2 Mbps when direct fails
- Dynamic IP changes break the connection
- Exposes port 32400 on your public IP
How Localtonet Works with Plex
Plex Media Server runs on your local machine on port 32400. Localtonet creates an encrypted HTTP tunnel from that port to a public HTTPS URL. When you or another user opens that URL, the request travels through the tunnel to your Plex server and back. Your machine never needs an open inbound port.
Install and authenticate Localtonet on your machine
Follow the OS-specific installation steps below. Authenticate using your AuthToken from Dashboard → My Tokens.
Create an HTTP tunnel for port 32400
Go to localtonet.com/tunnel/http. Select your Process Type, AuthToken, and a server. Enter IP 127.0.0.1 and port 32400. Click Create.
Start the tunnel
Press Start in the tunnel list. Your public HTTPS URL appears immediately (e.g., https://abc123.localto.net).
Open Plex via the tunnel URL
Open https://your-tunnel-url.localto.net/web in any browser. Sign in to your Plex account. Your library loads directly through the tunnel.
When creating the tunnel, select Custom Subdomain and enter something like myplex. Your URL will always be https://myplex.localto.net across restarts. You can also connect your own domain via the Localtonet DNS Manager by pointing your nameservers to ns1.localtonet.com and ns2.localtonet.com.
Setup Guide: Windows
Plex + Localtonet on Windows
Confirm Plex is running
Check your system tray for the Plex icon, or open http://localhost:32400/web in your browser to confirm the server is active.
Install Localtonet
Two options are available. Option A (Microsoft Store): Search for Localtonet in the Microsoft Store and install it directly. Option B (Binary): Download the correct ZIP for your architecture from localtonet.com/download (64-bit, 32-bit, or ARM64). Extract to a folder such as C:\Localtonet.
Authenticate with your AuthToken
Open Command Prompt or PowerShell in the Localtonet folder and run:
localtonet --authtoken YOUR_TOKEN_HERE
The token is stored locally after the first run. Copy your token from Dashboard → My Tokens.
Create and start the HTTP tunnel
Go to localtonet.com/tunnel/http. Select your AuthToken, choose a server, enter IP 127.0.0.1 and port 32400. Click Create, then Start.
Optional: Run as a Windows Service for always-on access
Open Command Prompt or PowerShell as Administrator and run:
localtonet --install-service --authtoken YOUR_TOKEN_HERE
localtonet --start-service --authtoken YOUR_TOKEN_HERE
To verify: open services.msc and confirm Localtonet shows Status = Running. To stop or remove: use --stop-service or --remove-service with your token.
Setup Guide: Linux
Plex + Localtonet on Linux
Confirm Plex is running
sudo systemctl status plexmediaserver
You should see active (running). If not: sudo systemctl start plexmediaserver
Install Localtonet (one-line install script)
curl -fsSL https://localtonet.com/install.sh | sh
This script auto-detects your CPU architecture and installs the correct binary to /usr/local/bin/localtonet. It may ask for sudo to write to system directories. Verify: localtonet --version
Authenticate
localtonet --authtoken YOUR_TOKEN_HERE
The token is stored locally and can be rotated or revoked anytime from the dashboard.
Create the HTTP tunnel from the dashboard
Go to localtonet.com/tunnel/http. Select your AuthToken, choose a server, enter IP 127.0.0.1 and port 32400. Click Create, then Start.
Install as a systemd service for always-on access
sudo localtonet --install-service --authtoken YOUR_TOKEN_HERE
sudo localtonet --start-service --authtoken YOUR_TOKEN_HERE
Verify the service is running:
systemctl status localtonet
To stop or remove: use --stop-service or --remove-service with your token.
The install script handles architecture detection automatically. If you prefer manual installation, download the correct binary from localtonet.com/download: Linux x64, ARM, ARM64, MUSL x64, MUSL ARM, or MUSL ARM64 for Alpine and other musl-based distributions.
Setup Guide: macOS
Plex + Localtonet on macOS
Confirm Plex is running
Check the Plex icon in your menu bar, or open http://localhost:32400/web in Safari to confirm.
Install Localtonet via Homebrew (recommended)
brew tap localtonet/tap
brew install localtonet
localtonet --version
No manual download or permission changes needed. Works on both Intel and Apple Silicon (M1/M2/M3) Macs. If you do not have Homebrew, install it first from brew.sh.
Alternative: Manual binary install
If you prefer not to use Homebrew, download the binary from localtonet.com/download. Choose macOS 64-bit (Intel) or macOS ARM64 (Apple Silicon). Extract and make it executable:
unzip localtonet-osx.zip
chmod +x ./localtonet
If macOS blocks execution with a Gatekeeper warning, go to System Settings → Privacy & Security and click Allow Anyway.
Authenticate
localtonet --authtoken YOUR_TOKEN_HERE
Create the HTTP tunnel from the dashboard
Go to localtonet.com/tunnel/http. Select your AuthToken, enter IP 127.0.0.1 and port 32400. Click Create, then Start.
Install as a launchd service for always-on access
sudo localtonet --install-service --authtoken YOUR_TOKEN_HERE
sudo localtonet --start-service --authtoken YOUR_TOKEN_HERE
Verify: launchctl list | grep localtonet
Setup Guide: Docker
Plex + Localtonet on Docker
If you run Plex in a Docker container, Localtonet has an official Docker image. Run both containers on the same host and point the Localtonet container at the Plex container's port.
Confirm your Plex container is running
docker ps | grep plex
Pull the Localtonet image
docker pull localtonet/localtonet
Run with your AuthToken
docker run localtonet/localtonet --authtoken YOUR_TOKEN_HERE
Create the HTTP tunnel from the dashboard
Go to localtonet.com/tunnel/http. Select your AuthToken, enter the correct IP and port 32400. Click Create, then Start.
If Plex and Localtonet run in separate containers, 127.0.0.1 will not reach the Plex container. Use host.docker.internal on Docker Desktop for Windows and macOS. On Linux, use the Docker bridge IP (typically 172.17.0.1) or run both containers with --network=host.
Running Localtonet Automatically After Reboot
A Plex tunnel is only useful if it stays active. Localtonet has a built-in service mode that installs it as a system service on Windows (Windows Service), Linux (systemd unit), and macOS (launchd job) using the same commands across all platforms.
Service Commands (Windows, Linux, macOS)
Install the service
sudo localtonet --install-service --authtoken YOUR_TOKEN_HERE
On Windows, run as Administrator (no sudo needed). This registers Localtonet as a system-level background service.
Start the service
sudo localtonet --start-service --authtoken YOUR_TOKEN_HERE
Check service status
sudo localtonet --status-service --authtoken YOUR_TOKEN_HERE
Or use OS-level tools: services.msc (Windows), systemctl status localtonet (Linux), launchctl list | grep localtonet (macOS).
Stop or remove the service
sudo localtonet --stop-service --authtoken YOUR_TOKEN_HERE
sudo localtonet --remove-service --authtoken YOUR_TOKEN_HERE
Stop the service first, replace the binary with the new version, then start the service again:
sudo localtonet --stop-service --authtoken YOUR_TOKEN_HERE
# replace binary
sudo localtonet --start-service --authtoken YOUR_TOKEN_HERE
Plex Settings to Optimize for Tunnel Access
🔗 Add the tunnel URL as a Custom Server Access URL
In Plex Web, go to Settings → Server → Network → Custom server access URLs. Add your Localtonet URL (e.g., https://myplex.localto.net). This helps Plex clients find and prefer your tunnel URL when connecting remotely.
🔒 Set Secure Connections to Preferred
In Settings → Server → Network → Secure connections, choose Preferred. Localtonet provides HTTPS automatically, so this ensures clients always use the encrypted connection.
🚫 Optionally disable Plex built-in Remote Access
If the Localtonet tunnel is your primary remote access method, you can disable Plex's built-in Remote Access under Settings → Server → Remote Access. This removes the port 32400 exposure on your public IP entirely.
Plex Remote Access Methods Compared
| Method | Port Forwarding | Works Behind CGNAT | Speed Cap | Static IP Required | Difficulty |
|---|---|---|---|---|---|
| Localtonet Tunnel | Not needed | ✓ | No cap (paid plan) | Not needed | ⭐ Easy |
| Plex Built-in (direct) | Required | ✕ | No cap | Recommended | ⭐⭐ Medium |
| Plex Relay (fallback) | Not needed | ✓ | 2 Mbps max | Not needed | ⭐ Automatic |
| VPN (WireGuard / OpenVPN) | Usually needed | Depends | No cap | Recommended | ⭐⭐⭐ Complex |
Localtonet Tunnel
Plex Relay
Plex Built-in Direct
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
| Plex asks for Remote Watch Pass after setup | Plex Pass or Remote Watch Pass required for video since April 2025 | Subscribe to Remote Watch Pass ($1.99/month) or Plex Pass ($6.99/month). This is a Plex policy, independent of the tunnel. |
| Tunnel URL loads but Plex shows "Not available" | Plex app not using the tunnel URL | Add the tunnel URL to Custom server access URLs in Plex Network settings |
| Stream buffers or quality is low | Plex is routing through Relay (2 Mbps cap) instead of the tunnel | Make sure the tunnel is active and the URL is set in Custom server access URLs |
| Tunnel works in browser but not in Plex app | Plex app connects via plex.tv and may not resolve the custom URL automatically | Open Plex directly via the tunnel URL: https://your-url.localto.net/web |
| macOS Gatekeeper blocks the binary | Unsigned binary warning from macOS | Use Homebrew install instead, or go to System Settings → Privacy & Security → Allow Anyway. Homebrew avoids this entirely. |
| Docker Localtonet cannot reach Plex at 127.0.0.1 | Containers have separate network namespaces | Use host.docker.internal (Windows/macOS) or 172.17.0.1 (Linux) as the tunnel IP |
| Tunnel disconnects after reboot | Localtonet not running as a service | Run --install-service and --start-service to register Localtonet as an auto-starting background service |
Frequently Asked Questions
Do I need Plex Pass to use Localtonet with Plex?
Localtonet itself does not require Plex Pass. However, since April 29, 2025, Plex requires either a Remote Watch Pass ($1.99/month per viewer) or a Plex Pass ($6.99/month for the server admin) to stream personal video content remotely. Music via Plexamp and photos remain free. Localtonet provides the connection. The subscription requirement is enforced by Plex independently.
Why is Plex remote access not working without port forwarding?
Plex's built-in remote access requires port 32400 to be reachable from the internet, either through manual port forwarding or UPnP/NAT-PMP. This fails when your ISP uses CGNAT (carrier-grade NAT, common on mobile and some residential connections), when you are behind double NAT, or when your router does not support UPnP. In these cases Plex falls back to Relay mode, which caps speed at 2 Mbps. A Localtonet tunnel bypasses all of this by using an outbound connection that does not require any open inbound ports.
What is Plex Relay and why is it slow?
Plex Relay is a fallback that routes your media stream through Plex's own servers when a direct connection to your Plex Media Server fails. Relay connections are capped at 2 Mbps, which is not sufficient for 1080p or 4K video. Content gets transcoded down to fit within the cap, reducing quality regardless of your actual connection speed. A Localtonet tunnel provides a direct connection to your server and is not subject to the Relay cap.
What port does Plex Media Server use?
Plex Media Server uses port 32400 by default for its web interface and client connections. This is the port you enter when creating a Localtonet HTTP tunnel. You can verify or change it in Plex Web under Settings → Server → Network → Manually specify public port.
How do I keep the Plex tunnel running after a restart?
Install Localtonet as a system service using the built-in commands. Run sudo localtonet --install-service --authtoken YOUR_TOKEN followed by sudo localtonet --start-service --authtoken YOUR_TOKEN. This works on Windows (Windows Service), Linux (systemd), and macOS (launchd). After installation, Localtonet starts automatically on every boot and restarts if it crashes.
Can I use a custom domain for my Plex tunnel?
Yes. Add your domain in the Localtonet DNS Manager, then update your nameservers to ns1.localtonet.com and ns2.localtonet.com at your domain registrar. After DNS propagation, select Custom Domain when creating the HTTP tunnel. Your Plex server will be reachable at a URL like https://plex.yourdomain.com with automatic HTTPS and no certificate setup required.
Is it safe to expose Plex through a tunnel?
A Localtonet tunnel is safer than opening port 32400 directly on your router because the tunnel uses an outbound connection and does not expose your home IP address. Your Plex server is still reachable via the tunnel URL, so keep Plex updated and use a strong Plex account password. For additional protection, enable Localtonet's HTTP authentication or SSO on the tunnel so users must authenticate before reaching Plex at all.
Stream Your Plex Library from Anywhere
No port forwarding. No static IP. No 2 Mbps Relay cap. Set up in minutes on Windows, Linux, macOS, or Docker.
Get Started Free →