Перейти к основному содержимому

Traefik

Обзор

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

warning

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

Направьте домен на ваш сервер

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

Теперь вам нужно направить ваше доменное имя на этот IP-адрес.

Например, это будет my-super-panel.com -> 193.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.

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

static

У некоторых DNS-провайдеров другой интерфейс, но общий процесс одинаков.

Настройка Traefik

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

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

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

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

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

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

Создайте статический файл конфигурации с именем traefik.yml в директории /opt/remnawave/traefik.

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

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

warning

Пожалуйста, замените REPLACE_WITH_YOUR_EMAIL на ваш адрес электронной почты.

Просмотрите конфигурацию ниже, обратите внимание на строки, выделенные жёлтым.

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"

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

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

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

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

warning

Пожалуйста, замените REPLACE_WITH_YOUR_DOMAIN на ваше доменное имя.

Просмотрите конфигурацию ниже, обратите внимание на строки, выделенные жёлтым.

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"

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

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

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

warning

Пожалуйста, замените REPLACE_WITH_YOUR_IP на разрешённый IP-адрес (или диапазоны разрешённых IP в нотации CIDR).

Просмотрите конфигурацию ниже, обратите внимание на строки, выделенные жёлтым.

к сведению

Если ваше доменное имя проксируется через Cloudflare, необходимо указать диапазоны IP, принадлежащие Cloudflare, в списке excludedIPs.

Cloudflare регулярно обновляет свои диапазоны IP, поэтому рекомендуется использовать официальную страницу Cloudflare для получения актуального списка.

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

Затем нужно добавить middleware ip-allow-list в файл конфигурации remnawave.yml.

nano remnawave.yml

Обратите внимание на зелёную строку — её нужно добавить.

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'

Разрешение публичного доступа к пути подписки

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

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

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

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

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

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"

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

Откройте панель в браузере

Откройте настроенное доменное имя в браузере, и вы увидите страницу входа.

login-page

Устранение неполадок