Настройка безопасного Cloudflare Tunnel для Remnawave VPN через Docker Compose (без проброса портов)
Как настроить 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 — пока РКН не в курсе.
- Наше сообщество Openode.XYZ OpeNode.xyz
- Aeza VPS (+15% к пополнению) Aeza.net
- Лучший Евро-хостер VPS (+1 месяц бесплатно на 100$) Kamatera.com
- VPS hosting - 4vps.su (-10% скидка!) 4VPS.su
- TG Channel TG-Channel Neonode.cc