Als je een Plex Media server gebruikt om media te delen met vrienden en familie kun je dat op 2 manieren doen; met een port forward in je router/firewall of via een reverse proxy (zodat je geen poorten open hoeft te zetten).
Wie een self hosted Plex Media Server draait achter een private mesh VPN zoals NetBird (in combinatie met een reverse proxy), loopt vaak tegen twee bekende problemen aan:
- Remote streaming werkt niet optimaal of valt terug op Plex Relay.
- De daadwerkelijke IP adressen van verbindende clients worden niet correct weergegeven in Plex.
Netbird
NetBird is een gratis (self hosted of cloud) softwarepakket dat gebruikmaakt van WireGuard om een beveiligd mesh netwerk op te bouwen tussen je apparaten, servers en clouddiensten. NetBird heeft daarnaast een ingebouwde reverse proxy (gebaseerd op Traefik) om eenvoudig en veilig domeinen en subdomeinen vanaf het web te koppelen aan interne diensten.
In deze korte handleiding leg ik precies uit waarom Plex hier moeite mee heeft én hoe je dit naadloos oplost met Caddy als lokale tussenstap, zonder in te leveren op afspeelkwaliteit.
Het Probleem: Waarom werkt dit niet standaard?
Wanneer je Plex achter de NetBird Reverse Proxy (Traefik) hangt op een externe VPS, gebeurt het volgende:
- Reverse Proxy: Je maakt in NetBird een record aan (bijv.
plex.jouwdomein.nl) dat verkeer doorstuurt naar het NetBird IP van je Plex server (bijv.[http://100.100.10.230:32400]). - Plex Custom Server URLs: Plex moet exact weten via welk publiek domein (
[https://plex.jouwdomein.nl:443]) hij bereikbaar is, anders begrijpen de Plex apps de route niet. - Geen Remote Access (Port Forwards): Om geen poorten open te zetten op je thuisrouter, schakel je ‘Remote Access’ uit in Plex en gebruik je uitsluitend de Custom server access URLs.
- Het IP probleem: Alle inkomende clients krijgen in het Plex dashboard het NetBird (Traefik) IP van de proxy (
100.x.x.x). Plex accepteert deX-Forwarded-Forheader namelijk alleen wanneer de proxy afkomstig is van een lokaal adres (zoals127.0.0.1of192.168.x.x). Omdat NetBird in de CGNAT reeks (100.x.x.x) zit, negeert Plex de forwarded headers.
Opmerking: Bij alternatieve apps zoals Jellyfin speelt dit probleem niet; Jellyfin accepteert de headers van NetBird standaard wel.
De Oplossing: Caddy als lokale bridge
Om Plex zover te krijgen dat hij de headers accepteert, plaatsen we een lokaal Caddy servertje naast Plex op dezelfde machine.
Caddy is een moderne, open source webserver geschreven in Go, die vooral bekendstaat om zijn automatische HTTPS functionaliteit, snelheid en eenvoudige configuratie.
Caddy ontvangt het verkeer van NetBird en stuurt het lokaal door via 127.0.0.1. Omdat het verzoek nu vanaf 127.0.0.1 komt, accepteert Plex de headers wél en zie je weer de echte IP-adressen van je gebruikers!
Stap 1: Installeer Caddy
Installeer Caddy op de server waar Plex op draait (op macOS bijvoorbeeld via Homebrew, op Linux via apt/dnf).
Stap 2: Maak de Caddyfile aan
Maak een Caddy configuratie aan die extern verkeer opvangt (bijv. op poort 8080) en doorzet naar Plex op 127.0.0.1:32400:
:8080 {
reverse_proxy 127.0.0.1:32400 {
flush_interval -1
header_up Host 127.0.0.1:32400
header_up X-Forwarded-For {http.request.header.X-Forwarded-For}
header_up X-Real-IP {http.request.header.X-Forwarded-For}
}
}
Stap 3: Pas je NetBird / Traefik routing aan
Verwijs in je externe NetBird Reverse Proxy niet meer rechtstreeks naar poort 32400, maar naar de zojuist ingerichte Caddy poort (check dus even welk mesh IP je plex server heeft en gebruik dat):
-
Target URL:
[http://100.100.10.230:8080]
Stap 4: Plex instellingen controleren
- Ga in Plex naar Instellingen > Netwerk
- Vul bij Custom server access URLs in:
https://plex.jouwdomein.nl:443(we gebruiken:443zodat clients geforceerd via HTTPS verbinden met je proxy). - Zorg dat Remote Access uitgeschakeld staat.
Belangrijke waarschuwing over IPv6: Stuur voor dit specifieke domein geen IPv6 records door via je reverse proxy. Plex verwerkt X-Forwarded-For met IPv6 adressen via deze methode nog niet altijd correct. Gebruik voor de proxy koppeling uitsluitend IPv4 records.
