Pular para o conteúdo principal

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.

aviso

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:

  1. Usar um provedor DNS (ex.: Cloudflare, Google Cloud, etc.)
  2. 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 @.

informação

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.

informação

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)

static

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.

docker-compose.yml
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.

aviso

Por favor, substitua REPLACE_WITH_YOUR_EMAIL pelo seu e-mail.

Revise a configuração abaixo, procure pelas linhas destacadas em amarelo.

traefik.yml
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.

aviso

Por favor, substitua REPLACE_WITH_YOUR_DOMAIN pelo seu nome de domínio.

Revise a configuração abaixo, procure pelas linhas destacadas em amarelo.

remnawave.yml
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.

aviso

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.

informação

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.

ip_allow_list.yml
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.

remnawave.yml
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:

remnawave.yml
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.

login-page

Solução de Problemas