Let’s say I setup some subdomains and then point them to my home server via Cloudflare tunnel.

If I use one of those subdomains from my personal PC on the same network as my home server, to watch a movie for example, is all of that traffic going out to the internet and then back? Or does all the traffic stay internal once the connection has been made?

  • CameronDev@programming.dev
    link
    fedilink
    English
    arrow-up
    7
    ·
    20 hours ago

    I would assume yes, it goes out to cloudflare and back in. You want to setup an internal DNS server on your network, and resolve your servers address to its local one. That way when your outside your network, you use the tunnel, and inside it goes direct.

    • aksdb@lemmy.world
      link
      fedilink
      English
      arrow-up
      5
      ·
      17 hours ago

      Cloudflare tunnel likely terminates TLS on the edge. So if you bypass it, you don’t have HTTPS. Not a problem locally, but then destroys the portability of the URL (because at home you need http and outside you need https). Might as well use different hosts then.

      • AmbiguousProps@lemmy.today
        link
        fedilink
        English
        arrow-up
        5
        ·
        17 hours ago

        You can use caddy to get internal https via cloudflare API, and no traffic needs to go through a cloudflare tunnel for that.

        • aksdb@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          16 hours ago

          Possible, true. But then the setup also becomes more complicated. In addition you end up with different certs for local and remote access, which could cause issues with clients if they try to enforce cert pinning for example.

          • AmbiguousProps@lemmy.today
            link
            fedilink
            English
            arrow-up
            4
            ·
            16 hours ago

            The (wildcard) certs are the same, as it’s what caddy is pulling via API. You can either build the cloudflare module into caddy via docker build, or use a prebuilt version. It doesn’t create two separate certs for local and remote.

            It works really well for me, and is actually the most straight forward way to get valid certs for internal services I’ve found. Since they’re wildcard, my internal domains don’t get exposed through certificate authorities.

        • aksdb@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          16 hours ago

          If your client(s) accept irregularly changing remote certs (i.e. they don’t do cert pinning), it should work. If both cloudflare and you use the same CA, it would likely work even with cert pinning. Certainly possible, but increases the complexity of the overall setup.

          • SteveTech@programming.dev
            link
            fedilink
            English
            arrow-up
            1
            ·
            14 hours ago

            Cert pinning is pretty uncommon in the self hosting community though, especially when both Cloudflare and Let’s Encrypt have a 90 day validity period and often renews after 60 days.

  • curbstickle@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    4
    arrow-down
    4
    ·
    edit-2
    20 hours ago

    Should all be local after the connection is made, as long as nothing is wonky with your setup.

    Locally you should resolve that DNS to your local server though, not via cloudflare.

    • CameronDev@programming.dev
      link
      fedilink
      English
      arrow-up
      7
      ·
      20 hours ago

      I dont know that that is true. With cloudflare tunnels, their server.x.y.z will resolve to a cloudlfare IP address, which then tunnels it to their server? The traffic has to hit the cloudflare server, it can’t short circuit that connection? Am I missing something?

      • curbstickle@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        5
        arrow-down
        1
        ·
        edit-2
        20 hours ago

        Depends on the server obviously, but most will pass off their local once the initial handshake is made.

        Once that is done, DNS isnt relevant anymore.

        Edit: This is especially true for media (movies, TV) servers.

        • SteveTech@programming.dev
          link
          fedilink
          English
          arrow-up
          4
          ·
          edit-2
          14 hours ago

          Uhh, this might be true for WebRTC, except not much uses WebRTC other than for realtime streaming/calling. Jellyfin for example is just an mp4 stream over http; and http(s) will only use the IP in the DNS record. I’d like to see a packet capture if you are certain something is switching IP.

        • CameronDev@programming.dev
          link
          fedilink
          English
          arrow-up
          3
          ·
          18 hours ago

          How does that work? Do they do something like what tailscale does to negotiate the connection? Can you point me to any doco for how that works?

          • rumba@lemmy.zip
            link
            fedilink
            English
            arrow-up
            2
            ·
            10 hours ago

            Plex does this on its own. It’s one of the features they provide. The client/service knows when the server is local even though you go outside to make the initial connection. They go through a lot of trouble to do this. You connect externally it brokers the initial connection proxies date of back and forth to see if you can talk to each other directly, your client knows your server is now local and it switches over.

            I don’t know if any other video hosting package that does this. Jellyfin certainly would not. I ‘think’ if you threw a tailscale in the middle, It would be able to do it without hair pinning as long as you were using a local exit node instead of tailnet. They’d still probably go through that local exit node.

            • CameronDev@programming.dev
              link
              fedilink
              English
              arrow-up
              2
              ·
              8 hours ago

              As you’ve described it, and from what I have read, its very similar to how tailscale negotiates its connections.

              Does seem to be unique to Plex though.

              • rumba@lemmy.zip
                link
                fedilink
                English
                arrow-up
                2
                ·
                7 hours ago

                Yup, there are few efficient ways to handle that, so anything that does it looks something like everything else that handles it.

                Sadly, not many things handle it :)

          • curbstickle@lemmy.dbzer0.com
            link
            fedilink
            English
            arrow-up
            2
            ·
            11 hours ago

            Remember that we’re talking about a server on your local network, and a device on the local network to make the connection for the stream. We aren’t talking about streaming over the internet.

            • Client looks up server via DNS
            • Client connects to public IP
            • Client handshakes to server
            • Server announces to client available connections (public, local)
            • Client continues connections with local address

            There is no need for tailscale or anything, this is a local connection. The only thing the public address is doing is the initial call to the server.

            • CameronDev@programming.dev
              link
              fedilink
              English
              arrow-up
              3
              ·
              11 hours ago

              I get how that could work, but what services actually do that? Homeassistant can, but that needs to be setup explicitly for it to work.

              • curbstickle@lemmy.dbzer0.com
                link
                fedilink
                English
                arrow-up
                2
                ·
                11 hours ago

                Plex is a good example that does just that (not on my rec list but a good example) along with many business grade IPTV and media streaming products (think digital signage).

                I’d really love to rework JF to do it, but structurally it wouldn’t work, you’d need a management service in front of it.