Instalei o FreeBSD 14.3 nesse servidor e o Cloudflare Argo Tunnel, mas o pacote padrão não funciona. Já atualizei para a última versão 2025.8.0 mas mesmo assim não funciona. Tive bastante dificuldade de fazer funcionar adequadamente, e estou tentando reportar para o Bugzilla, com o script correto. Aqui vai o processo completo, incluindo o script corrigido e funcionando do rc.d.
Depois de tudo instalado, faça um backup do diretorio /usr/local/etc/cloudflared/ e /usr/local/etc/rc.d/cloudflared Voce pode apenas copiar esses aruivos em putra instalação para funcionar sem ter que configurar tudo novamente e criar o tunel. Além disso do daemon do log tenta gravar o log em formato errado, no fim desse tutorial segue o procedimento para corrigir.
1. Instalar o cloudflared via pkg
O primeiro passo é instalar o cloudflared no FreeBSD. Use o pacote oficial disponível no repositório:
pkg install cloudflared
Após instalado, confirme executando:
cloudflared --version
2. Autenticar e gerar o arquivo cert.pem
Para que o cloudflared consiga criar túneis e acessar seu painel do Cloudflare, você precisa se autenticar:
cloudflared tunnel login
Isso abrirá uma URL no navegador, onde você autoriza sua conta. Após autorizado, o FreeBSD receberá automaticamente o arquivo:
/usr/local/etc/cloudflared/cert.pem
3. Criar um túnel e gerar o JSON de credenciais
Agora você cria o túnel. Substitua NOME_DO_TUNEL pelo nome que quiser:
cloudflared tunnel create NOME_DO_TUNEL
O comando retorna um Tunnel ID e salva o arquivo:
/usr/local/etc/cloudflared/<tunnel-id>.json
Guarde esse ID — ele será usado no config.yml.
4. Criar o arquivo config.yml
Com o Tunnel ID e o JSON prontos, crie o arquivo principal de configuração:
tunnel: (your_tunnel_id)
credentials-file: /usr/local/etc/cloudflared/(your_tunnel_id).json
protocol: quic # ou http2, ou auto
ingress:
- hostname: your_host.com
service: http://localhost:80
originRequest:
- service: http_status:404
Salve em:
/usr/local/etc/cloudflared/config.yml
5. Criar e instalar o script rc.d
A versão do FreeBSD geralmente vem com um rc.d quebrado. Use o script corrigido abaixo:
#!/bin/sh
# PROVIDE: cloudflared
# REQUIRE: NETWORKING
# BEFORE: LOGIN
. /etc/rc.subr
name="cloudflared"
rcvar="cloudflared_enable"
pidfile="/var/run/${name}.pid"
logfile="/var/log/${name}.log"
cloudflared_bin="/usr/local/bin/cloudflared"
cloudflared_conf="/usr/local/etc/cloudflared/config.yml"
load_rc_config $name
: ${cloudflared_enable:="NO"}
start_cmd="cloudflared_start"
stop_cmd="cloudflared_stop"
status_cmd="cloudflared_status"
cloudflared_start()
{
echo "Starting cloudflared..."
/usr/sbin/daemon \
-r \
-f \
-p ${pidfile} \
-o ${logfile} \
${cloudflared_bin} --config ${cloudflared_conf} tunnel run
}
cloudflared_stop()
{
echo "Stopping cloudflared..."
[ -f "${pidfile}" ] && kill -15 $(cat ${pidfile}) 2>/dev/null
rm -f ${pidfile}
}
cloudflared_status()
{
if [ -f "${pidfile}" ]; then
echo "cloudflared running (PID $(cat ${pidfile}))"
else
echo "cloudflared not running"
return 1
fi
}
run_rc_command "$1"
Salve como:
/usr/local/etc/rc.d/cloudflared
Torne-o executável:
chmod +x /usr/local/etc/rc.d/cloudflared
6. Habilitar o serviço no boot
Adicionar ao rc.conf:
sysrc cloudflared_enable=YES
Iniciar o serviço:
service cloudflared start
7. Testar o túnel e verificar logs
Verifique se o túnel conecta normalmente:
cloudflared tunnel info (tunnel_id)
Veja os logs:
tail -f /var/log/cloudflared.log
8. Configurar DNS no Cloudflare
Último passo: apontar seu hostname para o túnel.
No painel Cloudflare → DNS → Adicionar registro:
Tipo: CNAME
Nome: seu domínio
Destino: _your_tunnel_id.cfargotunnel.com
Pronto — túnel funcionando e persistente no FreeBSD.
RESUMO DOS ARQUIVOS IMPORTANTES
/usr/local/etc/cloudflared/cert.pem Certificado da conta Cloudflare (criado no login)
/usr/local/etc/cloudflared/TUNNEL_ID.json/ Credenciais do túnel
/usr/local/etc/cloudflared/config.yml/ Configuração principal
/usr/local/etc/rc.d/cloudflared/ Script de inicialização do FreeBSD
/var/log/cloudflared.log/ Logs do daemon
9. Corrigindo o log do cloudflared e configurando o newsyslog
Por padrão, o cloudflared usa o comando daemon para gravar logs em /var/log/cloudflared.log.
Após atualizações do FreeBSD ou do pacote cloudflared, esse arquivo pode desaparecer ou perder a configuração de rotação,
causando erros no newsyslog como colunas inválidas, formato incompatível ou impossibilidade de rotacionar o log.
Para garantir que o log funcione corretamente, siga estes passos:
9.1 Criar o arquivo de log (caso não exista)
touch /var/log/cloudflared.log chmod 640 /var/log/cloudflared.log chown root:wheel /var/log/cloudflared.log
Esses comandos criam o arquivo com as permissões apropriadas para que o daemon escreva sem problemas
e para que o newsyslog consiga rotacionar o arquivo.
9.2 Criar a configuração do newsyslog
Crie o arquivo:
/usr/local/etc/newsyslog.conf.d/cloudflared.conf
Com o seguinte conteúdo:
/var/log/cloudflared.log 640 7 1000 * JC
Descrição dos campos:
- 640 — permissões do novo arquivo após rotação
- 7 — manter até 7 arquivos antigos
- 1000 — rotacionar quando atingir 1000 KB
- * — não rotacionar baseado em tempo
- J — usar compactação bzip2
- C — criar novo arquivo após rotação
Esta regra impede problemas frequentes como “formato inválido”, “número errado de colunas” e falhas ao iniciar o daemon por causa de logs quebrados.
9.3 Testar a configuração do newsyslog
Para testar manualmente:
newsyslog -n
Esse comando apenas simula a rotação sem modificar arquivos.
Para aplicar de verdade:
newsyslog
9.4 Reiniciar syslog e o cloudflared
service syslogd restart service cloudflared restart
Depois disso, o sistema estará com o log do cloudflared funcional, rotacionando corretamente e sem erros de compatibilidade com o formato esperado pelo FreeBSD.