Dica:

Otimizando Banda Larga com Redundância e Alta Disponibilidade

Considerando uma banda larga de 100,00 reais, é possível elevar essa solução a outro nível, gastando mais R$ 50 (cancelando o IP fixo), e obter redundância, alta disponibilidade e sem a necessidade de redirecionamento de portas.

Requisitos

  • Duas conexões de fibra de banda larga ao cusrto de 100,00 cada.
  • Servidor Ubuntu rodando Docker.
  • Uso do Cloudflare Tunnel (com suporte a IPv6).

Configuração com Docker e Cloudflare Tunnel

Supondo que você tenha duas fibras e um servidor Ubuntu com Docker, o Cloudflare Tunnel pode rodar em duas instâncias (cada container conectado a uma faixa de rede diferente de cada ISP) mas ao mesmo tempo conectado à rede do seu app dentro do docker.

Se a sua aplicação (como Nginx, Apache, PHP, Node, .NET, etc) estiver rodando em um container escutando qualquer porta HTTP, a configuração do Cloudflare Tunnel no painel de controle seria simples:

Protocolo: http Host: nomedoseucontainer ou nomedoseucontainer:porta se a porta for diferente de 80

O legal é que próprio tunnel avaliará os conectores ativos (instancias do tunnel) e fará o trabalho de distribuir as conexões de forma semelhante a um sistema de fail-over. Mas é possivel criar um Load Balance baseado em regras usando o painel da cloudflare, mas na prática eu acho desnecessário.

Terminação HTTPS Simplificada

Como o HTTPS é terminado na borda do Cloudflare, não há necessidade de configurar um Nginx para proxy reverso HTTPS, no seu app e nem de usar o Certbot. Isso simplifica a configuração e reduz o overhead no servidor, afinal a comunicação entre containers é segura por sí só.

Split DNS para Acessos da rede interna

O legal é que seu site é protegido pela cloudflare mesmo em acessos internos, neste caso pode ser que você prefera que o tráfego da rede interna não saia para a borda para depois voltar, e deseja acessar seu domínio via HTTPS diretamente na rede interna, será necessário:

  1. Configurar um Split DNS que resolva o domínio para o IP do Docker.
  2. Utilizar o Certbot-Cloudflare para gerar certificados Let's Encrypt e instalá-los em um container Nginx, que fará a terminação HTTPS internamente e direcionará a conexão ao seu app.

Com essa configuração, você garante segurança e redundância na sua infraestrutura sem complicações adicionais.

Exemplo de uma aplicação dotnet com 1 ISP

Abaixo um exemplo de docker compose usado em um portainer, para ficar simples, não estou cobrindo a parte da rede, mas basicamente você precisa de dois containers "cloudlfared" usando o mesmo token com suas redes ajustadas para conectar a ISPs de forma independente e ter reduncância.

A aplicação é um sistema feito em blazor com banco de dados sql server, e o tunnel (cloudflared) expôe ele em um host. é interessante notar que a aplicação e o banco de dados estão em uma rede docker sem acesso a internet, ou à rede local, assim em teoria se eles fossem comprometidos não teria acesso a nenhum recurso de rede.

version: '3.4'

services:
  mssql-server:
    image: mcr.microsoft.com/mssql/server
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "********"
      MSSQL_PID: Express
      restart: always
    volumes:
      - /opt/anmtp/mssqldata:/var/opt/mssql/data

  App:
    depends_on:
      - mssql-server
    environment:
      ConnectionStrings__DefaultConnection: "Server=mssql-server;Initial Catalog=Appdb;User ID=SA;Password=*******;TrustServerCertificate=true;"
    image: myapp:latest
   # ou poderia dar o buid se nao tiver a imagem
   # build:
   #   context: /opt/
   #   dockerfile: myapp/Dockerfile
    restart: always
    volumes:
      - /opt/anmtp/appdata:/app/Data
  cloudflared:
    depends_on:
      - App
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel --no-autoupdate run
    container_name: myapp-cloudflared
    environment:
      TZ: "America/Sao_Paulo"
      TUNNEL_TOKEN: "*********"

O legal é que para configurar o tunnel você so precisa de um token, e o resto da configuração é feita totalmente no painel da cloudflare, então você pode trocar o host ou apontar varios hosts diferente, criar regras, etc. E de brinde ganha proteção contra DDOS mantendo sua rede sem portas abertas.