Руководство по безопасной публикации локальных сервисов в 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 cloudflared2
Ручная установка для 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-tunnel1После выполнения появится 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.com1Замените
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 не совпал, отдавать 4041
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:4042
3
4
5
6
Мониторинг и логирование
Возможности cloudflared для мониторинга и отладки:
- Просмотр текущих метрик:bash
cloudflared tunnel info servbay-demo-tunnel1 - Детальное логирование: Логи отображаются прямо в терминале при запуске
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.
