Saltar al contenido principal

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.

aviso

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:

  1. Usar un proveedor de DNS (p. ej. Cloudflare, Google Cloud, etc.)
  2. 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 @.

info

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.

info

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)

static

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.

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

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.

aviso

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.

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"

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.

aviso

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.

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

aviso

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.

info

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.

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

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.

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 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:

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

login-page

Solución de problemas