Руководство по безопасной публикации локальных сервисов в ServBay с помощью Cloudflare Tunnel
Cloudflare Tunnel (ранее Argo Tunnel) — это сервис нулевого доверия от Cloudflare, позволяющий безопасно публиковать локальные веб-сервисы, SSH или другие приложения в интернет без открытых портов и сложных правил файервола. В этом руководстве подробно описано, как в мощной локальной среде разработки ServBay с помощью клиентской утилиты cloudflared
построить защищённый туннель и сделать ваши локальные сервисы доступными из интернета.
Ключевые преимущества:
- Повышенная безопасность: Использование защиты Cloudflare, включая предотвращение DDoS-атак, WAF (веб-аппликационный файервол) и пр.
- Упрощённая настройка сети: Без необходимости настраивать проброс портов, NAT или сложные правила файервола.
- Доверительная Zero Trust-модель: Подключение инициируется изнутри, что минимизирует атакуемую поверхность.
- Интеграция с сервисами Cloudflare: Используйте кэширование, оптимизацию, аналитику и прочие возможности Cloudflare.
Обзор
ServBay предоставляет разработчикам интегрированную и простую в управлении среду локальной разработки с поддержкой множества языков (PHP, Node.js, Python, Go, Java, Ruby, Rust и др.), баз данных (MySQL, PostgreSQL, MongoDB, Redis и др.) и веб-серверов (Caddy, Nginx, Apache). Обычно веб-сайты или приложения, разрабатываемые в ServBay, доступны только локально. Используя Cloudflare Tunnel, вы можете удобно делиться прогрессом разработки с коллегами или временно/постоянно публиковать сервис для внешних пользователей, получая при этом преимущества по безопасности и производительности, которые даёт Cloudflare.
Техническая суть
Основной принцип Cloudflare Tunnel — это запуск клиента cloudflared
на вашей локальной машине (где работает ServBay), который инициализирует один или несколько зашифрованных соединений (на основе протокола QUIC) с ближайшим краевым узлом Cloudflare. Поскольку соединения исходящие, вам не нужно изменять настройки роутера или файервола. Когда пользователь обращается к вашему сайту по домену, ассоциированному с туннелем, трафик попадает сначала на периферию Cloudflare, а затем — по защищённому туннелю на клиентский cloudflared
, который перенаправляет его на локальный сервис в ServBay (например, сайт на https://servbay.local
или http://localhost:8000
). Ответ возвращается в обратном порядке.
Подготовка среды
Перед началом убедитесь, что выполнены следующие условия:
- ServBay установлен и работает корректно: Убедитесь, что среда ServBay развернута и нужный сайт/сервис работает. Например, сайт по умолчанию на локальном домене
servbay.local
доступен в браузере. - Аккаунт Cloudflare: У вас есть учётная запись Cloudflare.
- Домен, обслуживаемый Cloudflare: Вы владеете доменом, добавленным в ваш аккаунт Cloudflare, с управлением DNS через Cloudflare.
- Установлен клиент
cloudflared
: На macOS-машине, где работает ServBay, необходимо установить утилиту командной строкиcloudflared
.
1. Установка клиента cloudflared
Для macOS рекомендуется использовать Homebrew. Если Homebrew не установлен, следуйте документации на официальном сайте Homebrew.
Установка через Homebrew (рекомендуется):
brew update
brew install cloudflared
2
Ручная установка для macOS ARM (Apple Silicon):
# Скачать бинарник для macOS ARM (Apple Silicon)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-arm64.tgz | tar xz
# Переместить бинарный файл в системный PATH
sudo mv cloudflared /usr/local/bin/
2
3
4
Проверка установки: После установки проверьте наличие и версию утилиты:
cloudflared --version
# Пример вывода: cloudflared version 2024.5.0 (built 2024-05-01)
2
Номер версии может отличаться, важно, чтобы команда выдавала информацию — это значит, что установка прошла успешно.
2. Вход в аккаунт Cloudflare
В терминале выполните команду авторизации:
cloudflared tunnel login
Утилита автоматически откроет браузер, где вы пройдёте авторизацию в нужном аккаунте Cloudflare (привязанном к вашему домену) и предоставите разрешения cloudflared
. После успешной авторизации будет сгенерирован файл сертификата cert.pem
в папке настроек (обычно ~/.cloudflared/
).
Практическая настройка туннеля
Теперь создадим новый туннель и сконфигурируем его для проксирования трафика к сервису ServBay.
Основная последовательность настройки
Создание туннеля
В терминале создайте новый туннель, указав понятное название, например,
servbay-demo-tunnel
:bashcloudflared tunnel create servbay-demo-tunnel
1После выполнения появится ID туннеля (UUID) и путь к файлу с учетными данными. Пример ID:
a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d
. В директории~/.cloudflared/
появится JSON-файл, например,a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json
— этот файл содержит учётные данные для запуска туннеля, храните его в безопасности.Настройка DNS-записи
Чтобы Cloudflare могла направлять трафик по вашему домену в туннель, создайте CNAME-запись через команду:
bashcloudflared tunnel route dns servbay-demo-tunnel servbay-demo.yourdomain.com
1Замените
servbay-demo-tunnel
на имя своего туннеля, аservbay-demo.yourdomain.com
— на нужный поддомен (важно, чтобыyourdomain.com
принадлежал вам и был в Cloudflare).После выполнения этой команды CNAME-запись для
servbay-demo.yourdomain.com
будет указывать на<ТуннельID>.cfargotunnel.com
.Создание файла конфигурации
Для настройки поведения туннеля используется файл YAML (по умолчанию —
~/.cloudflared/config.yml
). Создайте файл, если его ещё нет.Пример содержимого
~/.cloudflared/config.yml
:yaml# tunnel: UUID туннеля, замените на ваш ID tunnel: a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d # credentials-file: путь к файлу учётных данных credentials-file: /Users/yourusername/.cloudflared/a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json # укажите ваш username и правильный путь ingress: # Правила распознавания доменов - hostname: servbay-demo.yourdomain.com # внешний домен, должен совпадать с DNS-записью service: https://servbay.local # адрес локального сервиса ServBay с поддержкой SSL originRequest: # noTLSVerify: true # если используется самоподписанный сертификат (например, User CA от ServBay), включите для пропуска проверки TLS # если для вашего сайта используется действующий сертификат от Let's Encrypt через встроенный ACME-сервис, это не требуется # Для локальной разработки обычно удобно использовать User CA и опцию noTLSVerify: true - service: http_status:404 # правило по-умолчанию: если hostname не совпал, отдавать 404
1
2
3
4
5
6
7
8
9
10
11
12
13
14Важные замечания:
- Замените значения параметров
tunnel
иcredentials-file
на свои реальные данные. - В
hostname
укажите ваш домен, настроенный на шаге 2. - В
service: https://servbay.local
указывается адрес локального сервиса (по умолчанию ServBay с SSL). Если сервис работает на другом порту — например, Node.js наhttp://localhost:3000
, измените значение. - Опция
originRequest.noTLSVerify: true
отключает проверку сертификата сервиса для cloudflared, что необходимо при использовании самоподписанных сертификатов (например, User CA от ServBay). Если используется валидный сертификат от Let's Encrypt, опция не нужна.
- Замените значения параметров
Запуск туннеля
После настройки config-файла можно запустить туннель командой:
cloudflared tunnel run servbay-demo-tunnel
Замените servbay-demo-tunnel
на название вашего туннеля.
cloudflared
подключится к сети Cloudflare, создаст туннель, а в терминале появятся сообщения о состоянии. Пока команда активна, туннель работает. Для автозапуска в фоне требуется настройка system-сервиса (например, через launchctl
на macOS — вне рамок руководства).
Проверка работы
После запуска туннеля локальный сервис доступен через внешний домен.
Откройте настроенный домен в браузере (например,
https://servbay-demo.yourdomain.com
).Что проверить:
- Откроется сайт — его содержимое должно совпадать с тем, что показывается на
https://servbay.local
. - В адресной строке браузера — валидный SSL-сертификат, выданный Cloudflare (не ваш локальный, который используется только между cloudflared и ServBay).
- В HTTP-заголовках (через инструменты разработчика) присутствуют идентификаторы вроде
CF-RAY
— признак прохождения через сеть Cloudflare.
- Откроется сайт — его содержимое должно совпадать с тем, что показывается на
Расширенные возможности
Маршрутизация к нескольким сервисам
В разделе ingress
config-файла можно описать маршруты к разным локальным сервисам по разным доменам — для отдельных сайтов или API:
ingress:
- hostname: api.yourdomain.com
service: http://localhost:8080 # например, API на 8080 порту
- hostname: app.yourdomain.com
service: https://servbay.local # основной сайт ServBay
- service: http_status:404
2
3
4
5
6
Мониторинг и логирование
Возможности cloudflared для мониторинга и отладки:
- Просмотр текущих метрик:bash
cloudflared tunnel info servbay-demo-tunnel
1 - Детальное логирование: Логи отображаются прямо в терминале при запуске
cloudflared tunnel run
. Можно также настроить вывод логов в файл или выбрать уровень детализации.
Интеграция с Cloudflare Access
Для дополнительной защиты сервисов настройте Cloudflare Access — решение Zero Trust от Cloudflare, реализующее гибкую авторизацию и аутентификацию без VPN. Конфигурируется через панель Cloudflare Dashboard.
Диагностика проблем
В случае ошибок воспользуйтесь таблицей типовых ситуаций и решений:
Ситуация | Решение |
---|---|
При открытии домена 502 Bad Gateway | Проверьте, что локальный сервис в ServBay работает и открыт (https://servbay.local или другой указанный адрес).Проверьте правильность параметров service в config.yml.При использовании HTTPS и самоподписанного сертификата — включите noTLSVerify . |
Ошибка разрешения DNS, недоступен домен | Убедитесь, что добавили корректную CNAME-запись в DNS-Cloudflare, указывающую на <ТуннельID>.cfargotunnel.com . Проверьте через dig или nslookup . |
Ошибка сертификата при открытии сайта | Если ошибка касается сертификата Cloudflare, проверьте соответствие параметров hostname и посещаемого домена.Если ошибка появляется при соединении cloudflared с локальным сервисом — проверьте корректность адреса в service и необходимость включения originRequest.noTLSVerify: true . |
Ошибки при запуске cloudflared tunnel run | Проверьте наличие и корректность файла ~/.cloudflared/config.yml (формат YAML).Проверьте значения tunnel и credentials-file .Убедитесь, что cloudflared имеет доступ к файлам настроек и учётных данных. |
Медленная работа или нестабильное соединение | Проверьте качество локального интернета. Cloudflare Tunnel использует QUIC — удостоверьтесь в поддержке протокола в вашей сети. Измените регион подключения в Cloudflare или свяжитесь с поддержкой. |
Краткое резюме преимуществ
Использование Cloudflare Tunnel в среде ServBay даёт:
- Безопасный обмен локальными проектами: Показывайте клиентам или коллегам сайты и приложения напрямую со своей машины.
- Лёгкое тестирование внешних callback-ов: Проверьте работу вебхуков и других интеграций, требующих публичного доступа.
- Уровень корпоративной безопасности: DDoS-защита, WAF и другие инструменты Cloudflare для защиты ваших локальных сервисов.
- Минимальная настройка сети: Нет необходимости открывать порты или править файервол.
- Глобальная доступность: Использование Anycast-инфраструктуры Cloudflare для ускорения доступа к вашим проектам.
Мощные возможности локальной среды ServBay в сочетании с защищённым туннелем Cloudflare создают для разработчика современный, удобный и безопасный рабочий процесс.
Заключение
В этой статье пошагово рассказано, как установить и настроить cloudflared
, создать и запустить Cloudflare Tunnel c публикацией локальных веб-сервисов в интернет в среде ServBay. Следуя этому руководству, вы сможете использовать поддержку разных технологий от ServBay и возможности безопасной публикации от Cloudflare, повышая эффективность разработки и командной работы. Учтите, что Cloudflare Tunnel — часть Zero Trust-платформы Cloudflare, и для максимальной безопасности рекомендуется изучить дополнительные возможности, такие как Cloudflare Access.