Traefik
Обзор
В этом руководстве мы будем использовать Traefik в качестве обратного прокси для доступа к панели Remnawave. Мы направим доменное имя на наш сервер и настроим Traefik. Traefik самостоятельно позаботится о выдаче SSL-сертификатов.
Для продолжения вам необходимо иметь зарегистрированное доменное имя.
Направьте домен на ваш сервер
Проверьте IP-адрес вашего сервера. Лучше использовать статический IPv4-адрес.
Теперь вам нужно направить ваше доменное имя на этот IP-адрес.
Например, это будет my-super-panel.com -> 193.122.122.122.
Есть два способа сделать это:
- Использовать DNS-провайдер (например, Cloudflare, Google Cloud и т.д.)
- Использовать регистратора (например, 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. (Жёлтое облако)

У некоторых DNS-провайдеров другой интерфейс, но общий процесс одинаков.
Настройка 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: true
Создание статического файла конфигурации
Создайте статический файл конфигурации с именем traefik.yml в директории /opt/remnawave/traefik.
cd /opt/remnawave/traefik && nano traefik.yml
Вставьте следующую конфигурацию.
Пожалуйста, замените REPLACE_WITH_YOUR_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:
- 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
Вставьте следующую конфигурацию.
Пожалуйста, замените REPLACE_WITH_YOUR_IP на разрешённый IP-адрес (или диапазоны разрешённых IP в нотации CIDR).
Просмотрите конфигурацию ниже, обратите внимание на строки, выделенные жёлтым.
Если ваше доменное имя проксируется через Cloudflare, необходимо указать диапазоны IP, принадлежащие Cloudflare, в списке excludedIPs.
Cloudflare регулярно обновляет свои диапазоны IP, поэтому рекомендуется использовать официальную страницу 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:
- 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
И обновите конфигурацию маршрутизатора следующим образом:
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.
Откройте панель в браузере
Откройте настроенное доменное имя в браузере, и вы увидите страницу входа.
