I am making this post in good faith

In my last post I asked about securely hosting Jellyfin given my specific setup. A lot of people misunderstood my situation, which caused the whole thread to turn into a mess, and I didn’t get the help I needed.

I am very new to selfhosting, which means I don’t know everything. Instead of telling me that I don’t know something, please help me learn and understand. I am here asking for help, even if I am not very good at it, which I apologize for.

With that said, let me reoutline my situation:

I use my ISP’s default router, and the router is owned by Amazon. I am not the one managing the router, so I have no control over it. That alone means I have significant reason not to trust my own home network, and it means I employ the use of ProtonVPN to hide my traffic from my ISP and I require the use of encryption even over the LAN for privacy reasons. That is my threat model, so please respect that, even if you don’t agree with it. If you don’t agree with it, and don’t have any help to give, please bring your knowledge elsewhere, as your assistance is not required here. Thank you for being respectful!

Due to financial reasons, I can only use the free tier of ProtonVPN, and I want to avoid costs where I can. That means I can only host on the hardware I have, which is a Raspberry Pi 5, and I want to avoid the cost of buying a domain or using a third party provider.

I want to access Jellyfin from multiple devices, such as my phone, laptop, and computer, which means I’m not going to host Jellyfin on-device. I have to host it on a server, which is, in this case, the Raspberry Pi.

With that, I already have a plan for protecting the server itself, which I outlined in the other post, by installing securecore on it. Securing the server is a different project, and not what I am asking for help for here.

I want help encrypting the Jellyfin traffic in transit. Since I always have ProtonVPN enabled, and Android devices only have one VPN slot enabled, I cannot use something such as Tailscale for encryption. There is some hope in doing some manual ProtonVPN configurations, but I don’t know how that would work, so someone may be able to help with that.

All Jellyfin clients I have used (on Linux and Android) do not accept self-signed certificates. You can test this yourself by configuring Jellyfin to only accept HTTPS requests, using a self-signed certificate (without a domain), and trying to access Jellyfin from a client. This is a known limitation. I wouldn’t want to use self-signed certificates anyways, since an unknown intruder on the network could perform a MITM attack to decrypt traffic (or the router itself, however unlikely).

Even if I don’t trust my network, I can still verify the security and authenticity of the software I use in many, many ways. This is not the topic of this post, but I am mentioning it just in case.

Finally, I want to mention that ProtonVPN in its free tier does not allow LAN connections. The only other VPN providers I would consider are Mullvad VPN or IVPN, both of which are paid. I don’t intend to get rid of ProtonVPN, and again that is not the topic of this post.

Please keep things on-topic, and be respectful. Again, I am here to learn, which is why I am asking for help. I don’t know everything, so please keep that in mind. What are my options for encrypting Jellyfin traffic in transit, while prioritizing privacy and security?

  • tychosmoose@lemm.ee
    link
    fedilink
    English
    arrow-up
    28
    ·
    3 months ago

    How about creating your own LAN within the untrusted network?

    Something like an inexpensive OpenWRT router would do fine. Connect all your devices and the server to the router. They are now on a trusted network. Set up Wireguard on the OpenWRT router to connect to Proton so that your outbound traffic from all your devices is secured.

    • non_burglar@lemmy.world
      link
      fedilink
      English
      arrow-up
      18
      ·
      3 months ago

      I was looking for this. Op seems to be obsessed with “zero trust”, so creating a trusted area for this stuff would be an easy win.

      • sugar_in_your_tea@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        3
        ·
        edit-2
        3 months ago

        Exactly! I did that for a couple years until I found a cheap modem to replace the ISP modem. It didn’t do any routing, so there was no weird NAT issue, it just converted the DSL signal to Ethernet with a WAN IP.

        I didn’t have to change any network settings on my LAN when I switched, or when I moved to another place with a different ISP. I had that same router for years, even after I got a dedicated AP for my house.

  • Melmi@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    21
    ·
    3 months ago

    A lot of people have suggested Tailscale and it’s basically the perfect solution to all your requirements.

    You keep saying you need ProtonVPN which means you can’t use Tailscale, but Tailscale actually supports setting up an exit node which is what you need. Put Protonvpn on the Raspberry Pi, then set it up as an exit node for your tailnet. There’s a lot of people talking about how they did this online. It looks like they even have native support for bypassing the manual setup if you use Mullvad.

    As long as every client has the ability to use Tailscale (I.e. no weird TVs or anything) this seems like it checks all your boxes. And since everything is E2EE from Tailscale, TLS is redundant and you can just use HTTP.

    • sem@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      8
      arrow-down
      1
      ·
      3 months ago

      I’ll just add my 2¢

      Tailscale is incredibly powerful and they do a lot of work to make their systems intelligible, but the learning curve is still pretty steep. But still a great option.

      • treyf711@lemm.ee
        link
        fedilink
        English
        arrow-up
        4
        ·
        3 months ago

        One thing that I do, though it may not be as secure as a reverse proxy is just using tailscale funnel to expose my jellyfin instance.

        I’d like to learn a self-hosted SSO but time is my least abundant resource at the moment.

  • catloaf@lemm.ee
    link
    fedilink
    English
    arrow-up
    10
    arrow-down
    1
    ·
    3 months ago

    ProtonVPN in its free tier does not allow LAN connections

    This is the limiting factor. In order to get around this, you’ll have to put your Jellyfin server on the Internet. Hopefully you can enable port forwarding. If not, you have painted yourself into a corner.

    If you cannot use self-signed or internal CA certs, you will also need a domain name, and something like Let’s Encrypt to issue certs for that domain.

    • The 8232 Project@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      1
      arrow-down
      2
      ·
      3 months ago

      Although not ideal, I would be willing to pay for ProtonVPN (or another) if that’s what is required. If I did have LAN connections, what are my options? Eventually I will get a more trustworthy router, but I still don’t want to trust it by sending data in plaintext, even if I can control it and enable port forwarding.

  • non_burglar@lemmy.world
    link
    fedilink
    English
    arrow-up
    9
    arrow-down
    1
    ·
    3 months ago

    I read the old thread and now this one.

    As I understand it, you want to create connection between clients on your lan, but you don’t trust your lan, so it’s like having a raspberry pi server and some client both on the coffee shop network and you want them to communicate securely?

    Tailscale is what you want. Easy setup, free, and allows exactly this to happen.

    • bort@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 months ago

      I use tailscale for exactly this purpose. And with the added benefit of bring able to watch media and manage the device remotely and easily

  • litchralee@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    3 months ago

    I previously proffered some information in the first thread.

    But there’s something I wish to clarify about self-signed certificates, for the benefit of everyone. Irrespective of whichever certificate store that an app uses – either its own or the one maintained by the OS – the CA Browser Forum, which maintains the standards for public certificates, prohibits issuance of TLS certificates for reserved IPv4 or IPv6 addresses. See Section 4.2.2.

    This is because those addresses will resolve to different machines on different networks. Whereas a certificate for a global-scope IP address is fine because it should resolve to the same destination. If certificate authorities won’t issue certs for private IP addresses, there’s a good chance that apps won’t tolerate such certs either. Nor should they, for precisely the reason given above.

    A proper self-signed cert – either for a domain name or a global-scope IP address – does not create any MITM issues as long as the certificate was manually confirmed the first time and added to the trust store, either in-app or in the OS. Thereafter, only a bona fide MITM attack would raise an alarm, the same as if a MITM attacker tries to impersonate any other domain name. SSH is the most similar, where trust-on-first-connection is the norm, not the outlier.

    There are safe ways to use self-signed certificate. People should not discard that option so wontonly.

    • catloaf@lemm.ee
      link
      fedilink
      English
      arrow-up
      1
      arrow-down
      1
      ·
      3 months ago

      It sounds like the clients do not have the ability to manually trust a self-signed cert.

      • N0x0n@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        arrow-down
        1
        ·
        edit-2
        3 months ago

        I don’t get that…

        I have self-signed SSL certificate and intermediateCA installed on all my devices and works flawlessly with every application that accept those (on android the manifest.XML has to allow user based certificate which is in most cases).

        One exception on Android was the use of MPV which doesn’t do that and never will? However, the web player video type from official application works without issues…

        I have navidrome, jellyfin, Ironfox, LibreTube, KoReader, Findroid… All work flawlessly with self-signed certs !

        The issue here (as said in the second answer of his linked jellyfin post) is that them needs a reverse proxy that takes care of the SSL handshake and not jellyfin directly. So OP was missing a lot of good information in them’s first post…

        • catloaf@lemm.ee
          link
          fedilink
          English
          arrow-up
          2
          arrow-down
          1
          ·
          3 months ago

          If it’s signed by an intermediate CA, then it’s not self-signed.

          • N0x0n@lemmy.ml
            link
            fedilink
            English
            arrow-up
            2
            ·
            3 months ago

            Huh? Yeah it is… It’s a self-signed intermediate CA, signed by a self-signed rootCA.

            In my case a miniCA in my lan.

            • catloaf@lemm.ee
              link
              fedilink
              English
              arrow-up
              3
              ·
              3 months ago

              Right. If it’s signed by a CA, it’s not self signed. Self signed means signed by nobody but the server that generated it.

              self-signed certificates are public key certificates that are not issued by a certificate authority (CA)

              https://en.wikipedia.org/wiki/Self-signed_certificate

              An internal CA whose signing certs you’ve manually installed is still a trusted CA.

              • N0x0n@lemmy.ml
                link
                fedilink
                English
                arrow-up
                1
                ·
                3 months ago

                Ohhhhh ! Sometimes I just need to sh*up !

                Thanks for the clarification.

  • DesolateMood@lemm.ee
    link
    fedilink
    English
    arrow-up
    3
    ·
    3 months ago

    One thing that I haven’t seen anyone mention yet, in this post or the last one, how to you plan on aquiring videos for your server? If you plan on torrenting, you just have to pay for a vpn, Proton doesn’t allow you to make p2p connections like that on a free account

    • The 8232 Project@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 months ago

      I’ve been able to use Proton for torrenting, although at abysmal speeds. I don’t acquire many new videos, so this isn’t an issue quite yet. When I have more money I will absolutely be switching to Mullvad VPN.

      • CmdrShepard42@lemm.ee
        link
        fedilink
        English
        arrow-up
        2
        ·
        3 months ago

        Don’t use Mullvad for torrenting. They’re a great VPN but they had to remove port forwarding so you’ll be unable to torrent properly. AirVPN is an alternative that still has port forwarding available.

      • MrPoopbutt@lemmy.world
        link
        fedilink
        English
        arrow-up
        1
        ·
        3 months ago

        Be careful, Mullvad doesnt allow port forwarding. I understand this to be important for torrent purposes.

        • Jakeroxs@sh.itjust.works
          link
          fedilink
          English
          arrow-up
          1
          ·
          3 months ago

          Correct, trackers will work but DHT or whatever it’s called won’t, end up with a lot of dead torrents trying to run it through mull, but I paid a bit in advance so I can’t swap yet.

          Nzbs work most of the time anyway

  • Willdrick@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    3 months ago

    Here’s an idea: on your android device use something like Insular to create a work profile, that way you get its own VPN slot, add your selfhosted-related apps there along with Tailscale. You can keep ProtonVPN on for your other apps, while using TS for your “LAN away from home” stuff. Since Tailscale already encrypts all traffic, you don’t have to worry about HTTPS, certs, et al.

    • The 8232 Project@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      edit-2
      3 months ago

      THIS

      While I would make the modification to use Android’s Private Space instead of a work profile (or Shelter instead of Insular), this was such an obvious solution, and I feel stupid for not seeing it. I might use Wireguard instead of Tailscale, I don’t know yet, but thank you! Consider yourself an outside the box thinker!

      We all got hung up on trying to fix Proton, when Android was the issue here!

  • Arkhive (they/she)@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    1
    ·
    3 months ago

    To be totally honest I didn’t read your entire post, but just from your intro I think we are in similar situations. ISP router, low costs, using only the hardware you have around. I’ve solved a lot of stuff with Tailscale. None of my services are public facing and instead I connect to them over Tailscale (could be replaced with wireguard).

    The wall I’m hitting you or maybe others could help with, is accessing my services from sub domains of a single Tailscale address rather than having to type port numbers for everything. I know this involves a reverse proxy and DNS (I use PiHole for that), but I’m stuck trying to configure the two in a way that actually works. Once I finally ditch iOS for good I’ll probably just sync a hosts file between all my devices using Syncthing to help streamline the DNS situation.

    • The 8232 Project@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      3
      arrow-down
      1
      ·
      edit-2
      3 months ago

      Once I finally ditch iOS for good

      I had that feeling for all too long. It’s so refreshing to break free. Word of advice: make sure to switch over your Signal account to make your new phone as an owner

      You planning on GrapheneOS?

      • Arkhive (they/she)@lemmy.blahaj.zone
        link
        fedilink
        English
        arrow-up
        1
        ·
        3 months ago

        Honestly I want a Linux phone, but the scene needs to mature a bit. I’d also like a physical keyboard, so I’m even more limited in my options. LilyGo just released something I’d try, but it sold out almost instantly. Good call on the signal transfer, though I wish better platforms were catching on. Having to use a phone number to sign up kind of defeats the purpose in my opinion. Graphene and Postmark are on my short list of things to try if I end up on an android device.

    • The 8232 Project@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 months ago

      Thank you for this!

      Is OPNsense like dd-wrt or OpenWrt?

      The thing is (and this is by no means a knock on you) if you are doing pen testing then you definitely need to increase your knowledge on networking.

      I have background in Wi-Fi hacking and LAN attacks, and I understand the structure of networking (LAN, WAN, layers of the internet, DNS, CAs, etc.). My head starts to hurt when RADIUS is involved, ad hoc networking (which I understand the concepts of, just not how it works. I want to learn this first), mDNS, and other complicated topics. I’m trying to push past those mental roadblocks and learn as best I can, but it’s a tricky topic!

      https://wiki.freeradius.org/

      There’s something to check out just to get some concepts. You can do plenty of things to harden your security that could give you the comfort you need without defaulting to encrypted connections over LAN.

      Thank you! I’ll definitely check this out. You’ve been a huge help!

  • lefixxx@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    ·
    3 months ago

    and Android devices only have one VPN slot enabled, I cannot use something such as Tailscale for encryption.

    I solved a similar situation with a tailscale subnet router . a tailscale subnet router is a tailscale node that exposes the non-tailscale network to the tailscale network. This way I am able to access one of my routers (and its PBX) from all tailscale nodes. The android phone has only tailscale as a VPN. If i pay for mulvad I can have the rest of the traffic go over a mullvad node.

    doesn’t really help you here though, unless you install protonVPN on the pi and add that as a tailscale exit node.

  • colonelp4nic@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    edit-2
    3 months ago

    I remember you were worried about your ISP messing things up for you, hence the VPN. I would recommend creating a “Virtual Machine” that does all of your downloading to whatever hard drive you’re using. That VM can have proton installed. Then, on your regular computer (not within the VM), you can host Jellyfin with no VPN involved, making it accessible at 192.168.0.xx.

    I think this hits your goals without needing to expose Jellyfin to the Internet. Plus it has minimal technical complexity. Your downloading traffic will be VPN protected, but Jellyfin will still be accessible to your local network.
    edit: You can set up a password for Jellyfin, protecting it from your internal threats.

    edit2: You can use letsencrypt to create a certificate that picky clients will accept. Buy a domain, any domain, and configure the “A record” to point to 192.168.0.xx (your Jellyfin IP). Then tell your client to go to whatever domain you get, like “luigiliterallydidnothingwrongplzfree.com”, then the client will have to use the internet to ask DNS what the IP address is, but after that, it will just use your local network.

    edit3: Since you just have the raspberry PI, instead of using a Virtual Machine, you could have 2 separate SD cards. One only has the downloader and VPN installed, the other only has Jellyfin installed (no VPN). Then swap as needed.

    • The 8232 Project@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      9
      arrow-down
      5
      ·
      3 months ago

      Since I always have ProtonVPN enabled, and Android devices only have one VPN slot enabled, I cannot use something such as Tailscale for encryption.

      • kitnaht@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        arrow-down
        1
        ·
        edit-2
        3 months ago

        Tailscale is only for the server/host. You’re not changing all of your VPN services over to this, you’re using it in a ‘reverse’ fashion. You’re VPN-ing the server out to the world so it’s reachable and you have port forwarding options, etc.

        From there, it can be reached by any client on the internet as a service. From there though, I don’t know how you’d get to it securely without a domain and SSL (Let’s Encrypt/Caddy) certs.

        A domain is only like $16/year. So it’s not prohibitively expensive.

        • swab148@lemm.ee
          link
          fedilink
          English
          arrow-up
          3
          ·
          3 months ago

          Domains can be even cheaper than that, I got a .net address from porkbun for $12.50 a year. That’s cheap enough for even me, and I am broke, y’all.