Cloudflare Tunnel дозволяє опублікувати локальний сервер в інтернеті без білої IP-адреси і без відкритих вхідних портів. З'єднання ініціюється зсередини мережі — сервер недоступний напряму.
Як працює Cloudflare Tunnel
- Демон
cloudflaredна вашому сервері створює вихідне зашифроване з'єднання з Cloudflare - Cloudflare приймає трафік на своєму edge для вашого домену
- Трафік передається через тунель на ваш сервер
- Немає відкритих портів 80/443 на сервері
Встановлення cloudflared
# Ubuntu/Debian
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
# Авторизуватися
cloudflared tunnel login
Створення тунелю
# Створити тунель
cloudflared tunnel create my-server
# Створити конфіг ~/.cloudflared/config.yml
tunnel: your-tunnel-id
credentials-file: /root/.cloudflared/your-tunnel-id.json
ingress:
- hostname: mysite.example.com
service: http://localhost:80
- hostname: api.example.com
service: http://localhost:3000
- service: http_status:404
Прив'язка домену і запуск
# Створити DNS-запис
cloudflared tunnel route dns my-server mysite.example.com
# Запустити тунель
cloudflared tunnel run my-server
# Додати в автозапуск
sudo cloudflared service install
sudo systemctl enable cloudflared
Випадки використання
- Публікація dev-сервера для демонстрації клієнту
- Хостинг сайту на домашньому інтернеті без білої IP
- Захист сервера: немає відкритих портів = немає прямих атак
- Self-hosted сервіси (Gitea, NextCloud, Home Assistant) з HTTPS
Що таке Cloudflare Tunnel
Cloudflare Tunnel створює зашифрований вихідний тунель від вашого сервера до Cloudflare. Не потрібно відкривати порти 80/443 — усе йде через тунель.
Конфігураційний файл
# ~/.cloudflared/config.yml
tunnel: TUNNEL_ID
credentials-file: /root/.cloudflared/TUNNEL_ID.json
ingress:
- hostname: myapp.yourdomain.com
service: http://localhost:3000
- hostname: api.yourdomain.com
service: http://localhost:8080
- service: http_status:404
Запуск як сервіс
cloudflared service install
systemctl enable --now cloudflared
Типові помилки Cloudflare Tunnel
| Помилка | Причина | Що робити |
|---|---|---|
| failed to connect to the edge: context deadline exceeded | Вихідний трафік із сервера заблокований файрволом — cloudflared не може достукатися до edge Cloudflare | Дозвольте вихідні з'єднання на портах 443 та 7844 (QUIC) у файрволі |
| Unauthorized: Failed to get tunnel | Файл credentials-file вказує на неправильний tunnel ID, або токен тунелю відкликано в дашборді | Перестворіть тунель: cloudflared tunnel create my-server і оновіть config.yml |
| Error 502 Bad Gateway під час заходу на сайт | Сервіс, вказаний в ingress (наприклад http://localhost:80), не запущений або слухає інший порт | Перевірте, що локальний сервіс справді працює: curl http://localhost:80 |
| no ingress rules were defined | У config.yml немає обов'язкового завершального правила за замовчуванням | Додайте останнім рядком в ingress: - service: http_status:404 |
Порівняння Cloudflare Tunnel і прямого підключення
| Критерій | Cloudflare Tunnel | Пряме підключення з відкритим портом |
|---|---|---|
| Публічна IP-адреса | Не потрібна | Обов'язкова |
| Відкриті вхідні порти | Жодного | 80/443 відкриті для всього інтернету |
| Затримка | Трохи вища — додатковий перехід через edge Cloudflare | Мінімальна, прямий шлях до сервера |
| DDoS-захист | Увімкнено автоматично | Потрібно налаштовувати окремо |
Коли Cloudflare Tunnel не підходить
- Високонавантажений production з великим постійним трафіком — додатковий хоп через edge помітний у затримці та вартості
- Клієнтам потрібен mTLS із власним сертифікатом напряму до сервера — тунель термінує TLS на боці Cloudflare
- Застосунок використовує протоколи поза межами HTTP/TCP з нестандартною маршрутизацією — підтримка через ingress не завжди однакова для всіх типів трафіку
- Критична незалежність від аптайму стороннього провайдера — тунель додає Cloudflare як єдину точку відмови між клієнтом і сервером
Для захисту саме вебадмінки за моделлю Zero Trust, а не просто приховування IP, є окрема стаття «Cloudflare Access: захист адмінки за моделлю Zero Trust». Загальний устрій мережі Cloudflare розібрано у статті «Cloudflare: що це таке і навіщо потрібен безкоштовний план».
Перевірка результату
Переконайтеся, що тунель піднято і трафік справді йде через нього:
# Статус тунелю і підключені edge-з'єднання
cloudflared tunnel info my-server
# Тунель працює як systemd-сервіс без збоїв
systemctl status cloudflared
# Домен відповідає через тунель, а не напряму
curl -sI https://mysite.example.com | head -5
# Логи демона в реальному часі під час діагностики
journalctl -u cloudflared -f
Якщо пізніше знадобиться порівняти тунель зі звичайним VPN-доступом, ось стаття про WireGuard VPN на VPS: швидке встановлення та налаштування.
Часті питання
Що відбувається з сайтом, якщо процес cloudflared на сервері зупиняється?
Якщо служба cloudflared зупиняється, вихідне з'єднання з edge Cloudflare зникає, і сайт чи сервіс, опублікований через тунель, стає недосяжним ззовні — альтернативного маршруту до сервера просто не існує. Тому демон запускають як системну службу з автозапуском, щоб він піднімався знову після перезавантаження чи збою, а не залишався вимкненим.
Чи потрібен платний тариф Cloudflare для використання Tunnel?
Ні, Cloudflare Tunnel повністю працює на безкоштовному плані Cloudflare без додаткової оплати. Платні функції Cloudflare стосуються інших можливостей мережі — розширеного захисту, аналітики чи правил Zero Trust, а сам тунель і демон cloudflared лишаються безкоштовними незалежно від обраного тарифу облікового запису.
Чи можна опублікувати через один тунель кілька різних сервісів на різних піддоменах?
Так, один і той самий тунель здатен обслуговувати кілька сервісів одразу — для цього у конфігураційному файлі просто перелічують кілька правил ingress, кожне зі своїм доменним іменем і адресою локального сервісу. Єдина вимога — обов'язкове завершальне правило за замовчуванням наприкінці списку, інакше конфігурація не завантажиться.
Чи потрібно відкривати порт на домашньому роутері, щоб Tunnel запрацював?
Ні, саме в цьому полягає суть Tunnel — з'єднання завжди ініціюється зсередини мережі самим сервером, тому вхідні порти на роутері не відкриваються взагалі. Домашній інтернет без публічної IP-адреси і без доступу до налаштувань NAT продовжує працювати точнісінько так само, як зі звичайним провайдером.