Plex Media Server öffentlich mit OPNsense betreiben

Ziele

Auch unterwegs ist es doch schön, auf die eigenen Dienste zugreifen zu können. Der Betrieb eines öffentlich zugänglichen, aber im lokalen Netzwerk installierten FreshRSS kann mit einem Let's Encrypt Zertifikat und HAProxy auf der OPNsense Firewall genial einfach realisiert werden.

Dennoch: Diese Ausbaustufe ist zwar nun für den öffentlichen Betrieb geeignet, muss aber regelmäßig nun aktualisiert und gepflegt werden. Nichts ist schlimmer als eine veraltete und damit angreifbare Installation.

Letzte Aktualisierung:

  • 02.09.2024: In den neuen Artikel aufgeteilt
  • 20.08.2023: Automatisierung für HAProxy erweitert
  • 11.12.2022: Initiales Dokument

Voraussetzungen

Diagramm

Damit sieht das Setup so aus:

                                                                  ┌─────────────────────────────┐
                  ┌─────────────────────┐                         │ TrueNAS                     │
                  │ OPNsense            │                         │ ┌─────────────────────────┐ │
WAN: 0.0.0.0:80  ─┼─► acme.sh:80        │                         │ │ jails/plex              │ │
WAN: 0.0.0.0:443 ─┼─► HAProxy:443 ──────┼─ 192.168.178.102:32400 ─┼─┼─► plexmediaserver       │ │
                  └─────────────────────┘                         │ │       ▲                 │ │
                                              LAN: 0.0.0.0:32400 ─┼─┼───────┘                 │ │
                                                                  │ └─────────────────────────┘ │
                                                                  └─────────────────────────────┘

Plex

Konfigration anpassen

Damit Plex auch mit den externen Adressen und dem richtigen Port arbeitet, sind ein paar Anpassungen in der Plex Webseite nötig. Dazu wird http://PLEXHOSTNAME:32400/web , wie bereits im 1. Teil eingerichtet, aufgerufen.

  • Unter "Einstellungen - PLEXHOSTNAME" gibt es den Menüpunkt "Fernzugriff". Dort aktivieren wir erstmal die "Erweiterten Optionen", damit alle Optionen sichtbar werden. Dann wird der Punkt "Fernzugriff" aktiviert und bei "Öffentlichen Port manuell definieren" wird der Port 443 eingetragen.
  • Unter "Einstellungen - PLEXHOSTNAME" gibt es weiter den Menüpunkt "Netzwerk" mit der Option "Eigene URLs für den Zugriff auf diesen Server". Dort tragen wir unseren EXTERNERHOSTNAME ein (z.B. https://plex.domain.de:443 ). "Aktiviere Relay" darüber wird deaktiviert.

Lets Encrypt Zertifikate

OPNsense ist mit dem ACME Client Plugin (os-acme-client) in der Lage Let's Encrypt Zertifikate zu erstellen und auch automatisch zu erneuern. Der riesen Vorteil ist, dass wir eine zentrale Zertifikatsverwaltung haben, nicht mühselig auf den internen Zielsystemen jeweils eine eigene Verwaltung der Zertifikate benötigen und keine NAT oder anderen Firewall Einstellungen vornehmen müssen.

Hier reichen die Grundeinstellungen wie hier beschrieben mit folgenden Definitionen:

  • EXTERNHOSTNAME = Der extern erreichbare Hostname (z.B. plex.bsdbox.de)
  • EMAIL = Email Adresse des Let's Encrypt Accounts (z.B. marcel@bsdbox.de)

HAProxy

HAProxy nimmt von außen die Aufrufe für den Port 443 entgegen, verschlüsselt die Verbindung und leitet diese dann an den internen Plex Server auf Port 32400 weiter. Das schöne ist, das mehrere Dienste gleichzeitig auf Port 443 bereitgestellt werden können. Unterschieden wird über den aufgerufenen externen Hostnamen.
Damit ist es möglich das z.B https://plex.domain.de an Plex und https://domain.de zur eigentlichen Webseite geleitet wird, obwohl beide eigentlich Port 443 auf der gleiche externen IP Adresse benötigen.

Hier geht ihr auch durch diesen Artikel mit folgenden Definitionen durch:

  • EXTERNHOSTNAME = Der extern erreichbare Hostname (z.B. rss.bsdbox.de)
  • IP = IP Adresse des lokalen FreshRSS Servers (z.B. 192.168.1.102)
  • HOSTNAME = Hostname des lokalen FreshRSS Servers (z.B. rss.bsdbox.local)
  • PORT = Port des lokalen FreshRSS Servers (443)

Plex Public

Bitte folgendes Testen:

  • Der externe Aufruf https://EXTERNHOSTNAME/web öffnet die Plex Anmeldemaske - OK!
  • Der externe Aufruf https://app.plex.tv/desktop/#!/ öffnet die Plex Anmeldemaske und kann auf die Inhalte zugreifen - OK!
  • Der interne Aufruf https://EXTERNHOSTNAME/web öffnet die Plex Anmeldemaske - OK!
  • Der interne Aufruf http://HOSTNAME:34200/web öffnet die Plex Anmeldemaske - OK!

Voilá