<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk" -->

---
title: I gave up on port forwarding with my Jellyfin server,...
description: After struggling with CGNAT, double NAT, dynamic IPs, and firewall configuration to enable remote access to a self-hosted Jellyfin media server via port...
canonical: https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: I gave up on port forwarding with my Jellyfin server, and remote streaming finally just works | daily.dev
og:description: After struggling with CGNAT, double NAT, dynamic IPs, and firewall configuration to enable remote access to a self-hosted Jellyfin media server via port...
og:url: https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk
og:image: https://api.daily.dev/og/posts/czJkfFJxK.png
og:image:alt: I gave up on port forwarding with my Jellyfin server, and remote streaming finally just works
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# I gave up on port forwarding with my Jellyfin server, and remote streaming finally just works

**[XDA Developers](https://daily.dev/sources/xda-developers)** · 3 min read · 0 upvotes · 0 comments

## Summary

After struggling with CGNAT, double NAT, dynamic IPs, and firewall configuration to enable remote access to a self-hosted Jellyfin media server via port forwarding, the author switched to Tailscale instead. Tailscale creates a peer-to-peer mesh network between devices with stable IP addresses (optionally using MagicDNS for hostnames), avoiding the need for port forwarding, dynamic DNS, or a reverse proxy. Setup only requires enabling remote connections in Jellyfin's dashboard and adding the server via its Tailscale IP and port in the client app; if a direct connection isn't possible, Tailscale falls back to relay servers.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.xda-developers.com/gave-up-port-forwarding-jellyfin-remote-streaming-works>

## Questions this post answers

### How do I set up remote access to my Jellyfin server without port forwarding?

Use Tailscale to create a private mesh network between your Jellyfin server and playback devices, avoiding port forwarding entirely. Enable 'Allow remote connections to this server' under Dashboard > Networking in Jellyfin, make sure remote access is enabled for the user account, then add the server in the client app using its Tailscale IP and port, such as http://100.x.x.x:8096.

_daily.dev surfaces practical self-hosting fixes like this for anyone tired of fighting port forwarding._

### Why is port forwarding difficult to set up for a home media server?

CGNAT is the main obstacle: many ISPs route multiple customers through a single shared public IP address, so incoming traffic never reaches your router and no forwarding rule can fix it. Even without CGNAT, you need a reserved local IP for the server, dynamic DNS for changing public IPs, and firewall rules, all of which add ongoing maintenance and expose the server to the internet.

_Developers weighing self-hosting tradeoffs like this can track similar setup guides on daily.dev._

### How does Tailscale maintain low latency for streaming between devices?

Tailscale attempts to establish a direct peer-to-peer connection between the streaming device and the server so media travels directly between them rather than through a central VPN server, keeping latency down and using the home connection's available upload speed. If a direct connection isn't possible due to restrictive NAT or firewalls, it falls back to a peer relay or one of its DERP relay servers.

_Anyone comparing VPN mesh networking options for home servers can follow related deep dives on daily.dev._

## Similar posts on daily.dev

- [I made Jellyfin remote streaming reliable without opening everything to the internet](https://daily.dev/posts/i-made-jellyfin-remote-streaming-reliable-without-opening-everything-to-the-internet-n4wlwzyje) · XDA Developers · 0 upvotes · 0 comments
- [I couldn’t get Jellyfin remote streaming working until I found this app](https://daily.dev/posts/i-couldn-t-get-jellyfin-remote-streaming-working-until-i-found-this-app-skscna30g) · XDA Developers · 0 upvotes · 0 comments
- [Tailscale made my Jellyfin streaming secure, but 4Mbps made it actually work](https://daily.dev/posts/tailscale-made-my-jellyfin-streaming-secure-but-4mbps-made-it-actually-work-gddvwf6jz) · XDA Developers · 0 upvotes · 0 comments
- [Tailscale replaced my entire networking setup, and I finally stopped dreading new services](https://daily.dev/posts/tailscale-replaced-my-entire-networking-setup-and-i-finally-stopped-dreading-new-services-taswqwfah) · XDA Developers · 0 upvotes · 0 comments
- [I turned my mini PC into a Tailscale relay, and remote transfers went from crawling to instant](https://daily.dev/posts/i-turned-my-mini-pc-into-a-tailscale-relay-and-remote-transfers-went-from-crawling-to-instant-kzqztwc0u) · XDA Developers · 0 upvotes · 0 comments

---

Tags: [#networking](https://daily.dev/tags/networking), [#vpn](https://daily.dev/tags/vpn), [#self-hosting](https://daily.dev/tags/self-hosting), [#tailscale](https://daily.dev/tags/tailscale), [#jellyfin](https://daily.dev/tags/jellyfin)

[View this post on daily.dev](https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"I gave up on port forwarding with my Jellyfin server, and remote streaming finally just works","url":"https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk"},"datePublished":"2026-09-01T19:02:01.118Z","dateModified":"2026-09-01T19:04:31.069Z","description":"After struggling with CGNAT, double NAT, dynamic IPs, and firewall configuration to enable remote access to a self-hosted Jellyfin media server via port...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d630d62a3eaae605f2d91929452f57d0?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d630d62a3eaae605f2d91929452f57d0?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"XDA Developers","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"XDA Developers","logo":"https://media.daily.dev/image/upload/s--kCg6yyAP--/f_auto,q_auto/v1774964407/logos/xda-developers?_a=BAMAMiWQ0","url":"https://daily.dev/sources/xda-developers"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"networking,vpn,self-hosting,tailscale,jellyfin","timeRequired":"PT3M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"XDA Developers","item":"https://daily.dev/sources/xda-developers"},{"@type":"ListItem","position":3,"name":"I gave up on port forwarding with my Jellyfin server, and remote streaming finally just works"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/i-gave-up-on-port-forwarding-with-my-jellyfin-server-and-remote-streaming-finally-just-works-czjkffjxk#faq","mainEntity":[{"@type":"Question","name":"How do I set up remote access to my Jellyfin server without port forwarding?","acceptedAnswer":{"@type":"Answer","text":"Use Tailscale to create a private mesh network between your Jellyfin server and playback devices, avoiding port forwarding entirely. Enable 'Allow remote connections to this server' under Dashboard > Networking in Jellyfin, make sure remote access is enabled for the user account, then add the server in the client app using its Tailscale IP and port, such as http://100.x.x.x:8096. daily.dev surfaces practical self-hosting fixes like this for anyone tired of fighting port forwarding."}},{"@type":"Question","name":"Why is port forwarding difficult to set up for a home media server?","acceptedAnswer":{"@type":"Answer","text":"CGNAT is the main obstacle: many ISPs route multiple customers through a single shared public IP address, so incoming traffic never reaches your router and no forwarding rule can fix it. Even without CGNAT, you need a reserved local IP for the server, dynamic DNS for changing public IPs, and firewall rules, all of which add ongoing maintenance and expose the server to the internet. Developers weighing self-hosting tradeoffs like this can track similar setup guides on daily.dev."}},{"@type":"Question","name":"How does Tailscale maintain low latency for streaming between devices?","acceptedAnswer":{"@type":"Answer","text":"Tailscale attempts to establish a direct peer-to-peer connection between the streaming device and the server so media travels directly between them rather than through a central VPN server, keeping latency down and using the home connection's available upload speed. If a direct connection isn't possible due to restrictive NAT or firewalls, it falls back to a peer relay or one of its DERP relay servers. Anyone comparing VPN mesh networking options for home servers can follow related deep dives on daily.dev."}}]}
```

