Acceder a Plex desde distintos dispositivos y ubicaciones

Si contamos con Plex funcionando en un equipo del hogar, sabemos que puede ser accedido desde otros dispositivos de la red local (LAN), y en ciertos casos de manera remota (Internet), mediante una aplicación instalada en el dispositivo de las provistas por Plex:

  • Plex Mobile App
    • Soporte para iOS, Android, Windows Phone 8, and Windows 8
    • 😦 Tiene costo en cada uno.
  • Plex for connected TVs and streaming devices:
    • Soporte para Chromecast, Roku, Google TV, Smart TVs
    • 😦 Algunas tienen costo.
  • Plex Home Theater on a dedicated computer
    • Soporte para Mac y Windows
    • 😦 No tiene soporte para Linux

Es por eso que existiendo la alternativa de utilizar un simple navegador web es muy buena ya que no nos obliga a instalar nada.

La desventaja es que debemos utilizar la dirección IP del equipo donde se proveen los contenidos. Para contrarrestarla basta definir un dominio de manerla local en cada uno de los dispositivos o bien, en el servidor DNS si es que disponemos de uno en la red local.

Ahora, hay 2 situaciones que pueden molestarnos:

situación 1: no poder acceder desde el exterior (léase Internet)

situación 2: tener que definir el dominio local en cada dispositivo (por no tener DNS local) para las personas en la red local

Para tratar la situación 1, podemos crear una cuenta en Plex, desde donde vinculamos nuestro servidor Plex local y podremos accederlo desde cualquier lugar navegando por la Web. Los pasos son:

  1. Acceder a la instalación local de Plex
  2. Abrir Ajustes (icono arriba a la derecha de una llave inglesa en cruz con un destornillador)
  3. Elegir la solapa Servidor
  4. Seleccionar la opción “Conectar” de las listadas a la derecha
  5. Ingresar los datos de nuestra cuenta en Plex y presionar Ingresar
    • Si no tenemos cuenta podemos crearla ahí mismo seleccionando “Regístrate”
  6. Veremos que indica “Conectado como NOMBRE USUARIO” y “Conectando con el servidor…”. Esperamos unos segundos
  7. Se informa “El servidor está mapeado al puerto xxxxxx”

Solo basta con acceder por web a https://plex.tv/ y al presionar LAUNCH, accederemos a nuestro Plex (Si seleccionamos SERVERS podremos ver los servidores PLEX vinculados con esa cuenta)

Pero esto:

  • no soluciona la situación 2
  • obliga a registrar una cuenta en Plex
  • no permite que personas sin cuenta accedan a mi Plex (y no quiero darles los datos de mi cuenta)

Una propuesta que trata todos estos puntos es la de implementar un proxy reverso con Apache. Recuerden seguir el instructivo para configurar un proxy reverso con Apache, utilizando un dominio externo configurado mediante un DDNS y realizando la redirección de puerto en el router de la LAN. El VirtualHost tendría esta estructura:

<VirtualHost *:<PUERTO_EXTERNO> >
  ServerName <DOMINIO_EXTERNO>

  #Configuracion Proxy Reverso
  ProxyRequests Off
  ProxyPreserveHost Off
  ProxyPass / http://<PLEX_IP>:<PUERTO_PLEX>/
  ProxyPassReverse / http://<PLEX_IP>:<PUERTO_PLEX>/
</VirtualHost>

De esta manera permitiría a cualquier persona que conozca el domino externo acceder a al Plex interno. Adicionalmente la persona debería agregar un /web al final de la URL para acceder correctamente a la interfaz web.

 

La protección mínima que podemos implementar (se podría llegar a utilizar HTTPS) es aplicar una autenticación básica al VirtualHost definido:

  <Location />
    AuthType Basic
    AuthName "Restricted area"
    AuthUserFile <PATH_PASSWORDS>/.htpasswd_plex
    Require valid-user
  <Location />

donde PATH_PASSWORDS es la ubicación donde guardamos el .htpasswd que hayamos creado para el acceso a Plex (similar a proteger un directorio con htaccess).

 

Para evitar que la persona deba escribir /web al final de la URL, podemos implementar una reescritura de la URL cuando corresponda de la siguiente manera:

  1. Activar el módulo rewrite de Apache
    1. En la ubicación donde instalamos Apache, abrir con un editor de textos el archivo: conf\httpd.conf
    2. Descomentar la línea: LoadModule rewrite_module modules/mod_rewrite.so
  2. Agregar al VirtualHost definido:
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !^/web
  RewriteCond %{HTTP:X-Plex-Device} ^$
  RewriteCond %{QUERY_STRING} ^$
  RewriteRule ^/$ /web/$1 [R,L]

Estas directivas agregar /web/ cuando la URL no lo contenga, no sea un dispositivo Plex el que intenta conectarse y el querystring (pares de clave valor después de ?) sea vacío.

 

Estructura completa de VirtualHost

Esta es lstructura completa del VirtualHost para acceder a un Plex de una LAN mediante la implementación de un proxy reverso con Apache, autenticación básica y reescritura de URL para acceder a la interfaz web (sin especificar /web/)

<VirtualHost *:<PUERTO_EXTERNO> >
  ServerName <DOMINIO_EXTERNO>

  #Autenticacion
  <Location />
    AuthType Basic
    AuthName "Restricted area"
    AuthUserFile <PATH_PASSWORDS>/.htpasswd_plex
    Require valid-user
  <Location />

  #Configuracion Proxy Reverso
  ProxyRequests Off
  ProxyPreserveHost Off
  ProxyPass / http://<PLEX_IP>:<PUERTO_PLEX>/
  ProxyPassReverse / http://<PLEX_IP>:<PUERTO_PLEX>/
  
  #Agregar /web/ cuando corresponda
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !^/web
  RewriteCond %{HTTP:X-Plex-Device} ^$
  RewriteCond %{QUERY_STRING} ^$
  RewriteRule ^/$ /web/$1 [R,L]
</VirtualHost>

Ejemplo completo de VirtualHost

<VirtualHost *:80 >
  ServerName plex.externo.com

  #Autenticacion
  <Location />
    AuthType Basic
    AuthName "Restricted area"
    AuthUserFile c:/passwords/.htpasswd_plex
    Require valid-user
  <Location />

  #Configuracion Proxy Reverso
  ProxyRequests Off
  ProxyPreserveHost Off
  ProxyPass / http://192.168.0.5:32400/
  ProxyPassReverse / http://19.168.0.5:32400/
  
  #Agregar /web/ cuando corresponda
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !^/web
  RewriteCond %{HTTP:X-Plex-Device} ^$
  RewriteCond %{QUERY_STRING} ^$
  RewriteRule ^/$ /web/$1 [R,L]
</VirtualHost>

Basado en:

http://matt.coneybeare.me/how-to-map-plex-media-server-to-your-home-domain/

http://www.dbzoo.com/blog/plex_virtual_hosting

Tagged with: , , , ,
Publicado en Aplicaciones