
O intuito desse post é permitir o acesso remoto a serviços hospedados em nossa rede privada, como servidores web, interfaces de aplicativos, etc., sem a necessidade de abrir portas no roteador ou configurar redirecionamentos de porta, ou mesmo quando seu provedor deixa você atrás de um CGNAT.
Com isso vamos utilizar o Cloudflare Tunnel para fazer a ponte com a internet.
O Problema
Como todos que trabalham na área da TI, sentimos sempre a necessidade de aprender coisas novas, sendo assim, resolvi expor o meu “micro homelab” (onde tenho alguns servidores com o zabbix, grafana etc), para fora de minha rede privada.
Mas ter acesso remoto fora de minha rede privada não foi possível, mesmo se eu quisesse configurar o roteador com redirecionamento de porta, pois o provedor que me disponibiliza a conexão com a internet fica atrás de um CGNAT.
Pensei em até criar um servidor em alguma cloud provider para configurar uma VPN, mas após algum tempo, pesquisando na grande rede, encontrei esse vídeo no YouTube que mostra como configurar um túnel com o Cloudflare Zero Trust.
O site do Cloudflare diz que o Cloudflare Zero Trust “protege o acesso de todos os usuários a todos os aplicativos, em qualquer dispositivo e em qualquer lugar. Protege o tráfego com acesso à Internet em sua rede”. Então vamos por isso em prática e fazer essa configuração seguindo as etapas abaixo.
1. Servidor com o Cloudflared
Devemos ter um servidor local para que possamos rodar o Cloudflared.
No meu caso, provisionei com o código de IaC do terraform uma VM no Proxmox com o Debian (cloud-init) que ao finalizar o provisionamento, iniciou um container Docker com a imagem da Cloudflared que foi declarado previamente em um “docker-compose.yml” no processo de criação da VM.
Caso queira ver e seguir esse projeto, veja no Github.
2. Registro de um domínio
Continuando, devemos ter um domínio para que possamos registrar nossas aplicações. Como não curti muito domínios gratuitos, nada contra, resolvi registrar um domínio no registro[.]br. Fica a escolha e necessidade de cada um.
3. Conta na Cloudfare
Já em posse do domínio, adicionaremos o mesmo ao Cloudflare, lembrando que devemos ter criado uma conta gratuita no Cloudflare. Não vou abordar essa etapa pois é só seguir os passos da criação, atentando que deverá cadastrar um cartão de crédito válido, porém a contra gratuita não cobrará nada, zero custo.
4. Adicionar seu domínio ao Cloudflare
- Acesse o Painel da Cloudflare (https://dash.cloudflare.com/).
- Clique em Adicionar um domínio e insira seu domínio.
- Escolha o plano gratuito.
- A Cloudflare fornecerá nameservers personalizados. Substitua os nameservers antigos do seu domínio por esses no painel do seu registrador, como no meu exemplo, registro.br.

5. Incluir os nameservers no seu registro.
- Acesse sua conta (exemplo regisro.br).
- Clique no domínio desejado e Alterar Servidores DNS.
- Use os valores informados pela Cloudflare.
- Aguarde a propagação (pode levar alguns minutos ou horas).


6. Criar o Tunnel no Cloudflare
- No painel da Cloudflare, acesse: Zero Trust > Redes > Tunnels.
- Clique em Criar um túnel.
- Dê um nome ao túnel.
- Escolha o Docker como método de instalação.
- Copie o código gerado com cloudflared tunnel run –token <token>
- “Armazene seu token com cuidado. Este comando inclui um token sensível que permite que o conector seja executado. Qualquer pessoa com acesso a este token conseguirá executar o túnel.”
- Exemplo do arquivo docker-compose.yml que adicionamos nas declarações para execução no terraform.
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run --token ${CLOUDFLARED_TOKEN}
environment:
- CLOUDFLARED_TOKEN=${CLOUDFLARED_TOKEN}
- No arquivo .env, insira o token.
CLOUDFLARED_TOKEN=<seu-token>
- O container subirá junto com o provisionamento do terraform, que foi declaro na execução.

7. Configurar os subdomínios
- No painel da Cloudflare Zero Trust no Túnnel criado, clique nos 3 pontinhos e em Configurar.
- Selecione a aba Nome do host público e Adicionar um nome do host público.
- Para cada serviço, exemplo Grafana, configure um subdomínio.
Subdomínio: grafana.xxxx.xxx.xx
Domínio: o domínio que você criou/adicionou.
Serviço: Escolha o tipo HTTP
URL: xxx.xx.x.xx:3000


8. Testar Acesso
- Use o navegador externo (4G ou rede diferente) e acesse sua aplicação, por exemplo “https://grafana.xxxx.xxx.xx”.
- Se não funcionar, verifique firewall/iptables da VM e libere a porta do serviço se necessário, no exemplo do Grafana.
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
- Verifique também a configuração da aplicação, no exemplo Grafana, deixe os parâmetros do arquivo grafana.ini como abaixo:
[server]
protocol = http
http_addr = 0.0.0.0
http_port = 3000
domain = grafana.xxxx.xxx.xx
[auth.anonymous]
enabled = false
- Salve, feche o arquivo e reinicie o serviço.
sudo systemctl restart grafana-server.service
- No navegador externo, teste novamente.

9. Segurança Avançada
Use Zero Trust > Cloudflare Access para autenticar antes de acessar subdomínios.
- Adicione uma politica e salve, exemplo:
Nome da política: Access *.xxxx.xxx.xx
Ação: Allow
Duração da seção: 30 minutos
- Adicione regras.
Seletor: Emails
Valor: seuemail@exemplo.com


Conclusão
Com essas etapas, já conseguimos acessar nossos serviços internos com domínio personalizado, com criptografia via Cloudflare, sem exposição direta à internet e com a segurança de autenticação adicional pelas políticas do Access.
É isso, espero que ajude, até a próxima!!!