Как настроить Cloudflare Tunnel для панели Remnawave VPN через Docker Compose?
Вы можете развернуть панель управления Remnawave VPN и страницу подписки с помощью Docker Compose за защищённым Cloudflare Tunnel. Этот подход исключает необходимость проброса портов, настройки nginx или ручного получения HTTPS — идеально подходит для продакшн-сред или домашних серверов без публичного IP.
Что такое Remnawave Panel?
Remnawave Panel — это современная система управления VPN и прокси на базе XRay, с акцентом на автоматизацию, гибкость и поддержку Telegram-бота. Включает:
- Удобную административную панель
- Telegram-бота для уведомлений
- Активную разработку и обновления
- PostgreSQL как основную базу данных
- Интеграции через OpenAPI 3.0
- Поддержку независимых нод (в отличие от Marzban)
- Эстетичную страницу подписки
Преимущества использования Cloudflare Tunnel для VPN через Docker
- Нет публичного IP? Не проблема.
- Не нужен проброс портов в роутере или фаерволе.
- Cloudflare предоставляет HTTPS, WAF, защиту от DDoS и ботов.
- Всё работает в контейнерах — без nginx, certbot и прочих лишних зависимостей.
С помощью Cloudflare Tunnel можно безопасно опубликовать локальные панели управления VPN, страницы подписки и любые другие Docker-приложения. Это особенно полезно при размещении самостоятельного VPN-сервиса без публичного IP или при желании скрыть сервер за HTTPS и WAF от Cloudflare.
В некоторых регионах (например, в России) доступ к Cloudflare может быть ограничен.
Как запустить VPN-панель без проброса портов
Настроим туннель для:
- Панели Remnawave (
remnawave:3000
) →https://panel.example.com
- Страницы подписки (
remnawave-subscription-page:3010
) →https://sub.example.com
Шаг 1. Создание туннеля
Устанавливаем cloudflared
на сервер:
curl -fsSL https://developers.cloudflare.com/cloudflare-one/static/downloads/cloudflared-install.sh | bash
Авторизуемся и создаём туннель:
cloudflared login
cloudflared tunnel create remnawave-tunnel
Шаг 2. Настройка DNS
Создаём маршруты для поддоменов:
cloudflared tunnel route dns remnawave-tunnel panel.example.com
cloudflared tunnel route dns remnawave-tunnel sub.example.com
Эта команда регистрирует поддомен panel.example.com в зоне Cloudflare и привязывает его к туннелю remnawave-tunnel.
Она не зависит от того, где у тебя лежит remnawave-tunnel.json
. Эта команда работает через твой авторизованный cloudflared
, и настройки идут напрямую в твой аккаунт Cloudflare через API.
Шаг 3. Структура проекта
После создания туннеля и настройки DNS-маршрутов, скопируйте JSON-файл из ~/.cloudflared/remnawave-tunnel.json
в каталог проекта /opt/remnawave/cloudflared/
.
/opt/remnawave/
├── docker-compose.yml
├── .env
└── cloudflared/
├── remnawave-tunnel.json
└── config.yml
Шаг 4. config.yml
— конфигурация туннеля
Файл config.yml определяет параметры работы туннеля Cloudflare. Вот пример с пояснениями:
tunnel: remnawave-tunnel # имя туннеля, которое вы задали при создании
credentials-file: /etc/cloudflared/remnawave-tunnel.json # путь к JSON-файлу авторизации
ingress:
- hostname: panel.example.com # поддомен, через который будет доступна панель
service: http://remnawave:3000 # локальный адрес панели внутри Docker-сети
- hostname: sub.example.com # поддомен для страницы подписки
service: http://remnawave-subscription-page:3010 # локальный адрес сервиса подписки
- service: http_status:404 # заглушка на все остальные неописанные маршруты
Обязательно укажите реальные поддомены, настроенные в зоне Cloudflare, и убедитесь, что контейнеры находятся в одной Docker-сети, иначе туннель не сможет их достичь.
Шаг 5. docker-compose.yml
Используем файл docker-compose.yml
из официального репозитория с добавлением сервиса страницы подписки:
services:
remnawave-db:
image: postgres:17
container_name: remnawave-db
hostname: remnawave-db
restart: always
env_file:
- .env
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
- TZ=UTC
ports:
- '127.0.0.1:6767:5432'
volumes:
- remnawave-db-data:/var/lib/postgresql/data
networks:
- remnawave-network
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
interval: 3s
timeout: 10s
retries: 3
remnawave:
image: remnawave/backend:latest
container_name: remnawave
hostname: remnawave
restart: always
ports:
- '127.0.0.1:3000:3000'
env_file:
- .env
networks:
- remnawave-network
depends_on:
remnawave-db:
condition: service_healthy
remnawave-redis:
condition: service_healthy
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- REMNAWAVE_PLAIN_DOMAIN=panel.com
- SUBSCRIPTION_PAGE_PORT=3010
- META_TITLE="Subscription Page Title"
- META_DESCRIPTION="Subscription Page Description"
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
remnawave-redis:
image: valkey/valkey:8.0.2-alpine
container_name: remnawave-redis
hostname: remnawave-redis
restart: always
networks:
- remnawave-network
volumes:
- remnawave-redis-data:/data
healthcheck:
test: ['CMD', 'valkey-cli', 'ping']
interval: 3s
timeout: 10s
retries: 3
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
command: tunnel --config /etc/cloudflared/config.yml run
volumes:
- ./cloudflared:/etc/cloudflared
networks:
- remnawave-network
networks:
remnawave-network:
name: remnawave-network
driver: bridge
volumes:
remnawave-db-data:
driver: local
name: remnawave-db-data
remnawave-redis-data:
driver: local
name: remnawave-redis-data
Полный запуск через Docker и Cloudflare Tunnel
docker compose up -d
Проверка:
https://panel.example.com
— откроется панель управленияhttps://sub.example.com
— откроется страница подписки
Полная установка Remnawave опущена — акцент на Cloudflare Tunnel.
Защита панели Remnawave через Cloudflare Access
Если вы хотите добавить дополнительный уровень авторизации для доступа к панели Remnawave или странице подписки, не прибегая к nginx или собственным механизмам аутентификации, используйте Cloudflare Access — компонент Cloudflare Zero Trust.
Что даёт Cloudflare Access:
- Доступ только для авторизованных пользователей (Google, GitHub, e-mail и т.д.)
- Многофакторная аутентификация
- Политики доступа по e-mail, IP-адресу, группе, стране и т.п.
- Журнал событий и попыток входа
- Работает до попадания запроса на ваш сервер
Как включить авторизацию через Cloudflare Access
-
Откройте панель Cloudflare Zero Trust:
https://one.cloudflare.com -
Перейдите в Access > Applications и нажмите + Add an application.
-
Выберите тип: Self-hosted.
-
Заполните поля:
- Application Name:
Remnawave Panel
- Subdomain:
panel.example.com
- Session duration: например, 8 часов
- Application Name:
-
Создайте политику доступа:
- Rule name:
Allow company users
- Include → Emails ending with
@example.com
(или любой другой фильтр)
- Rule name:
-
Сохраните и активируйте приложение.
Теперь любой запрос к https://panel.example.com
будет сначала проверяться Cloudflare — и только после прохождения авторизации перенаправляться в ваш туннель.
Важно: для работы Access необходимо, чтобы ваш домен использовал Cloudflare Nameservers и был активен в панели Cloudflare.
Доступ к панели VPN через HTTPS без открытых портов
Посетите мой форум Openode Club — десятки практических гайдов по настройке Remnawave, Cloudflare, Docker, Telegram-ботов, автоматизации и монетизации VPN.
Часть материалов бесплатна, но подробные инструкции доступны по подписке:
- Скрипты установки Remnawave
- Telegram-боты и интеграции
- Инструкции по панели SHM
- Гайды по настройке Marzban
- Рекомендации по защите VPS
Подпишитесь, чтобы получить доступ к премиум-контенту — перейти к подписке
Заключение
Cloudflare Tunnel — надёжный способ опубликовать локальные сервисы, такие как панель управления Remnawave VPN, в интернет с полной поддержкой HTTPS, без открытых портов и через reverse proxy в Docker Compose.
Подходит как для продакшна, так и для домашней лаборатории. Вы получаете простую и безопасную схему запуска из коробки.
Ищете полные скрипты установки и автоматизации VPN? Вступайте в Openode Club и получите доступ ко всем гайдам и утилитам.
VPS за 10$ + 100$ кредита — альтернатива Kamatera
Ищете дешёвый VPS для VPN, прокси, CI/CD или Docker?
Попробуйте VPSserver — ребрендинг Kamatera, дающий $100 бесплатного кредита на месяц при пополнении счёта всего на $10.
Более 20 локаций: США, Германия, Франция, Нидерланды, Великобритания, Япония и др.
Без верификации, лояльны к РФ — подходит под VPN, Docker-панели, облачные лаборатории, тестовые стенды.
Отличный выбор, если вы ищете:
- VPS для туннелей и Cloudflare Tunnel
- Сервер под Marzban, SHM, Remnawave
- Надёжный хостинг для микросервисов
Получить VPS с бонусом $100 — пока РКН не в курсе.