Neste tutorial, vamos mostrar como expor serviços do seu homelab rodando em OpenMediaVault (OMV) de forma segura, sem abrir portas no roteador, usando o Cloudflare Tunnel e o Nginx Proxy Manager (NPM). Ao final, você poderá acessar seus serviços internos (OMV, Jellyfin, qBittorrent, WeTTY, etc.) via HTTPS válido, protegidos pelo Cloudflare.
Por que utilizar?
- Sem exposição direta: evita abrir portas no seu roteador ou firewall.
- TLS de ponta a ponta: HTTPS garantido pelo Cloudflare e Let’s Encrypt.
- Gerenciamento unificado: todos os serviços passam por um único proxy (NPM).
- Políticas de segurança: WAF, DDoS, autenticação Cloudflare Access.
Como configurar
1. Ambiente base
- Servidor: OMV 6 instalado em Debian 11.
- Rede local: 192.168.1.100 é o IP do OMV.
- OMV Extras: plugin instalado para suporte a Docker.
2. Docker Compose no OMV
Crie em /srv/docker/nginx-proxy-manager/docker-compose.yml
:
version: '3'
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81"
environment:
DB_MYSQL_HOST: db
DB_MYSQL_USER: npm
DB_MYSQL_PASSWORD: P4ssw0rd123
DB_MYSQL_NAME: npm
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: jc21/mariadb-aria:latest
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootP4ss
MYSQL_DATABASE: npm
MYSQL_USER: npm
MYSQL_PASSWORD: P4ssw0rd123
volumes:
- ./mysql:/var/lib/mysql
Suba com:
docker-compose up -d
3. Criar API Token no Cloudflare
- Acesse https://dash.cloudflare.com → Perfil → Tokens de API.
- Clique em Create Token → Use template: Edit DNS.
- Zone Resources → specific zone → selecione
seudominio.com
. - Permissions → Zone:DNS:Edit.
- Gere e copie o API Token.
4. Instalar o Cloudflare Tunnel no OMV
# Adicionar repositório
echo 'deb [signed-by=/usr/share/keyrings/cloudflare.gpg] https://pkg.cloudflare.com/cloudflared any main' \
| tee /etc/apt/sources.list.d/cloudflared.list
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | tee /usr/share/keyrings/cloudflare.gpg
# Instalar
apt update && apt install cloudflared
5. Criar o túnel via terminal
# Autenticar no Cloudflare (abre o browser)
cloudflared tunnel login
# Criar o túnel homelab\ ncloudflared tunnel create homelab
Anote o ID (ex: ebf3fcbd-...
).
6. Criar o arquivo config.yml
Em /etc/cloudflared/config.yml
:
tunnel: homelab
credentials-file: /root/.cloudflared/ebf3fcbd-f15c-46be-a38f-fc4dce3b5c36.json
ingress:
- hostname: omv.seudominio.com
service: http://127.0.0.1:80
- hostname: jellyfin.seudominio.com
service: http://127.0.0.1:8096
- hostname: qbittorrent.seudominio.com
service: http://127.0.0.1:8080
- hostname: wetty.seudominio.com
service: http://127.0.0.1:2222
- service: http_status:404
7. Criar o serviço systemd
# /etc/systemd/system/cloudflared.service
[Unit]
Description=Cloudflare Tunnel
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/cloudflared --config /etc/cloudflared/config.yml tunnel run
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
enable --now cloudflared
8. Criar registros DNS automáticos
Para cada subdomínio, rode:
cloudflared tunnel route dns homelab omv.seudominio.com
cloudflared tunnel route dns homelab jellyfin.seudominio.com
cloudflared tunnel route dns homelab qbittorrent.seudominio.com
cloudflared tunnel route dns homelab wetty.seudominio.com
9. Criar Proxy Host no NPM
Para cada serviço:
- Acesse
http://192.168.1.100:81
. - Proxy Hosts → Add Proxy Host.
- Domain Names: ex.
wetty.seudominio.com
. - Scheme: http, Host/IP:
192.168.1.100
, Port:2222
. - SSL: Request new Let’s Encrypt cert, marque Use DNS Challenge, escolha Cloudflare, cole o API Token.
- Salve.
Conclusão
Seguindo esses passos, você expõe qualquer serviço do seu OMV de forma segura, sem abrir portas, com HTTPS válido e gerenciado automaticamente. Você ganha simplicidade e segurança para seu homelab!