Acessando múltiplos hosts e portas simultaneamente via Cloudflare Access no cliente (Windows e Linux)

Quando se trabalha com Cloudflare Access no cliente, é comum precisar acessar vários serviços (SSH, RDP, HTTP) simultaneamente. É importante entender que, no cliente:

  • Não existe credentials-file. O cliente apenas ingressa nos túneis já existentes no Cloudflare.
  • Não é possível usar YAML com múltiplos ingress, pois o cliente não mantém túnel persistente. Cada host/porta precisa ser acessado via comando separado.

Problema

Rodar múltiplos comandos cloudflared access ssh ou rdp de forma sequencial faz com que cada processo espere o anterior subir, impossibilitando o acesso simultâneo.

Solução

A solução é criar um script que inicie múltiplos processos em paralelo, um para cada host/porta.

Windows (Powershell)

$hosts = @(
    @{type="ssh"; hostname="ssh1.cliete.com.br"; url="ssh://localhost:2222"},
    @{type="ssh"; hostname="ssh2.cliete.com.br"; url="ssh://localhost:2223"},
    @{type="rdp"; hostname="rdp.cliete.com.br"; url="rdp://localhost:3389"},
    @{type="http"; hostname="painel.cliete.com.br"; url="http://localhost:8080"}
)

foreach ($h in $hosts) {
    Start-Process cloudflared -ArgumentList "access $($h.type) --hostname $($h.hostname) --url $($h.url)"
}

Linux (Bash)

#!/bin/bash

hosts=(
  "ssh:ssh1.cliete.com.br:ssh://localhost:2222"
  "ssh:ssh2.cliete.com.br:ssh://localhost:2223"
  "rdp:rdp.cliete.com.br:rdp://localhost:3389"
  "http:painel.cliete.com.br:http://localhost:8080"
)

for h in "${hosts[@]}"; do
  IFS=':' read type hostname url <<< "$h"
  cloudflared access $type --hostname $hostname --url $url &
done

wait

Como funciona

  • Cada comando é iniciado em processo independente, permitindo múltiplas conexões ao mesmo tempo.
  • O array de hosts organiza os serviços e portas, permitindo escalabilidade fácil.
  • Você pode adicionar quantos hosts forem necessários, ajustando apenas o array.

Considerações

  • Esse método é específico para o cliente, que apenas consome túneis já existentes.
  • O YAML com tunnel: e credentials-file: não se aplica no cliente, apenas no servidor/origin que mantém o túnel.
  • Para ambientes com dezenas de hosts, o script garante que todos fiquem ativos sem travar.
Rolar para cima