Traefik
Descripción general
En esta guía usaremos Traefik como proxy inverso para acceder al panel Remnawave. Apuntaremos un nombre de dominio a nuestro servidor y configuraremos Traefik. Traefik se encargará de emitir los certificados SSL por sí solo.
Necesitas tener un nombre de dominio registrado para continuar.
Apuntar el dominio a tu servidor
Comprueba la dirección IP de tu servidor. Es mejor usar una dirección IPv4 estática.
Ahora, necesitas apuntar tu nombre de dominio a esta dirección IP.
Por ejemplo, sería my-super-panel.com -> 193.122.122.122.
Hay dos formas de hacerlo:
- Usar un proveedor de DNS (p. ej. Cloudflare, Google Cloud, etc.)
- Usar un registrador (p. ej. Namecheap, etc.)
Proveedor DNS
Si usas Cloudflare, necesitas agregar un registro A/AAAA (para IPv4 e IPv6 respectivamente) a tus registros DNS.
Inicia sesión en tu cuenta de Cloudflare aquí y selecciona el dominio deseado.
En el lado izquierdo de la página, haz clic en DNS y luego en Records. Haz clic en Create record.
Establece el Type en A y el Name en @.
Si quieres usar subdominios, debes ingresar el nombre del subdominio (p. ej. panel) en el campo Name.
Ingresa la dirección IP de tu servidor en el campo IPv4 address y haz clic en Save.
Ahora debes esperar un momento para que se actualicen los registros DNS.
Hay una gran diferencia entre la nube amarilla (el dominio está siendo procesado por Cloudflare) y la nube gris (el dominio no está siendo procesado por Cloudflare) en el panel de control de Cloudflare.
Si Cloudflare funciona bien en tu región, es mejor procesar el dominio a través de Cloudflare. (Nube amarilla)

Algunos proveedores de DNS tienen una interfaz diferente, pero el proceso general es el mismo.
Configuración de Traefik
Crear docker-compose.yml
Cree un archivo docker-compose.yml en el directorio /opt/remnawave/traefik.
mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano docker-compose.yml
Pegue la siguiente configuración.
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
Crear archivo de configuración estática
Cree un archivo de configuración estática llamado traefik.yml en el directorio /opt/remnawave/traefik.
cd /opt/remnawave/traefik && nano traefik.yml
Pegue la siguiente configuración.
Por favor, reemplace REPLACE_WITH_YOUR_EMAIL con su correo electrónico.
Revise la configuración a continuación, busque las líneas resaltadas en amarillo.
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"
Crear archivo de configuración dinámica
Cree un archivo llamado remnawave.yml en el directorio /opt/remnawave/traefik/config.
mkdir -p /opt/remnawave/traefik/config && cd /opt/remnawave/traefik/config && nano remnawave.yml
Pegue la siguiente configuración.
Por favor, reemplace REPLACE_WITH_YOUR_DOMAIN con su nombre de dominio.
Revise la configuración a continuación, busque las líneas resaltadas en amarillo.
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 el contenedor
docker compose up -d && docker compose logs -f -t
Restringir acceso al panel por IP
Si desea restringir el acceso al panel por IP, puede crear un archivo middleware llamado ip_allow_list.yml.
cd /opt/remnawave/traefik/config && nano ip_allow_list.yml
Pegue la siguiente configuración.
Por favor, reemplace REPLACE_WITH_YOUR_IP con su dirección IP permitida (o rangos de IPs usando notación CIDR).
Revise la configuración a continuación, busque las líneas resaltadas en amarillo.
Si su nombre de dominio está proxied por Cloudflare, deberá especificar los rangos de IP de Cloudflare en la lista excludedIPs.
Cloudflare actualiza regularmente sus rangos de IP, por lo que es buena práctica usar la página oficial de Cloudflare para tener una lista actualizada.
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
Luego necesita agregar el middleware ip-allow-list al archivo de configuración remnawave.yml.
nano remnawave.yml
Preste atención a la línea verde que debe agregar.
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 acceso público a la ruta de suscripción
Para que el sistema de suscripciones funcione correctamente, la ruta /api/sub/ debe ser públicamente accesible.
Al mismo tiempo, el resto del panel debe permanecer protegido por restricciones basadas en IP.
Para lograr esto, necesita definir dos routers separados para el mismo dominio — uno para /api/sub/ (acceso abierto), y otro para todo lo demás (restringido).
Abra el archivo remnawave.yml nuevamente:
nano /opt/remnawave/traefik/config/remnawave.yml
Y actualice la configuración del router de la siguiente manera:
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 configuración hace que la ruta /api/sub/ sea públicamente accesible, mientras que el resto del panel permanece restringido por IP.
Abrir el panel en el navegador
Abre el nombre de dominio configurado en el navegador y verás la página de inicio de sesión.
