Redes · VPN · Cloudflare Tunnel · Tailscale · WireGuard · 2026
Duarte Spínola · 7 de Julho de 2026
VPN Serverless Self-hosted: Configurar VPN sem Servidor Dedicado para PME
VPN · Serverless · Cloudflare Tunnel · Tailscale · WireGuard · Nebula · ZeroTier · Headscale | ✎ Duarte Spínola | 2026-07-07
A VPN tradicional exige um servidor dedicado com IP público, configuração de portas e manutenção contínua. Em 2026, surgiram alternativas serverless que eliminam esta necessidade — o túnel é estabelecido através de relay points geridos, sem servidor próprio. Este guia cobre Cloudflare Tunnel, Tailscale, Headscale, Nebula e ZeroTier, com base na documentação oficial Cloudflare, Tailscale KB e WireGuard. Para soluções VPN tradicionais, consulta o artigo sobre Azure VPN Gateway Site-to-Site.
Para uma PME com 50 colaboradores, Tailscale ou Cloudflare Tunnel são as opções mais simples — não requerem IP público, não expõem portas à Internet e funcionam através de NAT/CGNAT. Para quem prefere 100% self-hosted, Headscale (Tailscale auto-hospedado) ou Nebula são as alternativas.
Conteúdos
- 1. O Que é VPN Serverless e Porque Usar
- 2. Comparação das Soluções Disponíveis
- 3. Cloudflare Tunnel: Expor Serviços Sem IP Público
- 4. Tailscale: Mesh VPN com WireGuard
- 5. Headscale: Tailscale Self-hosted
- 6. Nebula: Mesh VPN da Slack/Nook
- 7. ZeroTier: SDN Overlay
- 8. WireGuard com Relays Dinâmicos
- 9. Instalar Tailscale (Linux + Windows)
- 10. Instalar Cloudflare Tunnel
- 11. Instalar Headscale (Self-hosted)
- 12. Segurança e ACLs
- 13. Cenário Prático PME (híbrido)
- 14. Checklist de Implementação
1. O Que é VPN Serverless e Porque Usar
VPN serverless é um modelo onde não precisas de um servidor dedicado com IP público para estabelecer túneis. Em vez disso, os clientes ligam-se a relay points geridos (Cloudflare, Tailscale der servers) que facilitam a ligação peer-to-peer. As vantagens são significativas para PME:
| VPN Tradicional | VPN Serverless |
|---|---|
| Requer IP público | Funciona através de NAT/CGNAT |
| Portas abertas na firewall | Sem portas expostas (saída apenas) |
| Configuração manual de certificados | Certificados geridos automaticamente |
| Largura de banda limitada pelo servidor | P2P directo (quando possível) — sem bottleneck |
| Difícil de escalar | Escalável para milhares de nodes |
2. Comparação das Soluções Disponíveis
Cada solução tem vantagens diferentes. A escolha depende de se preferes gerido (SaaS) ou self-hosted, e do tipo de acesso que precisas (LAN remota vs. expor serviços web). Para uma análise detalhada do Tailscale com DNS ad-blocking, consulta o artigo Tailscale DNS: Bloquear Anúncios na Rede Privada.
| Solução | Tipo | Self-hosted? | Plano Gratuito | Melhor para |
|---|---|---|---|---|
| Cloudflare Tunnel | Reverse proxy tunnel | Não (Cloudflare managed) | Sim (ilimitado) | Expor serviços web sem IP público |
| Tailscale | Mesh VPN (WireGuard) | Não (Headscale é self-hosted) | 100 devices | Acesso LAN remota simples |
| Headscale | Mesh VPN (Tailscale server) | Sim | Sim (self-hosted) | Tailscale sem dependência SaaS |
| Nebula | Mesh VPN (certificados) | Sim | Sim (open-source) | Grandes redes, controlo fino |
| ZeroTier | SDN overlay (L2) | Parcial | 25 devices | Acesso L2 (VLAN virtual) |
3. Cloudflare Tunnel: Expor Serviços Sem IP Público
O Cloudflare Tunnel (anteriormente Argo Tunnel) é a forma mais simples de expor serviços internos à Internet sem abrir portas. Um daemon cloudflared liga-se à rede Cloudflare e encaminha tráfego para serviços locais. O tráfego é protegido por Cloudflare Zero Trust com autenticação, políticas de acesso e WAF.
# Instalar cloudflared no Ubuntu/Debian
curl -L --output cloudflared.deb \
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# Autenticar com a conta Cloudflare
cloudflared tunnel login
# Criar túnel
cloudflared tunnel create pme-tunnel
# Configurar para expor serviço interno
cloudflared tunnel route dns pme-tunnel app.empresa.pt
# Correr túnel
cloudflared tunnel run --url http://localhost:8080 pme-tunnel
O Cloudflare Tunnel funciona através de CGNAT — não precisas de IP público. Isto é ideal para PME portuguesas com Digi ou MEO que não oferecem IP público nos planos básicos. Para mais detalhes sobre CGNAT, consulta o artigo sobre CGNAT: Como Verificar e Contornar.
4. Tailscale: Mesh VPN com WireGuard
O Tailscale é uma mesh VPN baseada em WireGuard que cria ligações P2P encriptadas entre todos os dispositivos da rede. O plano gratuito permite 100 devices e 3 utilizadores — suficiente para a maioria das PME. O Tailscale usa DERP servers (relay) quando P2P não é possível (NAT restritivo).
# Instalar Tailscale no Linux
curl -fsSL https://tailscale.com/install.sh | sh
# Arrancar e autenticar
sudo tailscale up
# Verificar estado
tailscale status
# Verificar IP Tailscale
tailscale ip -4
# Ligar a subnet local (exit node)
sudo tailscale up --advertise-exit-node --advertise-routes=192.168.1.0/24
# Aprovar routes no admin console:
# https://login.tailscale.com/admin/machines
5. Headscale: Tailscale Self-hosted
O Headscale é uma implementação open-source do coordination server do Tailscale. Permite ter toda a funcionalidade do Tailscale sem depender de servidores SaaS — ideal para PME com requisitos de soberania de dados ou que preferem auto-hospedar.
# Instalar Headscale com Docker
docker run -d --name headscale \
-v /etc/headscale:/etc/headscale \
-p 8080:8080 \
headscale/headscale:latest \
headscale serve
# Criar utilizador
docker exec headscale headscale users create duarte
# Gerar preauth key
docker exec headscale headscale preauthkeys create \
--user duarte --reusable --expiration 24h
# Cliente Tailscale a usar Headscale
tailscale up --login-server https://headscale.empresa.pt
O Headscale requer um servidor com IP público e TLS (Let’s Encrypt ou Cloudflare Tunnel). Se não tens IP público, podes usar o Cloudflare Tunnel para expor o Headscale — mas então estás a depender da Cloudflare. Avalia se vale a pena vs. Tailscale gerido.
6. Nebula: Mesh VPN da Slack/Nook
O Nebula é uma mesh VPN criada pela Slack, baseada em certificados (Não WireGuard). Suporta lighthouses (relay nodes), handshakes rápidos e roaming entre redes. É mais complexo de configurar que Tailscale, mas oferece controlo total.
# Instalar Nebula
wget https://github.com/slackhq/nebula/releases/latest/download/nebula-linux-amd64.tar.gz
tar xzf nebula-linux-amd64.tar.gz
sudo mv nebula nebula-cert /usr/local/bin/
# Gerar CA
nebula-cert ca -name "Empresa PME CA"
# Gerar certificado para lighthouse
nebula-cert sign -name "lighthouse" -ip "10.0.0.1/24" \
-groups "lighthouse,servers"
# Gerar certificado para cliente
nebula-cert sign -name "ws-duarte" -ip "10.0.0.50/24" \
-groups "clients"
# Correr lighthouse
nebula -config /etc/nebula/lighthouse.yaml
7. ZeroTier: SDN Overlay
O ZeroTier é uma SDN (Software Defined Network) que cria redes virtuais L2 sobre a Internet. Diferente das VPN tradicionais (L3), o ZeroTier permite que dispositivos em redes diferentes pareçam estar na mesma switch — útil para VLANs virtuais e protocolos que dependem de broadcast/multicast.
# Instalar ZeroTier
curl -s https://install.zerotier.com | sudo bash
# Juntar-se a uma rede
sudo zerotier-cli join
# Autorizar no portal: https://my.zerotier.com/
# Verificar estado
sudo zerotier-cli info
sudo zerotier-cli listnetworks
O ZeroTier tem a vantagem de operar em L2 — permite que dispositivos em redes diferentes partilhem o mesmo segmento de rede virtual, útil para protocolos como mDNS, Bonjour, ou aplicações legacy que dependem de broadcast. Para monitorização destas redes, consulta o artigo sobre Zabbix para PME.
# Verificar topologia ZeroTier
sudo zerotier-cli listpeers -j | python3 -c "
import json,sys
data=json.load(sys.stdin)
for p in data.get('peers',[]):
print(f\" {p['address']} | latency={p.get('latency',-1)}ms | version={p.get('version','?')}\")"
# Configurar managed routes via API
curl -X POST https://my.zerotier.com/api/network/{network_id} \
-H "Authorization: Bearer {token}" \
-d '{"config":{"routes":[{"target":"192.168.1.0/24","via":"10.0.0.1"}]}}'
8. WireGuard com Relays Dinâmicos
Para quem prefere WireGuard puro sem SaaS, é possível configurar relays dinâmicos usando WireGuard com DDNS ou um endpoint intermédio. Isto é mais trabalho mas dá controlo total. Para automação, consultar o artigo sobre Ansible para PME.
# /etc/wireguard/wg0.conf — servidor relay
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey =
# Cliente 1 (Duarte)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.2/32
# Cliente 2 (Maria)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.3/32
# Activar
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
9. Instalar Tailscale (Linux + Windows)
Instalação passo a passo do Tailscale em Linux (Ubuntu Server) e Windows 11.
# === LINUX (Ubuntu 24.04) ===
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh --advertise-routes=192.168.1.0/24
tailscale status
# === WINDOWS (PowerShell) ===
# winget install Tailscale.Tailscale
# Ou descarregar de https://tailscale.com/download/windows
# Após instalação, clicar no ícone Tailscale > Log in
# Autorizar em https://login.tailscale.com/
# Verificar conectividade
tailscale ping 100.x.x.x # IP Tailscale de outro node
10. Instalar Cloudflare Tunnel
# Instalar como serviço systemd
sudo cloudflared service install
# Configurar config.yaml
sudo tee /etc/cloudflared/config.yml << 'EOF'
tunnel: pme-tunnel
credentials-file: /root/.cloudflared/.json
ingress:
- hostname: app.empresa.pt
service: http://localhost:8080
- hostname: rdp.empresa.pt
service: rdp://localhost:3389
- hostname: ssh.empresa.pt
service: ssh://localhost:22
- service: http_status:404
EOF
# Reiniciar serviço
sudo systemctl restart cloudflared
sudo systemctl enable cloudflared
11. Instalar Headscale (Self-hosted)
# /etc/headscale/config.yaml
server_url: https://headscale.empresa.pt
listen_addr: 0.0.0.0:8080
ip_prefixes:
- 100.64.0.0/10
base_domain: ts.empresa.pt
# Docker Compose
version: '3'
services:
headscale:
image: headscale/headscale:latest
command: headscale serve
ports:
- "8080:8080"
volumes:
- ./config:/etc/headscale
- ./data:/var/lib/headscale
restart: unless-stopped
12. Segurança e ACLs
As ACLs (Access Control Lists) são essenciais para limitar o acesso entre nodes. No Tailscale, as ACLs são configuradas em JSON no admin console. Para uma abordagem Zero Trust, consulta o artigo Zero Trust para PME.
// ACL Tailscale — apenas TI acede a servidores
{
"groups": {
"group:ti": ["[email protected]", "[email protected]"],
"group:users": ["*"]
},
"acls": [
// TI: acesso total
{"action": "accept", "src": ["group:ti"], "dst": ["*:*"]},
// Users: apenas Internet (exit node) e DNS
{"action": "accept", "src": ["group:users"], "dst": ["tag:exit-node:*"]},
// Negar acesso a servidores
{"action": "deny", "src": ["group:users"], "dst": ["tag:servers:*"]}
],
"tagOwners": {
"tag:servers": ["group:ti"],
"tag:exit-node": ["group:ti"]
}
}
13. Cenário Prático PME (híbrido)
Cenário real: PME com 50 colaboradores, escritório em Lisboa (Digi CGNAT, sem IP público) e 2 colaboradores remotos (Porto e Coimbra). Requisitos: acesso a file server interno, RDP a estação de trabalho, e exposição de app web interna.
# Arquitetura:
# SRV-FS01 (file server, 192.168.1.10) — Tailscale + Cloudflare Tunnel
# WS-DESIGN01 (estação gráfica, 192.168.1.50) — Tailscale
# app.empresa.pt (app web interna) — Cloudflare Tunnel + Zero Trust
# 1. Tailscale no file server
sudo tailscale up --advertise-routes=192.168.1.0/24
# Aprovar no admin console
# 2. Cloudflare Tunnel para app web
cloudflared tunnel route dns pme-tunnel app.empresa.pt
cloudflared tunnel run --url http://192.168.1.20:8080 pme-tunnel
# 3. Colaborador remoto (Porto) liga via Tailscale
tailscale up
# Acede: \\192.168.1.10\share, RDP 192.168.1.50:3389
# 4. App web protegida com Cloudflare Zero Trust
# Dashboard > Access > Applications > Add Application
# - Domain: app.empresa.pt
# - Policy: email ends with @empresa.pt
# - Session duration: 12h
14. Checklist de Implementação
| Etapa | Ferramenta | Estado |
|---|---|---|
| Avaliar necessidade (LAN vs web) | — | ☐ |
| Criar conta Tailscale/Cloudflare | login.tailscale.com | ☐ |
| Instalar cliente nos servidores | tailscale / cloudflared | ☐ |
| Instalar cliente nos colaboradores | Tailscale app (Win/Mac/Mobile) | ☐ |
| Configurar ACLs | Admin console | ☐ |
| Testar conectividade | tailscale ping / curl | ☐ |
| Configurar exit node (opcional) | –advertise-exit-node | ☐ |
| Monitorizar (Grafana/Zabbix) | Ver Zabbix / Grafana | ☐ |
| Documentar procedimento | Ver Registar Tickets | ☐ |
Artigos Relacionados
- Azure VPN Gateway Site-to-Site — VPN tradicional em Azure
- Tailscale DNS: Bloquear Anúncios na Rede Privada
- Zero Trust para PME
- CGNAT: Como Verificar e Contornar
- Configurar Router Digi Portugal (CGNAT)
- Zabbix: Monitorização para PME
- Ansible: Automação de Configuração
VPN · Serverless · Cloudflare Tunnel · Tailscale · WireGuard · Nebula · ZeroTier · Headscale | ✎ Duarte Spínola | 2026-07-07
