Aller au contenu principal

Traefik

Vue d'ensemble

Dans ce guide, nous utiliserons Traefik comme proxy inverse pour accéder au panneau Remnawave. Nous pointerons un nom de domaine vers notre serveur et configurerons Traefik. Traefik s'occupera lui-même de l'émission des certificats SSL.

attention

Vous devez avoir un nom de domaine enregistré pour continuer.

Pointer le domaine vers votre serveur

Vérifiez l'adresse IP de votre serveur. Il est préférable d'utiliser une adresse IPv4 statique.

Maintenant, vous devez pointer votre nom de domaine vers cette adresse IP.

Par exemple, ce sera my-super-panel.com -> 193.122.122.122.

Il y a deux façons de le faire :

  1. Utiliser un fournisseur DNS (ex. Cloudflare, Google Cloud, etc.)
  2. Utiliser un registraire (ex. Namecheap, etc.)

Fournisseur DNS

Si vous utilisez Cloudflare, vous devez ajouter un enregistrement A/AAAA (pour IPv4 et IPv6 respectivement) à vos enregistrements DNS.

Connectez-vous à votre compte Cloudflare ici et sélectionnez le domaine souhaité.

Sur le côté gauche de la page, cliquez sur DNS puis sur Records. Cliquez sur Create record.
Définissez le Type sur A et le Name sur @.

info

Si vous souhaitez utiliser des sous-domaines, vous devez entrer le nom du sous-domaine (ex. panel) dans le champ Name.

Entrez l'adresse IP de votre serveur dans le champ IPv4 address et cliquez sur Save.

Maintenant, vous devez attendre un moment pour que les enregistrements DNS se mettent à jour.

info

Il y a une grande différence entre le nuage jaune (le domaine est proxifié par Cloudflare) et le nuage gris (le domaine n'est pas proxifié par Cloudflare) dans le panneau de contrôle Cloudflare.

Si Cloudflare fonctionne bien dans votre région, il est préférable de proxifier le domaine via Cloudflare. (Nuage jaune)

static

Certains fournisseurs DNS ont une interface différente, mais le processus global est le même.

Configuration de Traefik

Créer docker-compose.yml

Créez un fichier docker-compose.yml dans le répertoire /opt/remnawave/traefik.

mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano docker-compose.yml

Collez la configuration suivante.

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

Créer le fichier de configuration statique

Créez un fichier de configuration statique appelé traefik.yml dans le répertoire /opt/remnawave/traefik.

cd /opt/remnawave/traefik && nano traefik.yml

Collez la configuration suivante.

attention

Veuillez remplacer REPLACE_WITH_YOUR_EMAIL par votre adresse e-mail.

Consultez la configuration ci-dessous, recherchez les lignes surlignées en jaune.

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"

Créer le fichier de configuration dynamique

Créez un fichier appelé remnawave.yml dans le répertoire /opt/remnawave/traefik/config.

mkdir -p /opt/remnawave/traefik/config && cd /opt/remnawave/traefik/config && nano remnawave.yml

Collez la configuration suivante.

attention

Veuillez remplacer REPLACE_WITH_YOUR_DOMAIN par votre nom de domaine.

Consultez la configuration ci-dessous, recherchez les lignes surlignées en jaune.

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"

Démarrer le conteneur

docker compose up -d && docker compose logs -f -t

Restreindre l'accès au panneau par IP

Si vous souhaitez restreindre l'accès au panneau par IP, vous pouvez créer un fichier middleware nommé ip_allow_list.yml.

cd /opt/remnawave/traefik/config && nano ip_allow_list.yml

Collez la configuration suivante.

attention

Veuillez remplacer REPLACE_WITH_YOUR_IP par votre adresse IP autorisée (ou plages d'IP en notation CIDR).

Consultez la configuration ci-dessous, recherchez les lignes surlignées en jaune.

info

Si votre nom de domaine est proxié par Cloudflare, vous devez spécifier les plages IP de Cloudflare dans la liste excludedIPs.

Cloudflare met régulièrement à jour ses plages IP, il est donc recommandé d'utiliser la page officielle Cloudflare pour obtenir une liste à jour.

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

Vous devez ensuite ajouter le middleware ip-allow-list au fichier de configuration remnawave.yml.

nano remnawave.yml

Faites attention à la ligne verte qui est celle à ajouter.

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'

Permettre l'accès public au chemin d'abonnement

Pour que le système d'abonnement fonctionne correctement, le chemin /api/sub/ doit être publiquement accessible. En même temps, le reste du panneau doit rester protégé par des restrictions basées sur l'IP.

Pour ce faire, vous devez définir deux routeurs séparés pour le même domaine — un pour /api/sub/ (accès ouvert) et un pour tout le reste (restreint).

Ouvrez à nouveau le fichier remnawave.yml :

nano /opt/remnawave/traefik/config/remnawave.yml

Et mettez à jour la configuration du routeur comme suit :

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"

Cette configuration rend le chemin /api/sub/ publiquement accessible, tandis que le reste du panneau reste restreint par IP.

Ouvrir le panel dans le navigateur

Ouvrez le nom de domaine configuré dans le navigateur et vous verrez la page de connexion.

login-page

Dépannage