So everyone is talking about cloudflare tunnels and I decided to give it a shot.

However, I find the learning curve quite hard and would really appreciate a short introduction into how they work and how do I set them up…

In my current infrastructure I am running a reverse proxy with SSL and Authentik, but nothing is exposed outside. I access my network via a VPN but would like to try out and consider CF. Might be easier for the family.

How does authentication work? Is it really a secure way to expose internal services?

Thanks!

  • Sparking@lemm.ee
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

    People are saying that it is a cloud managed reverse proxy, but I would not recommend using it like this. You should be running a reverse proxy on your own hardware, imo.

    It is still useful because you can use it as just a proxy. You can point your dns to your cloudflare tunnel endpoint and cloudflare will screen all traffic going to your server. I’ve actually stopped using it, but it is a decent way to auto feel all the random internet traffic pitfalls like portscanning bonnets. Also putting something between your server IP and your domain is nice.

  • Meow.tar.gz@lemmy.goblackcat.com
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    In effect, Cloudflare would give protection against DDoS attacks before requests would even hit your servers. That much said you can implement mitigations on the reverse proxy itself. One example would be fail2ban.

    I’m sure there are additional steps that you can take. I’m not a fan of Cloudflare because their free offering has some caveats and violating these could be problematic. I have a cloud VPS with a WireGuard tunnel back to my server. I don’t have to do anything ugly like port forwarding. The cloud VPS runs NGINX as a reverse proxy. It’s a relatively simple and effective setup.

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Thanks! How do you handle that with internal DNS? I suppose you’d need to setup the exact same proxies on the internal and external server, and local DNS handles which one my domain it’s being resolved to?

      • Meow.tar.gz@lemmy.goblackcat.com
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Right now the internal DNS I use has a TLD of .lan but that’s pretty much for my personal convenience. I access my websites by their FQDN internally with no issue. So I am not sure what your tring to achieve. Mind elaborating?

        • operator@kbin.socialOP
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          Of course! So in order to get maximum speed on your services, you wanna use a direct internal route when you’re inside your net. My understanding is, that when using an external cloud VPS with a proxy, local clients go through unnecessary routing…

          Local request --out--> external VPS (proxy) --request data from internal--> receive data on external proxy --send back--> local client

          So what I am saying, all requests are unnecessarily routed through the external VPS. So one would have to create an exact duplicate reverse proxy internally to avoid leaving the net. When accessing domain.com, the internal DNS returns the local proxy IP, when outside you receive the cloud VPS IP.

          Or am I missing something?

          Thank you for taking the time!

          • Meow.tar.gz@lemmy.goblackcat.com
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

            I just decided to go ahead and implement split-brain DNS this evening and it works perfectly. What are you using for your internal DNS server? If it is Unbound, the one that I am using, I can share my config with you. After implementing this, the speed of my services when being accessed from my internal network sped up by an order of magnitude. I shoulda done this earlier. 😆

            • operator@kbin.socialOP
              link
              fedilink
              arrow-up
              1
              ·
              1 year ago

              That be amazing! I am currently not using anything (took down my homelab a while back) and planning on completely starting over fresh now.

              I am most likely going with unbound! So if you could, that be great!

              • Meow.tar.gz@lemmy.goblackcat.com
                link
                fedilink
                arrow-up
                2
                ·
                1 year ago

                Here is a sample configuration that should work for you:

                server:
                        interface: 127.0.0.1
                        interface: 192.168.1.1
                        do-udp: yes
                        do-tcp: yes
                        do-not-query-localhost: no
                        verbosity: 1
                        log-queries: yes
                
                        access-control: 0.0.0.0/0 refuse
                        access-control-view: 127.0.0.0/8 example
                        access-control-view: 192.168.1.0/24 example
                
                        hide-identity: yes
                        hide-version: yes
                        tcp-upstream: yes
                
                remote-control:
                        control-enable: yes
                        control-interface: /var/run/unbound.sock
                
                view:
                        name: "example"
                        local-zone: "example.com." inform
                        local-data: "example.com. IN A 192.168.1.2"
                        local-data: "www IN CNAME example.com."
                        local-data: "another.example.com. IN A 192.168.1.3"
                
                forward-zone:
                        name: "."
                        forward-addr: 8.8.8.8
                        forward-addr: 8.8.4.4
                

                What makes the split-brain DNS work is if the request for resolution comes from the localhost or from inside your network, it will first go to the view section to see if there is any pertinent local data. So if you do a query from your home network, on say, example.com, it will return your internal IP address which in this case is 192.168.1.2

  • thatguy@lemmy.itsallbadsyntax.com
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    I use a VPS, not Cloudflair, but it’s the exact same concept.

    CF will have an exposed IP that you point your domains A record to. On your CF instance, you would then tunnel (I’m guessing they offer wireguard) into your home network, just like you are currently doing from your personal device.

    A big difference here is you will put a reverse proxy on CF that will authenticate SSL with users. The proxy then will pass unencrypted http down the tunnel for your web services to respond to.

    A couple days ago, someone asked (I think on this instance), “can you protect yourself from your VPS?”, which I think would be your next question.

    <Opinion>I pay for a VPS, because if it’s free, you or your data is some how the product. </Opinion>

  • JonDotG@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    I would also like to know this. Everyone talks about it but I have no idea how it’s different than anything I’m doing now. Is it like Tailscale?

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

      One of the mysteries I am facing ^^ selfhost headscale? Tailscale? VPN? CF?

      Too many options :D

      • Encrypt-Keeper@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        1 year ago

        Selfhost headscale, run a reverse proxy with let’s encrypt on a VPS and Tailscale that VPS to your local server, utilizing Tailscale’s ACLs to block all ports except for your desired ones. It’s exactly what CF tunnels is doing but you have far more control over your data and security.

      • vividspecter@lemm.ee
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Regular wireguard is fine as long as you’re not on CG-NAT, and doesn’t have any reliance on third party services.

      • Distributed@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Personally, I just wireguard in to my local net. No need to have CF snooping where they don’t need to.

        It all depends on your use cases and what you (or your users) need to access.

        • operator@kbin.socialOP
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          One of my considerations is the privacy side… VPN or self hosted solution seems to be the waay better choice in that case.

      • deleted@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Try to selfhost tailscale

        You can set it up in 10 minutes.

        In iOS, you can make automations to connect after launching certain apps.

        In Android, you can do split tunneling.

  • CodaBool@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    edit-2
    1 year ago

    I used one to reach my qbittorrent selfhost. I found a cool docker image. It bundles a openVPN connection with qbittorrent so that I don’t need my home server to be on a VPN at all times. As well as ensures traffic always goes through VPN. I was running into an issue where I could not reach from my home network. But when I used a cloudflare tunnel it somehow worked. This was all until I realized there was an environment variable of LAN I needed to set which allowed connections from my home network 😮‍💨

    I would definitely recommend this setup for any torrenting. I’ve been using it for years with zero IP leaks. Believe me, Spectrum would let me know. They did before I had setup.

    EDIT: just realized the guy deleted the docker image for that based on a false positive (that’s been a false positive for a year). I reuploaded their same image to my docker account. Still works without any leak, not sure why they took such a drastic measure.

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      What I’m doing is using a dedicated VPN Gateway container. The instances running delicate services have a static default route to the GW-container.

      This is an extra step, but allows me add easily route other services or clients or even whole networks through my VPN without additional setup or specialized containers bundling both.

      Wanna use it on the phone? Change the gateway address. Wanna use it from my Linux machine? Add a static default route. Etc…

      Works flawlessly!

      • CodaBool@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        That sounds better since it doesn’t have any kind of bundling of images. Do you have a link to anything public I can look at to try out a similar setup?

  • pz303@kbin.social
    link
    fedilink
    arrow-up
    0
    arrow-down
    1
    ·
    1 year ago

    @operator

    Cloudflared tunnels are great. No firewall ports to open.

    I installed the Cloudflared docker, which is headless, and fed it my API key. Then Cloudflared creates a VPN between your system and theirs. Then, think of Cloudflare as the reverse proxy, you just configure it on the CF site instead of locally. No need for a reverse proxy on your side.

    I’ve not done anything with auth on it as what I run I don’t mind being public. If you still want to run a local auth, you can set it to hit your local reverse proxy instead and do it that way.

    The benefits are you don’t need to open firewall ports and your local IP is irrelevant so no need for dynamic DNS.

    • Encrypt-Keeper@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      Just a side note that “not opening firewall ports” is not inherently a security benefit if you’re exposing the same service on the same port on the same host anyway via your reverse proxy setup.

      If you were to measure your level of “security” on having ports open or not alone, then using Cloudflare tunnels could be considered worse, since an outbound VPN connection to Cloudflare is essentially circumventing your firewall’s protection entirely, meaning you’re effectively opening all 65,535 TCP and UDP ports instead of one, albeit only to Cloudflare.

      There are benefits to using Cloudflare tunnels but “not opening firewall ports” is not one of them. And you could just as easily accomplish the same thing without Cloudflare by using a VPS and Tailscale with the selfhosted Headscale coordinator.

      • pz303@kbin.social
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Meh, it’s sorta 6 of one and half-dozen of another. The benefit of not opening ports on a firewall isn’t necessarily a security one so much of a convenience one for people who don’t know how their routers work or no access to open those ports. The only security value is it prevents any exploits on your router and a port scan against your network won’t show those ports open. That makes it easier to hide the fact that your hosting something. I’d agree, it’s not a huge security vector to worry about, but can help people not see your real IP which has tangible value.

        Really, your offloading security to CF and putting trust in them to do a better job than you, but as you said, in doing so they can sort of get the keys to your kingdom. I think it’s just worth it with their other tools to block bots and other common exploits that a Netgear home router isn’t looking for.

        The problem with a vps and tailscale is its one more thing to manage and a vps costs money and cf is free.