29 min read

Access Your Plex Media Server Remotely from Anywhere

Learn how to access your Plex Media Server remotely without port forwarding or router changes. This guide shows how to create a secure HTTPS tunnel for Plex, bypass CGNAT limitations, and stream your media library from anywhere.

Remote tablet connecting through an HTTPS tunnel to a Plex server behind CGNAT.
An outbound HTTPS tunnel provides a remote path to the local Plex server without an inbound router rule.
Plex · Remote Streaming · HTTP Tunnels · 2026

Publish a Plex endpoint without opening an inbound router port

Plex can normally establish remote access through automatic router mapping or a manual port-forwarding rule, but those methods may fail behind CGNAT, double NAT, restricted routers, or networks you do not control. With Localtonet, the client establishes an outbound connection to our relay and publishes your selected Plex target at a public HTTPS address. This guide explains the networking model, current Plex remote-streaming entitlements, native and Docker installation patterns, external verification, security, routine operation, and troubleshooting.

🔒 No inbound router port required 🌐 Public HTTPS endpoint through a relay 💻 Windows · Linux · macOS · Docker

How Plex remote access and Localtonet differ

Plex Media Server listens locally on TCP port 32400. On a typical home network, that local port is reachable only from devices inside the LAN. A remote Plex client therefore needs a separate route from the public internet back to the server.

Plex built-in Remote Access attempts to provide that route. Depending on the router and network, Plex may request an automatic mapping through UPnP or NAT-PMP. A server administrator can instead configure a manual router mapping. The local Plex service still uses TCP 32400; Plex's Manually specify public port setting declares the external port associated with the router mapping. It does not change Plex Media Server's local listening port.

Automatic or manual mappings require a usable inbound path. They can be disrupted by double NAT, disabled automatic mapping, restrictive firewall policy, or carrier-grade NAT. With CGNAT, an ISP shares public address space among multiple subscribers, so the subscriber's router does not control the public-facing NAT layer. A manual rule on the home router cannot create a mapping at the provider's upstream gateway.

Plex Relay is a fallback used when a Plex client cannot make a direct connection to the server. Relay traffic passes through Plex infrastructure and has a constrained bitrate. Whether a particular title remains watchable depends on its bitrate, the selected remote quality, and whether Plex can transcode it to fit. It is more accurate to evaluate the stream than to assume that every 1080p title will fail or that every lower-resolution title will work.

Localtonet uses a different route. The Localtonet client runs on the Plex host or another device that can reach it over the LAN. That client establishes an outbound connection to a Localtonet relay. An HTTP tunnel then maps a public HTTPS address to the selected local IP address and port. Remote traffic reaches the relay first and is forwarded through the established tunnel to Plex.

🏠 Local Plex target Plex remains available at TCP port 32400 on the server. The target can be localhost or a reachable LAN address, depending on where the Localtonet client runs.
↗️ Outbound client connection The Localtonet client initiates the connection, so this workflow does not require an inbound router mapping, a public IP address, or a VPN.
🌐 Public relay endpoint The assigned HTTPS URL is publicly reachable while the selected device is connected and the tunnel is running.
🔐 TLS at the tunnel edge The public HTTP tunnel uses HTTPS, with TLS terminated at the tunnel edge. That does not by itself prove end-to-end TLS between the edge and a local HTTP target.
No router exposure does not mean no application exposure

This method avoids publishing TCP port 32400 through your router. It still makes Plex publicly reachable through the tunnel URL. Treat that URL as an internet-facing application endpoint: keep Plex updated, secure the associated Plex account, review sharing permissions, and stop the tunnel when remote access is not required.

A Localtonet route avoids Plex Relay only when the Plex client actually discovers and selects the advertised tunnel endpoint. Creating a tunnel is not enough to prove that native Plex applications are using it. You must test from outside the LAN and inspect Plex's connection or playback information to distinguish a tunnel-backed connection from Relay fallback.

We do not claim that this route is direct, uncapped, or guaranteed to outperform another route. Traffic is relayed, and real streaming capacity depends on the server's upload connection, the viewer's download connection, the selected relay, media bitrate, transcoding, device capabilities, and any limits associated with the services or plans involved.

Understand Plex remote-streaming entitlements first

Plex policy changed on April 29, 2025

Plex requires an eligible paid entitlement for remote playback of personal video. This requirement is enforced by Plex and remains applicable when the network route is provided by Localtonet. It is separate from tunnel creation and connectivity.

The entitlement does not necessarily mean that every viewer must independently purchase the same subscription. The applicable route depends on the server owner and viewer accounts:

  • Server owner with Plex Pass: A qualifying Plex Pass held by the owner of the Plex Media Server can provide the required remote-video entitlement for people accessing that server under Plex's current rules.
  • Viewer with Plex Pass: A viewer who has their own Plex Pass can use that entitlement for eligible remote playback, even when viewing a personal server they do not own.
  • Viewer with Remote Watch Pass: An eligible viewer can use Plex's lower-scope Remote Watch Pass for remote personal-video playback without purchasing the broader Plex Pass feature set.

Account type matters. Managed users and members of a Plex Home may not purchase or inherit entitlements in the same way as an independent Plex account. Before asking a viewer to subscribe, identify who owns the server, whether that owner has Plex Pass, whether the viewer already has Plex Pass, and whether the viewer's account is eligible for Remote Watch Pass.

Plex pricing and eligibility can change. Prices shown in older tutorials, including monthly amounts quoted before or during the April 2025 transition, should not be treated as current. Review the current Plex Pass information and Plex's current support guidance for remote playback before making a purchase or changing account membership.

A useful diagnostic distinction is whether Plex is showing an entitlement error or a connection error. A subscription prompt means the Plex account has reached the service but does not have the required remote-playback permission. Changing the Localtonet target, relay, or URL will not resolve an account entitlement problem.

Prerequisites and planning

Complete the checks below before installing Localtonet. They separate Plex configuration problems from tunnel problems and help you choose the correct target address.

A running, claimed Plex Media Server

Plex Media Server should already be installed, claimed by the intended Plex account, and signed in. Confirm that the expected libraries appear and that a local client can play a representative title. Claiming a server, organizing libraries, and configuring Plex accounts are outside the tunnel workflow, but they must be complete before remote testing is meaningful.

Local access to TCP port 32400

On the Plex host, open:

http://127.0.0.1:32400/web

If Localtonet will run on another device, test Plex from that device using the Plex server's LAN address:

http://PLEX_LAN_IP:32400/web

Replace PLEX_LAN_IP with the actual private address assigned to the server. If this LAN URL does not load, fix local routing, host firewall rules, Plex availability, or container port publishing before creating a tunnel. Localtonet cannot forward successfully to a target the client device cannot reach.

A Localtonet account and device token

The authentication token identifies the device that will run the tunnel. Obtain it from the authenticated Localtonet dashboard. Tokens are device-specific secrets. Use only placeholders in notes and examples, and never publish a real token in screenshots, terminal recordings, support posts, shell history, Compose files committed to source control, or documentation.

A suitable deployment location

Running Localtonet on the Plex server makes 127.0.0.1:32400 the simplest target for a native installation. If Localtonet runs on another computer, NAS, or container, use an address that is reachable from that environment. Loopback always refers to the machine or container in which the client is running, not automatically to the Plex host.

Streaming and transcoding capacity

Remote playback consumes the Plex server's upstream bandwidth. Compare the media bitrate with the available upload capacity and leave room for other network activity. If the remote client requests a lower quality or cannot direct-play the media, Plex may transcode it. Transcoding also depends on server CPU or supported hardware acceleration and on the relevant Plex features.

Test both an ordinary title and the highest-bitrate format you expect to watch. A successful web page load confirms application reachability, but it does not establish that the route can sustain every video in the library.

Install Localtonet on Windows, Linux, or macOS

Use the current package or command for your operating system from the Localtonet download page. The client must remain connected for the tunnel to be available.

Windows

Windows users can install Localtonet from the Microsoft Store or download the appropriate 64-bit, 32-bit, or ARM64 binary. If using a binary, extract it and open Command Prompt or PowerShell in that folder. Authenticate with a token placeholder:

localtonet --authtoken <YOUR_TOKEN>

The client stores the token locally after authentication. To run it as a Windows Service, open Command Prompt or PowerShell as Administrator and use the documented commands:

localtonet --install-service --authtoken <YOUR_TOKEN>
localtonet --start-service --authtoken <YOUR_TOKEN>

The service is visible in services.msc. You can also use the supported --status-service, --stop-service, and --remove-service operations. Do not assume service health from installation alone. Confirm that the Windows service reports a running state, the device is connected in the Localtonet dashboard, and the tunnel itself is running.

Linux

The current quick-install command detects the operating system and CPU, downloads the appropriate build, and installs it to /usr/local/bin/localtonet:

curl -fsSL https://localtonet.com/install.sh | sh

Authenticate after installation:

localtonet --authtoken <YOUR_TOKEN>

For automatic startup, Localtonet's Linux service mode requires systemd and root privileges. It is not supported in Termux; use the Android application for that environment.

sudo localtonet --install-service --authtoken <YOUR_TOKEN>
sudo localtonet --start-service --authtoken <YOUR_TOKEN>

The unit is created at /etc/systemd/system/localtonet.service. Check status and follow live logs with:

systemctl status localtonet
journalctl -u localtonet -f

The download page also provides manual Linux builds for x64, ARM, ARM64, MUSL x64, MUSL ARM, and MUSL ARM64. Select the build that matches the operating system and processor rather than assuming that a glibc build will run on a musl-based distribution.

macOS

Localtonet provides an official Homebrew tap:

brew tap localtonet/tap
brew install localtonet
localtonet --version

A Homebrew tap is a third-party package repository. Homebrew provides a convenient installation and update mechanism, but using it does not by itself guarantee that macOS will never display a security or permission prompt.

For a manual Intel installation, the current download page provides these commands:

curl -L https://localtonet.com/download/localtonet-osx-64.zip -o localtonet-osx-64.zip
unzip localtonet-osx-64.zip -d ~/localtonet
chmod 755 ~/localtonet/localtonet
~/localtonet/localtonet --authtoken <YOUR_TOKEN>

Apple Silicon users should select the current ARM64 build from the download page rather than using the Intel archive shown above.

Localtonet can be registered as a launchd service using:

sudo localtonet --install-service --authtoken <YOUR_TOKEN>
sudo localtonet --start-service --authtoken <YOUR_TOKEN>

The current download documentation states that the job is registered under ~/Library/LaunchAgents/. Use the supported --status-service, --stop-service, or --remove-service operations to manage it. After registration, verify the client and tunnel after an actual reboot rather than assuming that successful installation proves startup behavior.

Protect token-bearing commands

Commands that include a token may be retained in shell history, process information, terminal logs, or administration tools. Enter them only on a trusted device. Do not reuse a token in examples, and rotate or revoke it if it appears in an exposed history file, screenshot, repository, or support transcript.

Run Localtonet with Docker

Docker network paths from a Localtonet container to Plex on the host or a shared network.
Inside a container, localhost refers to that container rather than the Plex service on the host.

Docker requires an explicit networking decision. A container has its own loopback interface, so 127.0.0.1 inside the Localtonet container does not refer to Plex in another container or to Plex published on the host.

Pull the current Localtonet image first:

docker pull localtonet/localtonet

Pattern A: Plex publishes port 32400 on the Docker host

Use this pattern when the Plex container publishes its service to the host, such as a mapping from host TCP port 32400 to container TCP port 32400. Confirm from the host that this loads:

http://127.0.0.1:32400/web

A native Localtonet client on that host can target 127.0.0.1:32400. If Localtonet also runs in a container, it must address the host instead of its own loopback interface.

Docker Desktop on Windows and macOS provides host.docker.internal. On current Linux Docker Engine installations, map that name to the host gateway explicitly:

docker run -d \
  --name localtonet \
  --restart unless-stopped \
  --add-host=host.docker.internal:host-gateway \
  localtonet/localtonet \
  --authtoken <YOUR_TOKEN>

Configure the HTTP tunnel target as host.docker.internal on port 32400. On Docker Desktop, omit --add-host if the built-in hostname already resolves. Do not hardcode a bridge gateway such as 172.17.0.1; bridge addressing can vary.

Pattern B: Plex and Localtonet share a user-defined network

This is the typical container-to-container pattern. Attach both containers to the same user-defined Docker network and target Plex by its container or Compose service name. The example below assumes the Plex service is named plex:

docker network create plex-access
docker network connect plex-access plex
docker run -d \
  --name localtonet \
  --restart unless-stopped \
  --network plex-access \
  localtonet/localtonet \
  --authtoken <YOUR_TOKEN>

Set the tunnel target to plex and port 32400. Docker's DNS resolves the container name on that shared user-defined network. In Compose, attach both services to the same declared network and use the Plex service name rather than a changing container IP.

You can test the shared-network route with a temporary diagnostic container:

docker run --rm --network plex-access curlimages/curl \
  -I http://plex:32400/web

A redirect or HTTP response confirms that the name and port are reachable. A DNS error means the containers do not share the expected network or the target name is wrong. A connection refusal means Plex is not listening on that port or is not ready.

Container lifecycle, logs, and persistence

Detached mode allows the container to remain in the background, and --restart unless-stopped asks Docker to restart it according to that policy. Inspect status and logs with:

docker ps --filter name=localtonet
docker logs --tail 100 localtonet
docker logs -f localtonet

The official image documentation supplied here confirms token-based startup but does not identify a supported container data path for persisting locally stored authentication. We therefore do not prescribe an unverified volume mount. Keep the deployment definition needed to recreate the container, but store the real token outside source control and review the current Docker documentation for any newer secret or persistence mechanism.

Docker arguments are inspectable

Passing a token as a container argument can expose it through deployment files, command history, or container metadata available to Docker administrators. Restrict Docker access, keep Compose overrides and environment files out of repositories, redact diagnostic output, and rotate the token if it is disclosed.

Create and configure the Plex HTTP tunnel

Flow from the local Plex HTTP service through Localtonet to a public HTTPS endpoint.
The tunnel maps a public HTTPS endpoint to the Plex service running on the local machine.

Install and authenticate the Localtonet client before creating the tunnel. The dashboard must show the intended device as connected. Then follow the tunnel lifecycle in order:

1

Open the HTTP Tunnel page

Sign in to Localtonet and open the HTTP Tunnel configuration page. Use an HTTP tunnel because Plex exposes a web-based service on local TCP port 32400.

2

Select the Process Type

Choose Random Sub Domain, Custom Sub Domain, or Custom Domain according to the options available to your account. All three process types serve the target at a public HTTPS address. Availability can vary by plan or current product configuration.

3

Select the device and relay server

Select the AuthToken belonging to the client that can reach Plex, then choose an available server or region from the current dashboard. Do not copy a server code from an old tutorial because available values can change.

4

Enter the reachable Plex target

Use 127.0.0.1 and port 32400 for a native client on the Plex host. Use the Plex server's LAN address for a client on another LAN device. For Docker, use host.docker.internal with a host-published port or the Plex service name on a shared network.

5

Create the tunnel

Save the HTTP tunnel configuration. Creation records the configuration but does not mean the tunnel is running.

6

Start the tunnel

Press Start for the new tunnel. Confirm that its status indicates it is running, then copy the exact HTTPS address assigned by the dashboard.

Open the assigned address with /web appended and sign in through Plex:

https://YOUR_ASSIGNED_TUNNEL_HOST/web

Do not publish or hardcode an example that could be mistaken for your real endpoint. The assigned hostname is an internet-facing route to Plex while the tunnel is active.

Advertise the endpoint to Plex clients

Browser access through the tunnel proves that the HTTP route works, but native Plex applications normally discover servers through Plex account services. In Plex Web, open the server's advanced network settings and locate Custom server access URLs. Add the exact Localtonet HTTPS origin, without account credentials or an authentication token:

https://YOUR_ASSIGNED_TUNNEL_HOST

Save the setting and allow connected clients time to refresh their server information. Keep Plex's secure-connection configuration consistent with the client devices you use. The public side of the Localtonet HTTP endpoint is HTTPS, while TLS terminates at the tunnel edge before forwarding to the configured local HTTP target.

Do not guess custom-domain DNS records

Localtonet supports a Custom Domain process type, but exact DNS requirements must be taken from the current dashboard and current documentation. Do not reuse nameservers or DNS records from an older article. Verify the hostname and certificate from an external network after DNS changes before advertising it to Plex.

Compare the available remote-access routes

Comparison of direct Plex access, Plex Relay, and an outbound HTTPS tunnel.
The three routes differ in how remote traffic crosses the public and private network boundary.
Method Inbound network requirement Connection path Important limitation
Plex direct remote access Automatic UPnP/NAT-PMP mapping or a manual router mapping, plus a usable public inbound path Remote Plex client reaches the mapped Plex endpoint Can fail behind CGNAT, double NAT, disabled mapping, or restrictive firewall policy
Plex Relay No direct inbound mapping required Traffic is relayed through Plex infrastructure Bitrate is constrained, which can trigger transcoding or reduced remote quality
Localtonet HTTP tunnel No inbound router mapping or public IP required Public HTTPS endpoint, Localtonet relay, outbound client connection, then local Plex target The client and tunnel must be running, and Plex clients must actually select the advertised endpoint
Private VPN Varies by product and topology; some require an inbound server while mesh or relayed designs may not Authorized devices join a private network and reach Plex through private addressing Usually requires client installation and authorization on each viewing device; native Plex behavior varies by routing and discovery

These methods are not interchangeable in every environment. Plex direct access is attractive when automatic mapping works and the administrator accepts the router exposure. A private VPN can avoid publishing Plex to the general internet, but it changes how viewing devices connect. Localtonet publishes only the selected service through a relay, but the resulting application URL remains public and requires careful Plex account security.

Verify the result from local and external networks

Verification should proceed in layers. This prevents a local Plex problem from being misdiagnosed as a relay problem and prevents a browser-only success from being mistaken for complete native-client integration.

1

Verify Plex locally

Load http://127.0.0.1:32400/web on the Plex host. If Localtonet runs elsewhere, also load Plex through its LAN address from that device.

2

Verify the Localtonet device

Confirm that the client process or operating-system service is active and that the corresponding token appears connected in the dashboard.

3

Verify the tunnel lifecycle

Confirm that the HTTP tunnel was not merely created. Its separate tunnel status must show that it is running.

4

Test the HTTPS URL off-network

Disable Wi-Fi on a phone and use cellular data, or test from another external connection. Open the assigned HTTPS URL with /web, sign in to Plex, and load the library.

5

Test a native Plex client

Refresh or restart the client after adding the Custom server access URL. Start playback and inspect the Plex dashboard or playback details to determine whether the session is direct through the advertised endpoint or using Plex Relay.

6

Test representative media

Check a direct-play title, a title that requires transcoding, and a high-bitrate title you expect to use remotely. Watch the Plex dashboard for bitrate, transcoding, and connection information.

7

Reboot and repeat the external check

Reboot the Localtonet host during a maintenance window. Verify the operating-system service or container, dashboard device connection, tunnel status, external URL, and actual Plex playback again.

Do not rely on a test performed while the viewer remains connected to the same Wi-Fi network. Local DNS, cached discovery data, and direct LAN routes can conceal a broken public configuration.

Operate, update, stop, and retire the tunnel safely

Monitor the two independent states

Localtonet has separate client and tunnel states. The client device must be connected, and the selected tunnel must be running. A healthy service process does not prove the tunnel was started, while a tunnel configuration cannot pass traffic through a disconnected device.

On Linux, use systemctl status localtonet and journalctl -u localtonet -f. On Windows, inspect the Localtonet service in services.msc or use the supported service-status operation. On macOS, use Localtonet's documented --status-service operation. For Docker, inspect docker ps and docker logs.

Keep Plex and Localtonet current

Schedule updates for Plex Media Server, Localtonet, the host operating system, and Docker where applicable. Before changing the Localtonet binary or package, stop the service using the supported operation. Apply the current installation or package update method, restart the service, and repeat local and external verification.

Homebrew users can use Homebrew's package-management workflow to identify and apply formula updates. Binary users should obtain the current build from the Localtonet download page. Docker users should pull the current image and recreate the container using the preserved deployment settings. Do not delete the working container until you have recorded its required network, restart policy, target design, and token-recovery plan.

Stop access without deleting configuration

Use the tunnel's Stop action when you want to suspend public access but may reuse the configuration later. Stopping the operating-system service or container also disconnects the device, but stopping the specific tunnel is clearer when other Localtonet tunnels use the same client.

Delete a tunnel when it is no longer required

Delete the tunnel from the dashboard when the endpoint should not be reused. If the device will no longer run Localtonet, stop and remove its service using the supported service operations or remove the Docker container. Review any Plex Custom server access URL left behind and remove a retired hostname so clients do not continue trying a dead endpoint.

Rotate or revoke an exposed token

If a token is disclosed, revoke or rotate it in the authenticated dashboard and reauthenticate the intended device with a replacement token. A tunnel associated with the old device identity may need its selected AuthToken updated before it can run again. Verify all affected tunnels after the change.

Use rollback checkpoints

Before an update, record the currently working client version, tunnel target, Process Type, selected device, Docker network, Plex custom URL, and service state without recording the token itself. If an update fails, stop the affected service, restore the previously working package or container deployment using your normal system backup procedure, and verify each layer again.

A hostname can appear in logs and account data

Anyone who learns the tunnel URL can attempt to reach the Plex sign-in surface. Do not post the address publicly. Use strong, unique Plex account credentials, enable the account protections Plex currently provides, remove access for unused users, and avoid sharing administrator credentials with viewers.

Troubleshooting by failure layer

Layered troubleshooting path from the local Plex service to an external client.
Testing each layer in order separates local service, tunnel, endpoint, and client failures.

The Localtonet device is disconnected

First confirm that the client process, operating-system service, or Docker container is running. On Linux, inspect the systemd status and journal. On Windows, check services.msc. In Docker, read the container logs and verify that it has not exited. If the process is active but the dashboard still shows the device disconnected, inspect outbound network access and confirm that the correct, non-revoked token was used.

The device is connected but the tunnel is unavailable

A created tunnel is not automatically a running tunnel. Open the dashboard and inspect the individual tunnel status. Press Start if it is stopped. Confirm that the tunnel is assigned to the connected device token rather than another installation.

The public URL returns an upstream or connection error

Test the exact target from the Localtonet host. For a native same-host installation, load http://127.0.0.1:32400/web. For a LAN target, test http://PLEX_LAN_IP:32400/web from the Localtonet device. A failed local test indicates a Plex, firewall, address, or routing problem rather than a public hostname problem.

Docker cannot resolve or reach Plex

Verify which Docker pattern you selected. With a host-published port, ensure that Plex actually publishes TCP 32400 and that host.docker.internal resolves from the Localtonet container. On Linux, include the host-gateway mapping where supported.

With a shared user-defined network, verify that both containers are attached and that the target exactly matches the Plex container or Compose service name. Do not use 127.0.0.1 or a copied container IP. Container addresses can change when deployments are recreated.

The browser works but a Plex app does not

Confirm that the exact HTTPS origin is present in Plex's Custom server access URLs, then restart or refresh the client. Test from a genuinely external network. Some clients may retain discovery information, and compatibility can vary by client platform. Browser access through /web proves the endpoint itself even when a particular native client has not selected it.

Plex still reports Relay

A functioning tunnel does not force every Plex client to choose it. Verify the advertised URL, confirm that its certificate and hostname are valid from the viewer's network, restart the client, and inspect playback information again. Also make sure the custom hostname does not redirect unexpectedly or point to an obsolete tunnel.

Playback buffers even though Relay is not in use

Inspect the Plex dashboard for the current bitrate and whether the session is direct playing, direct streaming, or transcoding. Check the server's upload capacity, viewer download conditions, Wi-Fi quality, CPU or hardware-transcoding load, and concurrent streams. Changing the network route cannot compensate for insufficient source upload or an overloaded transcoder.

The HTTPS hostname or certificate is rejected

Use the exact URL displayed for the running tunnel. Check the device clock and confirm that no local filter, DNS override, or captive portal is replacing the response. For a custom domain, compare the current DNS configuration with the requirements shown by Localtonet rather than applying old nameserver instructions. Do not advertise the hostname to Plex until it loads correctly from an external network.

Plex asks for Plex Pass or Remote Watch Pass

This is an entitlement issue, not evidence that the tunnel failed. Determine whether the server owner has a qualifying Plex Pass, whether the viewer has their own Plex Pass, or whether the viewer is eligible for Remote Watch Pass. Review the current Plex account and remote-playback policy, especially for managed users or Plex Home membership.

Access fails after a reboot

Check all three layers separately: the operating-system service or Docker container, the Localtonet device connection, and the tunnel status. A restart policy can restore the client process without proving that Plex was ready when it connected or that the tunnel is running. Confirm that Plex itself started and is listening on TCP 32400.

Frequently asked questions

Does Localtonet create a direct connection to Plex?

No. The Localtonet client creates an outbound connection to a Localtonet relay. Remote traffic reaches the public endpoint at the relay and is forwarded through the tunnel to the configured Plex target. It should be described as a relay-based tunnel, not a direct client-to-server route.

Do I still need a Plex subscription for remote video?

Yes, Plex's remote personal-video entitlement rules still apply. Depending on the accounts involved, the qualifying entitlement may come from the server owner's Plex Pass, the viewer's Plex Pass, or an eligible viewer's Remote Watch Pass. Check Plex's current policy and pricing because account eligibility and prices can change.

Does this expose Plex port 32400 to the internet?

It does not require an inbound router mapping for port 32400. However, Plex remains publicly reachable through the tunnel's HTTPS URL while the client and tunnel are running. The router port and public application endpoint are different forms of exposure.

Can Plex use a public port other than 32400?

Plex Media Server continues to use TCP 32400 locally. Plex's Manually specify public port option declares the external port associated with a router mapping; it does not change the local server port. For this HTTP tunnel workflow, point Localtonet to the actual reachable local Plex address on port 32400.

Will a Localtonet tunnel always avoid Plex Relay?

Only when the Plex client discovers and selects the advertised tunnel endpoint. Add the exact HTTPS origin to Plex's Custom server access URLs, test from outside the LAN, and inspect Plex playback information. A running tunnel alone does not prove that a native client is using it.

What target should I use when Plex and Localtonet are in Docker?

If Plex publishes port 32400 on the Docker host, target host.docker.internal:32400 from the Localtonet container, adding a host-gateway mapping on Linux where needed. If both containers share a user-defined network, target the Plex container or Compose service name on port 32400. Do not use the Localtonet container's 127.0.0.1.

Is the connection end-to-end encrypted?

The public HTTP tunnel provides an HTTPS endpoint, and TLS terminates at the tunnel edge. When the configured target is local HTTP, that fact alone does not establish end-to-end TLS from the remote Plex client through every segment to Plex. Avoid describing the entire path as universally end-to-end encrypted without a separately verified configuration.

How do I disable remote access safely?

Stop the individual tunnel in the Localtonet dashboard to remove the public route while retaining its configuration. Delete the tunnel if it will not be reused, remove its hostname from Plex Custom server access URLs, and stop or remove the Localtonet service when the device no longer needs to run any tunnels.

Publish your Plex endpoint with Localtonet

Install the Localtonet client on a device that can reach Plex, create an HTTP tunnel to TCP port 32400, start it, and verify the assigned HTTPS endpoint from an external network.

Get Started Free →

Corrections & updates

Substantive changes approved by the Localtonet editorial team are listed transparently below.

Rebuild the article with the current Localtonet hero, immediately following clickable guide-navigation card, unique h2 fragment IDs, approved lt-* components, semantic heading hierarchy, no inline styles, and one responsive comparison table rather than obsolete desktop and mobile component variants. Add a clear prerequisites section and explain NAT, CGNAT, Plex direct access, Plex Relay, Localtonet's relay-based HTTP tunnel, public HTTPS, edge TLS termination, and the distinction between router exposure and public application exposure

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support