Fix: Plex Offline Download Not Working
The issue of Plex downloads not working on devices has been ongoing for years and has been a frustration for many Plex users.
Many are wondering why Plex has issues downloading media for offline use. Plex has no issues transcoding, direct streaming, and direct playing media from their server, but for some reason, it can't download the files.
This article will briefly explain the issue as well as some solutions you can use to correct the problem.
The Plex offline download issue
For those that don't know, the issue is that a user isn't able to download media from a Plex server to their client so the media can be played offline. When a user attempts to download the media, the download fails.
The root cause of this issue is Plex uses DNS rebinding for its plex.direct domain, which is used to download media for offline viewing. The reason the download features work this way is that Plex establishes a secure connection to the Plex server.
If you were to examine the DNS requests made when downloading media to a client, you will notice requests in the format: https://{ip_address}.{string_value}.plex.direct
.
The workaround to resolve this issue depends on how the DNS is configured on your network. Below are several fixes for common routers and DNS services.
Change the router DNS servers
The first solution is to change the DNS servers that are defined by your router. Many users may be using their ISP DNS server, which would mitigate DNS rebinding attacks. These mitigations would prevent Plex from downloading media for offline viewing.
To resolve this, try changing the DNS settings in your router to one of the following:
- Google DNS
- Cloudflare
- OpenDNS (see below)
- Quad9
After changing the DNS, you may need to flush the DNS cache on your client, if possible, or wait some time for the cache to expire.
Router settings
Your router may also have a DNS rebinding setting that is enabled. Each router is different so attempting to provide steps would be impossible. Check your router settings - it could be in a section labeled DNS - for a DNS rebind setting and disable it.
OpenDNS
The OpenDNS DNS service was one of the recommended services to use for DNS, however, there is an option that could mitigate DNS rebinding. If you find that changing to OpenDNS still won't allow you to download your media, do the following:
- Log into your OpenDNS account.
- Click the Settings tab.
- Select your network from the list.
- From the menu on the left, click the Security link.
- Uncheck the Block internal IP addresses checkbox.
- Click the Apply button.
You may need to wait a few minutes for the setting to take effect, and also wait for your local DNS cache to expire.
pfSense
pfSense includes an internal DNS resolver service that could prevent DNS rebinding. You will want to adjust that setting, by doing the following:
- From the pfSense administrative Web UI, go to Services->DNS Resolver.
- Click the Display Custom Options button if the Custom options edit field isn't displayed.
- Enter the following in the Custom options edit field:
server:private-domain: "plex.direct"
- Click the Save button.
OPNSense
You will need to add the plex.direct domain to the Alternate Hostnames by doing the following:
- From the OPNSense Web UI, navigate to System->Settings->Administration.
- In the Alternate Hostnames field enter:
plex.direct
You may also need to check the Disable DNS Rebinding Checks if you are still having issues downloading media to your client.
dnsmasq
If you are using dnsmasq, such as with DD-WRT, you can add the following to your dnsmasq configuration file:
rebind-domain-ok=/plex.direct/
For DD-WRT users, you can add it to the Advanced Settings edit field in the dnsmasq settings.
Unbound
Unbound is a popular upstream DNS option that can be self-hosted on a local device. If you use unbound, you can create a new config file in /etc/unbound/unbound.conf.d/plex.conf
and then add the following:
rebind-domain-ok=/plex.direct
Pi-hole
If you use Pi-hole on your network for DNS you can add the plex.direct URL for your Plex server to the list of local DNS domains. This will have Pi-hole resolve the plex.direct URL to your server without having to worry about other upstream DNS servers.
To add your server's plex.direct URL to Pi-hole use the following steps:
- You will need to first get the Plex token for your server.
- Next, you can get a client ID by making a request to the Get Devices API and look for an ID in the
clientIdentifier
attribute. - With the token and client identifier you will need to make the following API request to plex.tv:
https://plex.tv/api/v2/resources?X-Plex-Client-Identifier={client_id}&X-Plex-Token={plex_token}&includeHttps=1
- In the response, use the value in the
uri
attribute in theconnection
element. You will just use the domain without thehttps://
and the port number. - Log into your Pi-hole and navigate to Local DNS->DNS Records.
- Enter the domain in the Domain: field at the top and the IP address of your Plex server in the IP Address: field.
- Click the Add button to add the plex.direct server domain to Pi-hole.
You Pi-hole will now automatically resolve your server's plex.direct domain to the IP address of your server.
Any of the above solutions require you to make changes to your local network settings, which means you will need access to the network. Once the changes are made, however, you should not need to make them again.
If you do plan on downloading media for offline viewing, you should do so while on your local network instead of downloading the files remotely. This will ensure that if there is an issue, you can diagnose it locally rather than from the Internet.