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!

  • 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
      1
      ·
      1 year ago

      I have not converted my home network to use split-brain yet and that’s because I only just recently got Let’s Encrypt to work with the DNS-01 challenge which verifies domain ownership via a TXT record. Now that the DNS-01 challenge works perfectly, I can use split-brain DNS to resolve my example.com requests to internal IP addresses. What I am currently doing is as follows and it is inefficient and ugly!

      Local request ---> Internet --> VPS Proxy --> WireGuard tunnel --> Local Server --> WireGuard tunnel -> VPS Proxy -> Internet --> Local origin

      Now that I have Let’s Encrypt working using the DNS-01 challenge, there will be significantly less latency. It should look something like this:

      Local request --> Local DNS Server --> Local Server --> Local request
                                               |
                                               --> Local Server --> WireGuard Tunnel --> Internet
      

      I hope this is helpful! This will reduce the amount of locally generated traffic that must transit the VPN tunnel bi-directionally.

    • Meow.tar.gz@lemmy.goblackcat.com
      link
      fedilink
      arrow-up
      1
      ·
      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
        2
        ·
        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

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

              Sure! Let me know how it goes. If you need to do something more complex for internal DNS records for more than just A records, then look at the unbound.conf man page for stub zones. If you need something even more flexible than stub zones, you can use Unbound as a full authoritative DNS server with auth-zones. As far as I know auth-zones can even do zone transfers AXFR style which is cool!

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

                That’s becoming interesting once I’m setting up a slaves for failover & local proximity ^^ looking forward to deep diving into it