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

Anuncios

Configurar un proxy reverso o inverso en Apache

Si contamos con un servicio web (o m谩s) en una LAN el cual es accedido desde Internet, podemos configurar un proxy reverso o inverso para ocultar los servidores que contienen realmente las aplicaciones web. En este caso, planteamos configurar un proxy reverso HTTP en Apache.

Para poder avanzar en esta soluci贸n hay 2 puntos a tener en cuenta:

Ahora s铆 vamos con los pasos:

1. Activar el m贸dulo proxy

En la ubicaci贸n donde instalamos Apache, abrimo con un editor de textos el archivo: conf\httpd.conf y descomentamos las siguientes l铆neas:

LoadModule proxy_module modules/mod_proxy.so
....
LoadModule proxy_http_module modules/mod_proxy_http.so

2. Configurar un VirtualHost

Debemos crear un VirtualHost con la configuraci贸n b谩sica actuar de proxy reverso:

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

  ProxyRequests Off
  ProxyPreserveHost Off
  ProxyPass /<PATH_EXT>/ http://<DOMINIO_INTERNO>:<PUERTO_INTERNO>/<PATH_INT>/
  ProxyPassReverse /<PATH_EXT>/ http://<DOMINIO_INTERNO>:<PUERTO_INTERNO>/<PATH_INT>/
</VirtualHost>

Analizamos cada una de las directivas:

<VirtualHost *:<PUERTO_EXTERNO> >

Define un VirtualHost. En lugar de * se podr铆a indicar una direcci贸n IP para que solamente se acceda al sitio a trav茅s de la misma y separado por dos puntos se indica el PUERTO_INTERNO donde se recibe la petici贸n desde Internet

ServerName <DOMINIO_EXTERNO>

Indica el dominio donde se recibe la petici贸n desde Internet

ProxyRequests Off

Evita que Apache funcione como un servidor proxy que realice forwarding (forward proxy server)

ProxyPreserveHost Off

No se utiliza el host que se indica en la petici贸n que ingresa. Podr铆a ser necesario en caso de que el servicio web lo requiera para evaluarlo de alguna manera.

ProxyPass /<PATH_EXT>/ http://<DOMINIO_INTERNO>:<PUERTO_INTERNO>/<PATH_INT>/

Realiza el mapeo del dominio externo a una url interna. El primer par谩metro es un path dentro del DOMINIO_EXTERNO y el segundo es la correspondiente URL interna a la cual se convertir谩.

Tip: si el primer par谩metro termina con /, el segundo tambi茅n debe hacerlo para evitar posibles errores en las construcciones de urls.

Ejemplo:

ProxyPassReverse /<PATH_EXT>/ http://<DOMINIO_INTERNO>:<PUERTO_INTERNO>/<PATH_INT>/

Ajusta la url de manera similar a ProxyPass pero en las redirecciones HTTP, dentro de las cabeceras: Location, Content-Location y URI. Es necesario para que funcione correctamente el proxy reverso, de lo contrario las redirecciones HTTP podr铆an saltarlo.

Ejemplo:

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

  ProxyRequests Off
  ProxyPreserveHost Off
  ProxyPass / http://interno.servicio.com:666/
  ProxyPassReverse / http://interno.servicio.com:666/
</VirtualHost>

En este caso podemos ver que Apache actuar谩 como un proxy reverso para que cuando se acceda a http//externo.servicio.com:80/ se redirija la petici贸n a http://interno.servicio.com:666/

3. Reiniciar Apache y probar

Una vez reiniciado el servicio de Apache podemos probar acceder a desde Internet al dominio externo (y al puerto externo), a partir de un navegador por ejemplo. Mediante DNS la petici贸n se dirige hacia nuestro router LAN, el cual a trav茅s de la redirecci贸n de puertos la env铆a al equipo con Apache actuando de proxy reverso. 脡ste hace la conversi贸n al dominio y puertos internos. La petici贸n llega al servicio web interno correspondiente, quien finalmente la responde. Entonces esta respuesta sigue el mismo camino (pero ahora al rev茅s) hasta mostrar la respuesta en el navegador. Las acciones de redirecci贸n de puertos y DNS no aplican en este sentido, pero la respuesta pasa por los dispositivos sabiendo a d贸nde debe dirigirse.