Traefik
Visão geral
Neste guia usaremos o Traefik como proxy reverso para acessar o painel Remnawave. Apontaremos um nome de domínio para o nosso servidor e configuraremos o Traefik. O Traefik cuidará da emissão dos certificados SSL por conta própria.
Você precisa ter um nome de domínio registrado para continuar.
Apontar domínio para o seu servidor
Verifique o endereço IP do seu servidor. É melhor usar um endereço IPv4 estático.
Agora, você precisa apontar seu nome de domínio para este endereço IP.
Por exemplo, será my-super-panel.com -> 193.122.122.122.
Há duas maneiras de fazer isso:
- Usar um provedor DNS (ex.: Cloudflare, Google Cloud, etc.)
- Usar um registrador (ex.: Namecheap, etc.)
Provedor DNS
Se você estiver usando o Cloudflare, precisará adicionar um registro A/AAAA (para IPv4 e IPv6, respectivamente) aos seus registros DNS.
Faça login na sua conta do Cloudflare aqui e selecione o domínio desejado.
No lado esquerdo da página, clique em DNS e depois em Records. Clique em Create record.
Defina o Type como A e o Name como @.
Se quiser usar subdomínios, você deve inserir o nome do subdomínio (ex.: panel) no campo Name.
Insira o endereço IP do seu servidor no campo IPv4 address e clique em Save.
Agora você precisa esperar um momento para que os registros DNS sejam atualizados.
Há uma grande diferença entre a nuvem amarela (domínio sendo proxiado pelo Cloudflare) e a nuvem cinza (domínio não sendo proxiado pelo Cloudflare) no painel de controle do Cloudflare.
Se o Cloudflare funcionar bem na sua região, é melhor fazer o proxy do domínio através do Cloudflare. (Nuvem amarela)

Alguns provedores DNS têm uma interface diferente, mas o processo geral é o mesmo.
Configuração do Traefik
Criar docker-compose.yml
Crie um arquivo docker-compose.yml no diretório /opt/remnawave/traefik.
mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano docker-compose.yml
Cole a seguinte configuração.
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- remnawave-network
ports:
- '0.0.0.0:80:80'
- '0.0.0.0:443:443'
environment:
- TZ=UTC
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
- ./config:/config:ro
- ./logs:/var/log/traefik
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true
Criar arquivo de configuração estática
Crie um arquivo de configuração estática chamado traefik.yml no diretório /opt/remnawave/traefik.
cd /opt/remnawave/traefik && nano traefik.yml
Cole a seguinte configuração.
Por favor, substitua REPLACE_WITH_YOUR_EMAIL pelo seu e-mail.
Revise a configuração abaixo, procure pelas linhas destacadas em amarelo.
api:
dashboard: true
debug: true
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
serversTransport:
insecureSkipVerify: true
providers:
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: REPLACE_WITH_YOUR_EMAIL
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: http
log:
level: "INFO"
filePath: "/var/log/traefik/traefik.log"
accessLog:
filePath: "/var/log/traefik/access.log"
Criar arquivo de configuração dinâmica
Crie um arquivo chamado remnawave.yml no diretório /opt/remnawave/traefik/config.
mkdir -p /opt/remnawave/traefik/config && cd /opt/remnawave/traefik/config && nano remnawave.yml
Cole a seguinte configuração.
Por favor, substitua REPLACE_WITH_YOUR_DOMAIN pelo seu nome de domínio.
Revise a configuração abaixo, procure pelas linhas destacadas em amarelo.
http:
routers:
remnawave:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
tls:
certResolver: letsencrypt
service: remnawave
middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https
services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"
Iniciar o contêiner
docker compose up -d && docker compose logs -f -t
Restringir acesso ao painel por IP
Se quiser restringir o acesso ao painel por IP, pode criar um arquivo middleware chamado ip_allow_list.yml.
cd /opt/remnawave/traefik/config && nano ip_allow_list.yml
Cole a seguinte configuração.
Por favor, substitua REPLACE_WITH_YOUR_IP pelo seu endereço IP permitido (ou faixas de IP usando notação CIDR).
Revise a configuração abaixo, procure pelas linhas destacadas em amarelo.
Se o seu nome de domínio for proxiado pelo Cloudflare, você precisa especificar os intervalos de IP do Cloudflare na lista excludedIPs.
O Cloudflare atualiza regularmente seus intervalos de IP, portanto é uma boa prática usar a página oficial do Cloudflare para garantir que você tenha uma lista atualizada.
http:
middlewares:
ip-allow-list:
ipAllowList:
sourceRange:
- "REPLACE_WITH_YOUR_IP"
ipStrategy:
excludedIPs:
- 73.245.48.0/20
- 103.21.244.0/22
- 103.22.200.0/22
- 103.31.4.0/22
- 141.101.64.0/18
- 108.162.192.0/18
- 190.93.240.0/20
- 188.114.96.0/20
- 197.234.240.0/22
- 198.41.128.0/17
- 162.158.0.0/15
- 104.16.0.0/13
- 104.24.0.0/14
- 172.64.0.0/13
- 131.0.72.0/22
Em seguida, você precisa adicionar o middleware ip-allow-list ao arquivo de configuração remnawave.yml.
nano remnawave.yml
Preste atenção à linha verde que você precisa adicionar.
http:
routers:
remnawave:
rule: 'Host(`REPLACE_WITH_YOUR_DOMAIN`)'
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
tls:
certResolver: letsencrypt
service: remnawave
middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https
services:
remnawave:
loadBalancer:
servers:
- url: 'http://remnawave:3000'
Permitir acesso público ao caminho de assinatura
Para que o sistema de assinaturas funcione corretamente, o caminho /api/sub/ deve ser publicamente acessível.
Ao mesmo tempo, o restante do painel deve permanecer protegido por restrições baseadas em IP.
Para isso, você precisa definir dois roteadores separados para o mesmo domínio — um para /api/sub/ (acesso aberto) e um para todo o resto (restrito).
Abra o arquivo remnawave.yml novamente:
nano /opt/remnawave/traefik/config/remnawave.yml
E atualize a configuração do roteador da seguinte forma:
http:
routers:
remnawave-sub:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`) && PathPrefix(`/api/sub/`)"
middlewares:
- remnawave-https-redirect
entrypoints:
- https
service: remnawave
tls:
certResolver: letsencrypt
remnawave-secure:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
service: remnawave
tls:
certResolver: letsencrypt
middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https
services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"
Esta configuração torna o caminho /api/sub/ publicamente acessível, enquanto o restante do painel permanece restrito por IP.
Abrir o painel no navegador
Abra o nome de domínio configurado no navegador e você verá a página de login.
