//

Computadores

FreeBSD Cloudflared rc.d script

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:

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.

Copyright © Celso Ferrarini Junior | [email protected]   |   English Português