Посібник із безпечного публікування локальних сервісів через Cloudflare Tunnel у ServBay
Cloudflare Tunnel (раніше Argo Tunnel) — це zero trust-мережевий сервіс від Cloudflare, що дозволяє безпечно опублікувати локально запущені веб-сервіси, SSH або інші додатки в мережі Інтернет без відкриття портів чи налаштування складних правил фаєрвола. У цьому посібнику докладно розглянемо, як у потужному локальному середовищі розробки ServBay налаштувати захищений тунель за допомогою клієнту cloudflared
для організації доступу до локальних сервісів ServBay ззовні.
Основні переваги:
- Підвищена безпека: Використання глобальної мережі Cloudflare для захисту (зокрема від DDoS-атак, з WAF тощо).
- Простота мережевого налаштування: Жодних port forwarding, 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 Tunnel полягає у запуску на вашій локальній машині (де працює ServBay) клієнта cloudflared
, який встановлює одне чи кілька зашифрованих з’єднань через протокол QUIC до найближчого периферійного вузла Cloudflare. Ці з’єднання вихідні — отже, не потрібно відкривати вхідні правила на роутері чи фаєрволі. Коли користувач звертається до домену тунелю, трафік спочатку надходить на Cloudflare, потім через безпечний тунель спрямовується до локального клієнта cloudflared
, а вже він пробросить запит до локального сервісу (наприклад, сайту https://servbay.local
чи http://localhost:8000
). Відповідь повертається цим же шляхом.
Підготовка середовища
Перед початком налаштування переконайтеся, що:
- ServBay встановлено і працює: Ваше середовище ServBay налаштоване та працює, а сайт/сервіс, який ви хочете зробити доступним, запущений у ServBay (наприклад, типовий домен
servbay.local
відкривається локально). - Обліковий запис Cloudflare: Ви маєте акаунт у Cloudflare.
- Домен під керуванням Cloudflare: У вас є домен, доданий до акаунту Cloudflare для керування DNS.
- Встановлений клієнт
cloudflared
: На macOS-комп’ютері з ServBay інсталюйте командний клієнтcloudflared
.
1. Встановлення клієнта cloudflared
Для macOS рекомендовано встановлювати через Homebrew. Якщо Homebrew ще не встановлений — скористайтеся офіційною інструкцією.
Встановлення через Homebrew (рекомендується):
bash
brew update
brew install cloudflared
1
2
2
Ручне завантаження та інсталяція (для macOS ARM):
bash
# Завантаження для 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/
1
2
3
4
2
3
4
Перевірка встановлення: Після встановлення виконайте команду для перевірки успішного встановлення cloudflared
і перегляду версії:
bash
cloudflared --version
# Приклад виводу: cloudflared version 2024.5.0 (built 2024-05-01)
1
2
2
Версія може відрізнятися, головне — бачити версію у відповіді.
2. Вхід до облікового запису Cloudflare
Запустіть у терміналі:
bash
cloudflared tunnel login
1
Після цього cloudflared
відкриє браузер та перенаправить вас на сторінку авторизації Cloudflare. Виберіть акаунт із вашим доменом та дайте дозвіл для cloudflared
. Коли авторизація завершиться, ви побачите підтвердження у браузері, а також файл cert.pem
з’явиться у каталозі конфігурації (зазвичай ~/.cloudflared/
).
Практична конфігурація тунелю
Далі створимо новий тунель та налаштуємо його так, щоб трафік спрямовувався на локальний сервіс у ServBay.
Основний процес налаштування
Створіть тунель
У терміналі створіть новий тунель, назвіть його, наприклад,
servbay-demo-tunnel
:bashcloudflared tunnel create servbay-demo-tunnel
1Після виконання команди ви отримаєте ID тунелю (UUID) і шлях до credentials-файлу. Запам’ятайте ID, наприклад:
a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d
. У каталозі~/.cloudflared/
створиться JSON-файл з даними доступу (credentials), наприклад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
на піддомен, через який будете публікувати локальний сервіс (домена має бути під вашим керуванням у Cloudflare).Після виконання команди у DNS Cloudflare з’явиться CNAME-запис
servbay-demo.yourdomain.com
, який вказує на<ТунельID>.cfargotunnel.com
.Напишіть конфігураційний файл
Для налаштування тунелю використовується файл YAML — за замовчуванням
~/.cloudflared/config.yml
. Якщо файлу немає — створіть його.Зразок конфігурації
~/.cloudflared/config.yml
:yaml# tunnel: UUID тунелю (замініть на актуальний) tunnel: a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d # credentials-file: шлях до credentials-файлу (замініть на конкретний) credentials-file: /Users/yourusername/.cloudflared/a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json # вкажіть свій шлях ingress: # правила маршрутизації запитів у тунелі - hostname: servbay-demo.yourdomain.com # домен, що налаштований у DNS service: https://servbay.local # адреса локального сервісу ServBay, типово з SSL originRequest: # noTLSVerify: true # якщо локальний SSL-сертифікат — самопідписаний, потрібно увімкнути цю опцію # якщо сайт використовує дійсний сертифікат (наприклад, від Let's Encrypt через ACME), ця опція не потрібна # для локальної розробки зручно користуватись ServBay User CA сертифікатом і увімкнути noTLSVerify: true - service: http_status:404 # fallback-правило: якщо 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 через HTTPS, згенерований із ServBay User CA локальний сертифікат. Якщо ваш сервіс працює на іншому порту/адресі (наприклад, Node.js наhttp://localhost:3000
), — змініть цю адресу.- Опція
originRequest.noTLSVerify: true
вимикає перевірку локального SSL-сертифіката клієнтомcloudflared
. Це потрібно лише для самопідписаних сертифікатів. Якщо у вас дійсний сертифікат від CA, цю опцію не вмикайте.
- Вкажіть актуальні значення для
Запуск тунелю
Після завершення налаштування конфігурації запустіть тунель командою:
bash
cloudflared tunnel run servbay-demo-tunnel
1
Замість servbay-demo-tunnel
підставте ім’я вашого тунелю.
cloudflared
під’єднається до мережі Cloudflare та створить тунель. В терміналі буде видно статус і логи підключення. Поки ця команда працює (у передньому плані), тунель активний. Для фонової роботи можна налаштувати його як системний сервіс (деталі залежать від ОС та ваших потреб, для macOS легко зробити це через launchctl
).
Перевірка сервісу
Якщо тунель запущено — можете протестувати доступність вашого локального сервісу ззовні.
Відкрийте налаштований домен: У браузері відкрийте адресу, що була вказана у налаштуваннях, наприклад:
https://servbay-demo.yourdomain.com
.Що перевірити:
- Сайт має коректно завантажитись і відображати те саме, що локально на
https://servbay.local
. - В адресному рядку браузеру має бути чинний SSL-сертифікат (виданий Cloudflare для цього домену).
- В developer tools, у HTTP-headers повинні бути ознаки Cloudflare (
CF-RAY
тощо), що свідчить про роботу тунелю через мережу Cloudflare.
- Сайт має коректно завантажитись і відображати те саме, що локально на
Додаткові налаштування і лайфхаки
Роутинг на декілька сервісів
У секції ingress
файлу config.yml
можна створювати різні правила під різні хости для спрямування трафіку до різних локальних сервісів:
yaml
ingress:
- hostname: api.yourdomain.com
service: http://localhost:8080 # наприклад, ваш API-сервіс на порту 8080
- hostname: app.yourdomain.com
service: https://servbay.local # основний сайт
- service: http_status:404
1
2
3
4
5
6
2
3
4
5
6
Моніторинг і логування
cloudflared
має низку команд для моніторингу та діагностики тунелю:
- Живі метрики:bash
cloudflared tunnel info servbay-demo-tunnel
1 - Детальна діагностика: Команда
cloudflared tunnel run
напряму виводить логи у термінал. Логування можна підлаштувати через рівні або файл.
Інтеграція з Cloudflare Access
Для додаткової безпеки рекомендовано інтегрувати Cloudflare Access — це zero trust шар для авторизації/аутентифікації користувачів, котрі отримують доступ до тунелів. Access налаштовується через кабінет Cloudflare і дозволяє точні політики доступу без класичних VPN.
Вирішення проблем
Якщо щось не працює — скористайтеся цією таблицею для діагностики:
Симптом | Рішення |
---|---|
Домен відкривається з 502 Bad Gateway | Перевірте, чи справно працює локальний сервіс (наприклад, відкрийте https://servbay.local або іншу локальну адресу).Переконайтесь, що адресу й порт у config.yml вказано правильно.Якщо сервіс з HTTPS, але не увімкнено noTLSVerify: true , — увімкніть цю опцію або перевірте сертифікат. |
Помилка DNS, домен недоступний | Перевірте, чи додано в Cloudflare вірний CNAME-запис (має вказувати на <ТунельID>.cfargotunnel.com ). Для перевірки використайте dig чи nslookup . |
Помилка сертифіката при відкритті | Якщо помилка пов’язана з Cloudflare — перевірте відповідність hostname у config.yml та вашого домену.Якщо помилка від cloudflared щодо локального SSL — перевірте адресу сервісу і, за необхідності, увімкніть originRequest.noTLSVerify: true . |
Помилка під час запуску cloudflared tunnel run | Перевірте, чи існує і коректно оформлений (YAML) файл ~/.cloudflared/config.yml .Перевірте актуальність значень tunnel і credentials-file .Переконайтесь, що є доступ до credentials-файлу та конфігу. |
Повільне з’єднання чи нестабільна робота | Перевірте стан локальної мережі. Cloudflare Tunnel працює через QUIC — перевірте, чи цей протокол підтримується у вашій мережі. Оцініть регіональні налаштування Cloudflare чи зверніться у техпідтримку. |
Коротко про переваги рішення
Інтеграція Cloudflare Tunnel у ServBay дозволяє розробникам:
- Безпечно ділитися розробками: Демонструвати сайти й додатки команді чи клієнтам напряму з локального комп’ютера.
- Тестувати зовнішні інтеграції: Приймати callback-и, webhook-и тощо, що вимагають публічного доступу.
- Отримати enterprise-захист: Користуватись антивірусом, WAF й DDoS-мітiгаціями від Cloudflare.
- Забути про складні мережеві налаштування: Жодних port forwarding чи фаєрвол-хаоса.
- Використати переваги глобальної мережі: Мережа Anycast покращує швидкодію і надійність доступу.
Потужне локальне середовище розробки ServBay у поєднанні із захищеною публікацію через Cloudflare Tunnel — ефективний і безпечний робочий процес для розробника.
Висновок
У цьому посібнику показано, як встановити та налаштувати cloudflared
у середовищі ServBay, створити та запустити Cloudflare Tunnel і безпечно відкрити локальні веб-сервіси в Інтернеті. Дотримуючись цієї інструкції, ви зможете повноцінно використовувати мультистекову підтримку ServBay і переваги безпеки Cloudflare Tunnel для підвищення ефективності розробки та співпраці. Не забувайте: Cloudflare Tunnel — це частина платформи Cloudflare Zero Trust, радимо також вивчити Cloudflare Access для розширеного контролю доступу та ще надійнішого захисту.