Установка Traefik как Reverse-proxy для Remnwave

Предупреждение:

Для продолжения требуется зарегистрированное доменное имя.

Настройка домена для вашего сервера

Проверьте IP-адрес вашего сервера. Рекомендуется использовать статический IPv4-адрес.

Теперь необходимо направить доменное имя на этот IP-адрес.
Пример: my-super-panel.com193.122.122.122.

Есть два способа это сделать:

  1. Использовать DNS-провайдера (например, Cloudflare, Google Cloud и т.д.).
  2. Использовать регистратора домена (например, Namecheap и т.д.).

DNS-провайдер

Если вы используете Cloudflare, добавьте запись A/AAAA (для IPv4 и IPv6 соответственно) в DNS-записи.

Войдите в ваш аккаунт Cloudflare здесь и выберите нужный домен.

В меню слева выберите DNS, затем Records. Нажмите Create record.
Установите Type в A, а Name в @.

Информация:

Для использования поддоменов укажите имя поддомена (например, panel) в поле Name.

Введите IP-адрес сервера в поле IPv4 address и нажмите Save.

Дождитесь обновления DNS-записей.

Информация:

В панели Cloudflare жёлтое облако означает, что домен проксируется через Cloudflare, а серое — что проксирование отключено. Если Cloudflare работает стабильно в вашем регионе, рекомендуется включить проксирование (жёлтое облако).


У других DNS-провайдеров интерфейс может отличаться, но процесс аналогичен.

Обзор

В этом руководстве мы будем использовать Traefik как обратный прокси для доступа к панели Remnawave. Мы настроим доменное имя для сервера и конфигурацию Traefik. Traefik автоматически выпустит SSL-сертификаты.

Заметка:

Убедитесь, что ваш домен направлен на IP-адрес сервера.

Настройка Traefik

Создание docker-compose.yml

Создайте файл docker-compose.yml в директории /opt/remnawave/traefik.

mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano 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: false

Создание статического файла конфигурации

Создайте файл traefik.yml в директории /opt/remnawave/traefik.

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

Вставьте следующую конфигурацию:

Предупреждение:

Замените REPLACE_WITH_YOUR_EMAIL на ваш email.

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"

Создание динамического файла конфигурации

Создайте файл remnawave.yml в директории /opt/remnawave/traefik/config.

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

Вставьте следующую конфигурацию:

Предупреждение:

Замените REPLACE_WITH_YOUR_DOMAIN на ваше доменное имя.

http:
  routers:
    remnawave:
      rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
      entrypoints:
        - http
      middlewares:
        - remnawave-https-redirect
      service: remnawave
    remnawave-secure:
      rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
      entrypoints:
        - https
      middlewares:
      tls:
        certResolver: letsencrypt
      service: remnawave
  middlewares:
    remnawave-https-redirect:
      redirectScheme:
        scheme: https
  services:
    remnawave:
      loadBalancer:
        servers:
          - url: "http://remnawave:3000"

Запуск контейнера

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

Ограничение доступа к панели по IP

Чтобы ограничить доступ к панели по IP, создайте файл middleware ip_allow_list.yml.

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

Вставьте следующую конфигурацию:

Предупреждение:

Замените REPLACE_WITH_YOUR_IP на разрешенный IP-адрес (или диапазон IP в нотации CIDR).

Информация:

Если ваш домен проксируется через Cloudflare, укажите диапазоны IP Cloudflare в списке excludedIPs. Регулярно проверяйте актуальные диапазоны на официальной странице Cloudflare.

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

Затем добавьте middleware ip-allow-list в файл remnawave.yml.

nano remnawave.yml

Добавьте следующую строку в конфигурацию:

http:
    routers:
        remnawave:
            rule: 'Host(`REPLACE_WITH_YOUR_DOMAIN`)'
            entrypoints:
                - http
            middlewares:
                - remnawave-https-redirect
            service: remnawave
        remnawave-secure:
            rule: 'Host(`REPLACE_WITH_YOUR_DOMAIN`)'
            entrypoints:
                - https
            middlewares:
                - ip-allow-list
            tls:
                certResolver: letsencrypt
            service: remnawave
    middlewares:
        remnawave-https-redirect:
            redirectScheme:
                scheme: https
    services:
        remnawave:
            loadBalancer:
                servers:
                    - url: 'http://remnawave:3000'

Обеспечение публичного доступа к пути подписки

Для корректной работы системы подписок путь /api/sub/ должен быть публично доступен, но остальная часть панели должна оставаться защищенной ограничениями по IP.

Для этого создайте два отдельных маршрутизатора для одного домена: один для /api/sub/ (открытый доступ) и один для остальной части (с ограничением по IP).

Откройте файл remnawave.yml снова:

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

Обновите конфигурацию маршрутизатора следующим образом:

http:
  routers:
    remnawave-sub:
      rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`) && PathPrefix(`/api/sub/`)"
      entrypoints:
        - https
      service: remnawave
      tls:
        certResolver: letsencrypt
    remnawave-secure:
      rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
      entrypoints:
        - https
      middlewares:
        - ip-allow-list
      service: remnawave
      tls:
        certResolver: letsencrypt
  middlewares:
    remnawave-https-redirect:
      redirectScheme:
        scheme: https
  services:
    remnawave:
      loadBalancer:
        servers:
          - url: "http://remnawave:3000"

Эта конфигурация делает путь /api/sub/ публично доступным, а остальную часть панели защищает ограничением по IP.

Успех:

Теперь вы можете открыть страницу входа в панель Remnawave через ваш домен.

1 лайк