bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Налаштування Cloudflare Tunnel (

calendar_month Jun 19, 2026 schedule 22 хв. читання visibility 46 переглядів
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Налаштування Cloudflare Tunnel (Argo Tunnel) на VPS: безпечний доступ до локальних сервісів

TL;DR

У цьому докладному посібнику ми покроково налаштуємо Cloudflare Tunnel (раніше відомий як Argo Tunnel) на вашому VPS, щоб забезпечити безпечний та приватний доступ до ваших внутрішніх сервісів (веб-серверів, SSH, баз даних) без необхідності відкривати порти на брандмауері або мати публічну IP-адресу. Ви навчитеся встановлювати та конфігурувати демон cloudflared, створювати тунелі та маршрутизувати трафік через захищену глобальну мережу Cloudflare, значно підвищуючи безпеку та простоту керування доступом до ваших застосунків.

  • Безпечний доступ: Ваші сервіси доступні через Cloudflare, а не безпосередньо з інтернету, приховуючи вашу фактичну IP-адресу та захищаючи від прямих атак.
  • Без відкритих портів: Усі з'єднання вихідні від вашого VPS до Cloudflare, що виключає необхідність прокидання портів на брандмауері.
  • Простота налаштування DNS: Cloudflare автоматично керує DNS-записами для вашого тунелю.
  • Інтеграція з Zero Trust: Можливість подальшої інтеграції з Cloudflare Zero Trust для гранулярного контролю доступу.
  • Актуальні версії: Усі інструкції базуються на актуальних версіях ПЗ на 2026 рік, включно з Ubuntu 24.04 LTS та останніми версіями cloudflared.

Що ми налаштовуємо і навіщо

У цьому посібнику ми будемо налаштовувати Cloudflare Tunnel, потужний інструмент від Cloudflare, який дозволяє безпечно підключати локальні або приватні мережі та сервіси до глобальної мережі Cloudflare. Його основне завдання — зробити ваші внутрішні сервіси доступними з інтернету, при цьому не відкриваючи жодного порту на вашому VPS або локальному брандмауері. Це радикально підвищує безпеку, оскільки ваш сервер не піддається прямим атакам ззовні.

Уявіть ситуацію: у вас є веб-сервер (Nginx, Apache), сервер Minecraft, GitLab, Mattermost або будь-який інший сервіс, що працює на вашому VPS. Зазвичай, щоб зробити його доступним з інтернету, вам доводиться відкривати відповідні порти (наприклад, 80 і 443 для HTTP/S, 22 для SSH) на брандмауері вашого сервера. Це створює потенційні точки входу для зловмисників і вимагає постійного моніторингу та захисту.

Cloudflare Tunnel змінює цей підхід. Замість того, щоб відкривати вхідні порти, ви встановлюєте на своєму VPS невеликий демон під назвою cloudflared. Цей демон встановлює вихідне, зашифроване з'єднання з найближчим вузлом Cloudflare. Весь трафік до вашого сервісу проходить через глобальну мережу Cloudflare, а потім цим безпечним тунелем до вашого сервера. Ваш VPS ніколи не розкриває свою публічну IP-адресу, і всі вхідні з'єднання блокуються брандмауером. Це означає, що ви отримуєте всі переваги Cloudflare (захист від DDoS, кешування, WAF) для ваших сервісів, навіть якщо вони не мають публічної IP-адреси.

У підсумку читач отримає:

  • Підвищену безпеку: Ваш сервер захищений від прямих DDoS-атак та сканування портів.
  • Простоту керування: Не потрібно налаштовувати складні правила брандмауера для кожного сервісу.
  • Приховування IP-адреси: Реальна IP-адреса вашого VPS залишається приватною.
  • Надійність та продуктивність: Використання глобальної мережі Cloudflare для маршрутизації трафіку.
  • Гнучкість: Можливість тунелювати практично будь-який TCP-сервіс.

Які альтернативи та чому self-hosted на VPS

Існує кілька способів зробити сервіси доступними з інтернету:

  • Традиційний зворотний проксі (Nginx/Apache) з відкритими портами: Найпоширеніший метод. Вимагає наявності публічної IP-адреси, налаштування DNS, випуску SSL-сертифікатів (Certbot) та ретельної конфігурації брандмауера. Менш безпечний, оскільки порти відкриті назовні.
  • VPN-сервер (OpenVPN, WireGuard): Створює зашифрований тунель, але вимагає від кожного користувача підключення до VPN, що не завжди зручно для публічних сервісів або доступу за посиланням. Підходить для доступу команди або особистого використання, але не для широкої аудиторії.
  • Cloud-managed сервіси (AWS Application Load Balancer, Google Cloud Load Balancer): Керовані хмарні балансувальники навантаження, що надають аналогічні функції, але зазвичай дорожчі та прив'язані до конкретного хмарного провайдера. Вимагають глибоких знань хмарних платформ.
  • Ngrok або аналогічні сервіси: Надають схожий функціонал тунелювання, але часто мають обмеження щодо пропускної здатності, часу роботи або функцій у безкоштовних планах, а також можуть викликати питання до конфіденційності, оскільки трафік проходить через сторонній сервіс.

Вибір self-hosted рішення на VPS з Cloudflare Tunnel виправданий, якщо ви:

  • Хочете повний контроль над своєю інфраструктурою та даними.
  • Шукаєте економічне рішення порівняно з керованими хмарними сервісами.
  • Цінуєте безпеку та хочете приховати свій реальний IP.
  • Вже використовуєте Cloudflare для своїх доменів і хочете інтегрувати нові сервіси.
  • Плануєте використовувати Cloudflare Zero Trust для більш розширеного контролю доступу.

Налаштування на VPS дає вам гнучкість та незалежність, а Cloudflare Tunnel додає рівень безпеки та простоти, який важко досягти традиційними методами.

Який VPS-конфіг потрібен для цього завдання

Cloudflare Tunnel (демон cloudflared) сам по собі є досить легкою програмою. Основні вимоги до ресурсів VPS залежатимуть не від тунелю, а від тих сервісів, які ви плануєте запускати за тунелем.

Мінімальні вимоги для cloudflared (без урахування тунельованих сервісів):

  • CPU: 1 vCPU (навіть найбазовіший, наприклад, Intel Xeon E3 або E5).
  • RAM: 512 MB – 1 GB (cloudflared споживає мінімально, але ОС та інші системні процеси потребують пам'яті).
  • Диск: 10 GB SSD (для операційної системи, логів та самого cloudflared; HDD також підійде, але SSD завжди кращий для продуктивності).
  • Мережа: 100 Mbps порт (мінімум, але чим вища пропускна здатність, тим краще). Cloudflare Tunnel використовує вихідні з'єднання, тому стабільне та швидке мережеве з'єднання з інтернетом є критичним.

Якщо ви плануєте тунелювати легкі веб-сервіси, невеликі бази даних, SSH-доступ або Minecraft-сервер для кількох друзів, то зазначені мінімальні вимоги будуть достатніми для самого cloudflared та ОС. Однак, якщо за тунелем працюватимуть ресурсомісткі застосунки, такі як GitLab для великої команди, Mattermost для сотень користувачів, високонавантажений веб-сервер або Bitcoin/Ethereum нода, вимоги до CPU, RAM та диска значно зростуть.

Конкретний VPS-план для завдання (актуально на 2026 рік):

Для більшості сценаріїв, таких як розгортання GitLab для невеликої команди (до 10-15 користувачів), Mattermost, Minecraft-сервера для 10-20 гравців або кількох простих веб-сайтів, рекомендується наступний VPS-конфіг:

  • CPU: 2-4 vCPU (сучасні покоління, наприклад, Intel Xeon Scalable).
  • RAM: 4-8 GB RAM.
  • Диск: 80-200 GB NVMe SSD (для високої продуктивності читання/запису, особливо важливо для баз даних та систем контролю версій).
  • Мережа: 1 Gbps порт з необмеженим або великим обсягом трафіку (від 1 ТБ на місяць).

Можна взяти VPS із зазначеними характеристиками для комфортної роботи більшості описаних сервісів.

Коли потрібен dedicated, а не VPS:

Dedicated сервер стає необхідним, коли:

  • Високе навантаження: Потрібна обробка тисяч одночасних запитів, запуск високопродуктивних баз даних або дуже активні ігрові сервери.
  • Специфічне обладнання: Потрібні GPU для машинного навчання, дуже великі обсяги сховища (терабайти) або RAID-масиви для відмовостійкості.
  • Гарантована продуктивність: VPS ділить ресурси з іншими користувачами на одному фізичному сервері, dedicated сервер надає вам усі ресурси машини без поділу.
  • Суворі вимоги до безпеки/ізоляції: Для критично важливих систем, де повна ізоляція від інших користувачів є пріоритетом.
  • Велика кількість сервісів: Якщо ви плануєте розмістити десятки різних сервісів, кожен зі своїми вимогами.

Для запуску Bitcoin/Ethereum ноди, яка вимагає значного дискового простору (сотні гігабайт і більше) та високої швидкості читання/запису, а також безперервної роботи, часто краще використовувати відповідний dedicated сервер, особливо якщо ви плануєте брати участь у стейкінгу або майнінгу.

Локація: на що впливає

Вибір локації VPS відіграє важливу роль:

  • Затримка (Latency): Чим ближче ваш VPS до вашої цільової аудиторії або до вас, тим нижча затримка. Для інтерактивних застосунків (ігрові сервери, відеоконференції) це критично. Для веб-сайтів Cloudflare розподілить трафік через свою глобальну мережу, але початкове з'єднання з вашим сервером все одно матиме затримку.
  • Юрисдикція: Закони про дані та конфіденційність різняться в різних країнах. Вибирайте локацію, що відповідає вашим юридичним вимогам.
  • Доступність вузлів Cloudflare: Cloudflare має вузли по всьому світу. Вибирайте локацію, де є хороший піринг з найближчим вузлом Cloudflare для оптимальної продуктивності тунелю.

Загалом, вибирайте локацію, яка географічно близька до більшості ваших користувачів або до вас, якщо ви єдиний користувач.

Підготовка сервера

Перед встановленням Cloudflare Tunnel необхідно провести базове налаштування вашого VPS. Ми будемо використовувати Ubuntu 24.04 LTS як актуальну та стабільну операційну систему на 2026 рік. Ці кроки підвищать безпеку та зручність використання вашого сервера.

1. Підключення по SSH

Підключіться до вашого нового VPS як користувач root або користувач, наданий хостинг-провайдером, використовуючи SSH.


ssh root@ВАШ_IP_АДРЕС

Замініть ВАШ_IP_АДРЕС на реальний IP вашого сервера.

2. Оновлення системи

Насамперед оновіть список пакетів і саму систему до останніх версій. Це забезпечить наявність усіх актуальних виправлень безпеки та стабільності.


sudo apt update -y && sudo apt upgrade -y

Оновлюємо список пакетів та встановлюємо всі доступні оновлення.

3. Створення нового користувача з правами sudo (рекомендується)

Робота під користувачем root небезпечна. Створіть нового користувача та надайте йому права sudo.


adduser ваш_пользователь

Створюємо нового користувача. Введіть пароль та інформацію про користувача.


usermod -aG sudo ваш_пользователь

Додаємо користувача до групи sudo, щоб він міг виконувати команди з правами адміністратора.


su - ваш_пользователь

Перемикаємося на нового користувача. Тепер усі наступні команди виконуватимуться від його імені.

4. Налаштування SSH-ключів для нового користувача (опціонально, але вкрай рекомендується)

Використання SSH-ключів замість паролів значно підвищує безпеку.


mkdir ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

Створюємо директорію .ssh, встановлюємо правильні права та відкриваємо файл authorized_keys.

Вставте ваш публічний SSH-ключ (створений на вашій локальній машині) у цей файл та збережіть (Ctrl+X, Y, Enter).


chmod 600 ~/.ssh/authorized_keys

Встановлюємо правильні права на файл authorized_keys.

Після цього ви можете відключитися та знову підключитися по SSH, використовуючи нового користувача та SSH-ключ.


exit && exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС

Виходимо з поточної сесії та підключаємося під новим користувачем по SSH.

5. Налаштування брандмауера (UFW)

Ubuntu постачається з UFW (Uncomplicated Firewall). Налаштуємо його, щоб дозволити лише необхідні з'єднання. Для Cloudflare Tunnel нам не потрібно відкривати вхідні порти для тунельованих сервісів, але SSH-доступ має бути дозволений.


sudo apt install ufw -y

Встановлюємо UFW, якщо він ще не встановлений.


sudo ufw default deny incoming
sudo ufw default allow outgoing

Забороняємо всі вхідні з'єднання за замовчуванням та дозволяємо всі вихідні (cloudflared потрібен вихідний трафік).


sudo ufw allow ssh

Дозволяємо вхідні з'єднання по SSH (порт 22). Якщо ви використовуєте інший порт для SSH, вкажіть його: sudo ufw allow 1234/tcp.


sudo ufw enable

Вмикаємо брандмауер. Підтвердіть дію, натиснувши y.


sudo ufw status verbose

Перевіряємо статус брандмауера.

6. Встановлення Fail2Ban (рекомендується)

Fail2Ban допомагає захистити ваш сервер від атак методом підбору паролів, блокуючи IP-адреси, з яких відбуваються невдалі спроби входу.


sudo apt install fail2ban -y

Встановлюємо Fail2Ban.


sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Вмикаємо та запускаємо сервіс Fail2Ban.


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Створюємо локальну копію конфігурації для внесення змін.

Тепер ваш сервер готовий до встановлення Cloudflare Tunnel.

Встановлення ПЗ — покроково

Тепер, коли ваш VPS підготовлений, ми можемо приступити до встановлення та налаштування демона Cloudflare Tunnel, який називається cloudflared. Ми будемо використовувати офіційний репозиторій Cloudflare для Ubuntu, що забезпечить легке оновлення в майбутньому.

На 2026 рік Ubuntu 24.04 LTS буде стабільною та підтримуваною системою, і cloudflared буде активно розвиватися. Інструкції використовуватимуть актуальні методи.

1. Додавання репозиторію Cloudflare

Спочатку необхідно додати офіційний APT-репозиторій Cloudflare, щоб система могла знаходити та встановлювати пакет cloudflared.


sudo mkdir -p --mode=0755 /usr/share/keyrings

Створюємо директорію для GPG ключів, якщо її немає.


curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

Завантажуємо GPG ключ Cloudflare та додаємо його до системних брелоків ключів.


echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared jammy main' | sudo tee /etc/apt/sources.list.d/cloudflared.list

Додаємо репозиторій Cloudflare до списку джерел APT. Зверніть увагу, що Cloudflare часто використовує кодові імена попередніх LTS-версій Ubuntu (наприклад, jammy для 22.04) для сумісності з новими версіями, такими як 24.04.


sudo apt update -y

Оновлюємо список пакетів, щоб APT дізнався про новий репозиторій.

2. Встановлення cloudflared

Тепер, коли репозиторій додано, можна встановити сам пакет cloudflared.


sudo apt install cloudflared -y

Встановлюємо демон Cloudflare Tunnel.


cloudflared --version

Перевіряємо встановлену версію cloudflared. Переконайтеся, що це актуальна версія (на 2026 рік це буде щось на зразок 2026.x.x).

3. Автентифікація cloudflared з вашим обліковим записом Cloudflare

Для того щоб cloudflared міг створювати та керувати тунелями, його необхідно автентифікувати з вашим обліковим записом Cloudflare. Цей крок виконується один раз.


cloudflared login

Виконуємо команду для автентифікації. Вона виведе URL у консоль.

Скопіюйте цей URL та відкрийте його у вашому веб-браузері. Вас попросять увійти до вашого облікового запису Cloudflare та вибрати домен, який ви хочете використовувати для тунелю. Після вибору домену Cloudflare згенерує сертифікат cert.pem та автоматично завантажить його на ваш VPS у директорію ~/.cloudflared/ (або /etc/cloudflared/, якщо запущено як служба).

Якщо ви виконуєте команду від імені користувача ваш_пользователь, сертифікат буде в /home/ваш_пользователь/.cloudflared/cert.pem. Якщо ви переключилися на root або використовували sudo, він може опинитися в /root/.cloudflared/cert.pem. Переконайтеся, що ви знаєте, де знаходиться файл cert.pem.

4. Створення тунелю

Після автентифікації можна створити сам тунель. Кожен тунель повинен мати унікальне ім'я.


cloudflared tunnel create мой-первый-туннель

Створюємо новий тунель з ім'ям "мій-перший-тунель".

Ця команда виведе JSON-об'єкт, що містить id тунелю та шлях до файлу секретів (credentials-file), наприклад: /home/ваш_пользователь/.cloudflared/ТУННЕЛЬ_ID.json. Цей файл містить унікальні облікові дані для вашого тунелю і дуже важливий. Зберігайте його в безпеці!

5. Налаштування DNS-запису для тунелю

Щоб трафік з інтернету міг потрапити у ваш тунель, необхідно створити DNS-запис у Cloudflare, яка вказуватиме на ваш тунель.


cloudflared tunnel route dns мой-первый-туннель имя-хоста.ваш-домен.com

Маршрутизуємо DNS-запис имя-хоста.ваш-домен.com через ваш тунель. Замініть имя-хоста.ваш-домен.com на бажане піддоменне ім'я, яке вказуватиме на ваш сервіс.

Наприклад, якщо ваш домен example.com, а ви хочете отримати доступ до веб-сервера за адресою my-app.example.com, команда буде: cloudflared tunnel route dns мій-перший-тунель my-app.example.com. Cloudflare автоматично створить CNAME-запис у вашому DNS, що вказуватиме на ваш тунель.

Конфігурація

Після встановлення та створення тунелю необхідно налаштувати cloudflared, щоб він знав, які локальні сервіси потрібно тунелювати. Це робиться через конфігураційний файл config.yml. Ми також налаштуємо cloudflared як системну службу, щоб він автоматично запускався при старті сервера.

1. Створення конфігураційного файлу config.yml

Конфігураційний файл config.yml визначає правила маршрутизації для вашого тунелю. Він повинен знаходитися в тій же директорії, що й файл cert.pem та .json файл з обліковими даними тунелю (зазвичай ~/.cloudflared/ або /etc/cloudflared/). Для зручності та одноманітності рекомендується використовувати /etc/cloudflared/.

Якщо ви створювали тунель від імені звичайного користувача, то файли cert.pem та ТУННЕЛЬ_ID.json знаходяться в /home/ваш_пользователь/.cloudflared/. Перемістіть їх до /etc/cloudflared/ та встановіть правильні права.


sudo mkdir -p /etc/cloudflared
sudo mv /home/ваш_пользователь/.cloudflared/cert.pem /etc/cloudflared/
sudo mv /home/ваш_пользователь/.cloudflared/ТУННЕЛЬ_ID.json /etc/cloudflared/

Створюємо директорію та переміщуємо файли. Замініть ТУННЕЛЬ_ID.json на фактичне ім'я вашого файлу.


sudo chown -R root:root /etc/cloudflared
sudo chmod 0700 /etc/cloudflared
sudo chmod 0600 /etc/cloudflared/

Встановлюємо правильні права доступу для безпеки.

Тепер створимо файл config.yml у /etc/cloudflared/.


sudo nano /etc/cloudflared/config.yml

Ось приклад вмісту config.yml для тунелювання веб-сервера (Nginx/Apache), що працює на порту 80, та SSH-доступу:


# Унікальний ID вашого тунелю
tunnel: ТУННЕЛЬ_ID
# Шлях до файлу з обліковими даними тунелю
credentials-file: /etc/cloudflared/ТУННЕЛЬ_ID.json

# Список ingress-правил для маршрутизації трафіку
ingress:
  # Правило для веб-сервера (HTTP)
  - hostname: my-app.ваш-домен.com
    service: http://localhost:80
    # Вимкнути перевірку TLS для локального сервісу, якщо він не використовує HTTPS
    # noTLSVerify: true 
    # Якщо ваш локальний сервіс вже використовує HTTPS (наприклад, через Caddy/Nginx з Let's Encrypt),
    # використовуйте service: https://localhost:443 та переконайтеся, що сертифікат дійсний або додайте noTLSVerify: true
    # Якщо ваш локальний сервіс використовує HTTP, Cloudflare сам забезпечить HTTPS на своєму edge.

  # Правило для SSH-доступу
  - hostname: ssh.ваш-домен.com
    service: ssh://localhost:22
    # Якщо ви хочете використовувати Cloudflare Access для SSH, тут будуть додаткові налаштування.

  # Правило за замовчуванням (обов'язково має бути останнім)
  # Відправляє весь інший трафік на цей сервіс або повертає помилку
  - service: http_status:404

Замініть ТУННЕЛЬ_ID на реальний ID вашого тунелю (його можна знайти в імені файлу .json або у виводі команди cloudflared tunnel create). Замініть ваш-домен.com на ваш реальний домен. Якщо ви тунелюєте інші сервіси, додайте їх до списку ingress.

Важливі зауваження щодо ingress правил:

  • Порядок має значення: Правила обробляються зверху вниз. Перше правило, що збіглося, застосовується.
  • service: http://localhost:80: Вказує, що cloudflared буде проксіювати запити до локального HTTP-сервера на порту 80. Cloudflare автоматично обробляє HTTPS на своєму краю, тому вам не потрібен HTTPS на локальному сервері, якщо ви не бажаєте наскрізного шифрування.
  • service: ssh://localhost:22: Проксіює SSH-трафік. Для доступу по SSH через Cloudflare Tunnel вам знадобиться спеціальне налаштування SSH-клієнта або використання Cloudflare Access.
  • service: http_status:404: Це обов'язкове правило "catch-all", яке має бути в кінці списку. Воно повертає 404 для будь-якого трафіку, який не збігся з попередніми правилами.

2. Запуск cloudflared як системної служби

Щоб cloudflared запускався автоматично при старті сервера та працював у фоновому режимі, налаштуємо його як службу systemd.


sudo cloudflared --config /etc/cloudflared/config.yml service install

Ця команда встановлює cloudflared як службу systemd, використовуючи ваш конфігураційний файл. Вона створить файл /etc/systemd/system/cloudflared.service.


sudo systemctl start cloudflared

Запускаємо службу cloudflared.


sudo systemctl enable cloudflared

Вмикаємо автозапуск служби при завантаженні системи.


sudo systemctl status cloudflared

Перевіряємо статус служби. Вона має бути активною (active (running)).


journalctl -u cloudflared --since "10 minutes ago"

Переглядаємо логи служби cloudflared за останні 10 хвилин, щоб переконатися у відсутності помилок.

3. Перевірка працездатності

Після запуску служби тунель має бути активним. Перевіримо його роботу:

  • Через браузер: Відкрийте в браузері адресу my-app.ваш-домен.com (або будь-яку іншу, яку ви налаштували). Ви повинні побачити ваш локальний веб-сервер.
  • Через curl: Виконайте команду curl з вашого локального комп'ютера.

curl https://my-app.ваш-домен.com

Ви повинні отримати HTML-код вашого веб-сервера.

  • Перевірка SSH-доступу: Якщо ви налаштували тунелювання SSH, спробуйте підключитися. Cloudflare Tunnel надає кілька способів доступу до SSH:
    • Cloudflare Access (Zero Trust): Рекомендований і найбезпечніший спосіб, що вимагає додаткового налаштування в панелі Cloudflare.
    • cloudflared CLI: Ви можете використовувати cloudflared access ssh --hostname ssh.ваш-домен.com з вашого локального комп'ютера, на якому також встановлено cloudflared.

Переконайтеся, що DNS-записи для ваших хостнеймів були успішно створені в панелі Cloudflare. Вони мають бути CNAME-записами, що вказують на ТУННЕЛЬ_ID.cfargotunnel.com.

4. TLS/HTTPS через Cloudflare

Однією з ключових переваг Cloudflare Tunnel є автоматичне керування TLS/HTTPS. Коли трафік проходить через Cloudflare, він шифрується між клієнтом і Cloudflare (Edge TLS) та між Cloudflare і вашим сервером (Origin TLS). Для тунелів Cloudflare забезпечує наскрізне шифрування.

  • Якщо ваш локальний сервіс працює по HTTP (наприклад, http://localhost:80), Cloudflare автоматично надасть HTTPS на своєму краю, і користувачі бачитимуть безпечне з'єднання.
  • Якщо ваш локальний сервіс вже налаштований на HTTPS (наприклад, через Caddy або Nginx з Certbot), ви можете вказати service: https://localhost:443. У цьому випадку переконайтеся, що ваш локальний сертифікат дійсний, або додайте noTLSVerify: true до конфігурації тунелю, щоб cloudflared не перевіряв сертифікат локального сервера (це знижує безпеку наскрізного шифрування, але може бути корисно для самопідписаних сертифікатів).

У більшості випадків для веб-сервісів достатньо налаштувати локальний сервіс на HTTP, а Cloudflare подбає про HTTPS.

Резервне копіювання та обслуговування

Налаштування Cloudflare Tunnel значно спрощує доступ до сервісів, але не скасовує необхідності в регулярному резервному копіюванні та обслуговуванні сервера. Важливо забезпечити збереження даних та актуальність ПЗ.

1. Що резервувати

При використанні Cloudflare Tunnel, основне, що потрібно резервувати, це:

  • Конфігураційні файли cloudflared:
    • /etc/cloudflared/cert.pem: Сертифікат автентифікації Cloudflare.
    • /etc/cloudflared/ТУННЕЛЬ_ID.json: Файл облікових даних тунелю.
    • /etc/cloudflared/config.yml: Конфігурація тунелю (правила ingress).

    Ці файли критичні для роботи тунелю. У разі втрати їх доведеться створювати заново.

  • Дані тунельованих сервісів:
    • Бази даних: (PostgreSQL, MySQL, MongoDB тощо) – найважливіші дані.
    • Конфігураційні файли застосунків: (наприклад, /etc/nginx/nginx.conf, /etc/gitlab/gitlab.rb, /opt/mattermost/config/config.json).
    • Користувацькі дані/файли: (наприклад, для GitLab: репозиторії, для Mattermost: вкладення, для Minecraft: світи).
    • Системні конфігурації: (наприклад, /etc/ssh/sshd_config, налаштування брандмауера UFW).

2. Простий скрипт авторезервування

Ми створимо простий скрипт, який архівуватиме важливі файли та надсилатиме їх у безпечне місце. Для прикладу будемо використовувати tar для архівації та rsync для копіювання на інший сервер або в хмарне сховище (наприклад, S3-сумісне сховище).


sudo nano /usr/local/bin/backup_cloudflared.sh

Вміст скрипта:


#!/bin/bash

# Каталог для тимчасового зберігання резервних копій
BACKUP_DIR="/var/backups/cloudflared"
# Ім'я файлу резервної копії
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/cloudflared_config_${TIMESTAMP}.tar.gz"

# Каталог з конфігами cloudflared
CLOUDFLARED_CONFIGS="/etc/cloudflared"

# Створюємо директорію для резервних копій, якщо її немає
mkdir -p "${BACKUP_DIR}"

# Створюємо архів з конфігами cloudflared
echo "Створення резервної копії конфігураційних файлів cloudflared..."
sudo tar -czf "${BACKUP_FILE}" "${CLOUDFLARED_CONFIGS}"
if [ $? -eq 0 ]; then
    echo "Резервна копія створена: ${BACKUP_FILE}"
else
    echo "Помилка при створенні резервної копії cloudflared."
    exit 1
fi

# --- Додайте сюди команди для резервного копіювання ваших сервісів ---
# Приклад для PostgreSQL:
# pg_dumpall -U postgres | gzip > "${BACKUP_DIR}/postgresql_all_dbs_${TIMESTAMP}.sql.gz"

# Приклад для конфігів Nginx:
# sudo tar -czf "${BACKUP_DIR}/nginx_config_${TIMESTAMP}.tar.gz" /etc/nginx

# --- Копіювання резервної копії на віддалений сервер або в S3 ---
# Для Rsync на інший VPS (потрібно налаштувати SSH-ключі без пароля):
# rsync -avz "${BACKUP_FILE}" user@remote_server:/path/to/backups/

# Для S3 (потрібно встановити awscli/s3cmd та налаштувати облікові дані):
# aws s3 cp "${BACKUP_FILE}" s3://your-s3-bucket/cloudflared/

# Видалення старих резервних копій (наприклад, старших за 7 днів)
find "${BACKUP_DIR}" -type f -name "*.tar.gz" -mtime +7 -delete
echo "Старі резервні копії видалено."

echo "Резервне копіювання завершено."

Зробіть скрипт виконуваним:


sudo chmod +x /usr/local/bin/backup_cloudflared.sh

Налаштуйте виконання скрипта за допомогою cron. Наприклад, щодня о 3:00 ночі:


sudo crontab -e

Додайте наступний рядок у кінець файлу:


0 3 * * * /usr/local/bin/backup_cloudflared.sh >> /var/log/cloudflared_backup.log 2>&1

Це запускатиме скрипт щодня о 3 годині ночі та записуватиме вивід у лог-файл.

3. Куди зберігати резервні копії

  • Зовнішнє S3-сумісне сховище: Рекомендується. Це можуть бути AWS S3, Backblaze B2, DigitalOcean Spaces або будь-яке інше об'єктне сховище. Це забезпечує високу доступність та відмовостійкість, а також географічне розділення резервних копій від основного сервера.
  • Окремий VPS: Ви можете використовувати другий, менш потужний VPS виключно для зберігання резервних копій. Це також забезпечує розділення, але вимагає керування двома серверами.
  • Локальний комп'ютер: Для дуже невеликих проєктів можна копіювати резервні копії на ваш локальний комп'ютер через scp або rsync.

Ніколи не зберігайте резервні копії на тому ж сервері, що й оригінальні дані! У разі апаратного збою або зламу сервера ви втратите і дані, і резервні копії.

4. Оновлення: rolling vs maintenance window

Регулярні оновлення ПЗ критичні для безпеки та стабільності. Для Cloudflare Tunnel та ОС:

  • Оновлення ОС (Ubuntu):
    • Rolling updates: Для некритичних сервісів можна налаштувати автоматичні оновлення безпеки. Однак для продакшн-серверів рекомендується проводити оновлення вручну або в рамках запланованого вікна обслуговування.
    • Maintenance window: Плануйте регулярні вікна обслуговування (наприклад, раз на місяць) для повного оновлення системи (sudo apt update && sudo apt upgrade -y) та перезавантаження, якщо потрібно. Це дозволяє контролювати процес та мінімізувати ризик збоїв.
  • Оновлення cloudflared:
    • cloudflared оновлюється через той самий APT-репозиторій. Ви можете включити його у свої регулярні оновлення ОС. Cloudflare випускає оновлення досить часто, тому важливо підтримувати актуальну версію.
    • Після оновлення cloudflared, як правило, потрібен перезапуск служби: sudo systemctl restart cloudflared.
  • Оновлення тунельованих застосунків:
    • Оновлюйте ваші застосунки (GitLab, Mattermost, Nginx тощо) відповідно до рекомендацій їхніх розробників, дотримуючись вікон обслуговування.

Завжди робіть резервну копію перед великими оновленнями або змінами конфігурації.

Вирішення проблем + FAQ

У цьому розділі ми розглянемо типові проблеми, з якими можна зіткнутися при налаштуванні Cloudflare Tunnel, та відповімо на поширені запитання.

Не вдається підключитися до сервісу через домен Cloudflare

Проблема: Ви налаштували тунель, але при спробі доступу до my-app.ваш-домен.com у браузері бачите помилку (наприклад, 502 Bad Gateway, 503 Service Unavailable, або "Origin connection failed").

Що перевірити:

  1. Статус служби cloudflared:
    sudo systemctl status cloudflared
    Переконайтеся, що служба активна та працює.
  2. Логи cloudflared:
    journalctl -u cloudflared --since "5 minutes ago"
    Шукайте помилки, пов'язані з підключенням до локального сервісу (origin connection failed, dial tcp).
  3. Доступність локального сервісу: Переконайтеся, що ваш сервіс (наприклад, Nginx на порту 80) дійсно працює на VPS і доступний з localhost. Спробуйте
    curl http://localhost:80
    на самому VPS. Якщо сервіс не відповідає, проблема в ньому, а не в тунелі.
  4. Конфігурація config.yml: Перевірте правильність hostname та service у файлі /etc/cloudflared/config.yml. Переконайтеся, що порт вказано вірно (наприклад, http://localhost:80).
  5. DNS-запис у Cloudflare: Переконайтеся, що в панелі Cloudflare для вашого домену my-app.ваш-домен.com існує CNAME-запис, що вказує на ТУННЕЛЬ_ID.cfargotunnel.com.
  6. Файли облікових даних: Перевірте наявність та правильність шляхів до cert.pem та ТУННЕЛЬ_ID.json у config.yml.

Як виправити: Виправте помилки, знайдені в логах або конфігурації. Перезапустіть cloudflared:

sudo systemctl restart cloudflared
.

cloudflared login не працює або не завантажує cert.pem

Проблема: Після виконання cloudflared login та переходу за URL у браузері, файл cert.pem не з'являється в ~/.cloudflared/ або /etc/cloudflared/.

Що перевірити:

  1. Підключення до інтернету: Переконайтеся, що ваш VPS має доступ до інтернету (ping google.com).
  2. Права доступу: Переконайтеся, що користувач, від імені якого ви запускаєте cloudflared login, має права на запис у ~/.cloudflared/.
  3. Брандмауер: Переконайтеся, що вихідні з'єднання дозволені (sudo ufw status має показувати Status: active та Default: deny (incoming), allow (outgoing)).
  4. Вибір домену в браузері: Переконайтеся, що ви успішно вибрали домен у веб-інтерфейсі Cloudflare після входу.

Як виправити: Перевірте права, мережеве підключення. Спробуйте видалити директорію ~/.cloudflared/ та повторити cloudflared login. Переконайтеся, що ви входите в правильний обліковий запис Cloudflare та вибираєте домен, керований цим обліковим записом.

Який VPS-конфіг мінімально підійде?

Для самого Cloudflare Tunnel та операційної системи (наприклад, Ubuntu 24.04 LTS) мінімальний конфіг може бути дуже скромним: 1 vCPU, 512 МБ ОЗУ, 10-20 ГБ SSD та 100 Мбіт/с мережевий канал. Цього достатньо для роботи cloudflared та тунелювання одного-двох дуже легких сервісів. Однак, якщо ви плануєте запускати щось більш ресурсоємне, наприклад, веб-сервер з помірним навантаженням або невеликий ігровий сервер, то знадобиться мінімум 2 vCPU, 2-4 ГБ ОЗУ та 50+ ГБ SSD для комфортної роботи тунельованого застосунку.

Що обрати — VPS чи dedicated для цього завдання?

Вибір між VPS та dedicated сервером залежить від масштабу ваших потреб. Для більшості індивідуальних користувачів, невеликих команд та легких/середніх проєктів (особистий веб-сайт, Mattermost для 10-20 осіб, Minecraft-сервер для друзів) VPS буде оптимальним та економічним вибором. Він надає достатню потужність та гнучкість. Dedicated сервер потрібен, коли вимагається максимальна продуктивність, гарантовані ресурси, величезний дисковий простір (наприклад, для ноди блокчейну з повним архівом), дуже висока пропускна здатність або специфічне обладнання (GPU). Cloudflare Tunnel чудово працює на обох типах серверів, але вимоги до базового обладнання визначаються не тунелем, а сервісами, які він обслуговує.

Як оновити cloudflared?

Оскільки cloudflared було встановлено з офіційного APT-репозиторію Cloudflare, він оновлюється як і будь-яка інша системна програма в Ubuntu:


sudo apt update -y && sudo apt upgrade -y
sudo systemctl restart cloudflared

Команда apt upgrade оновить cloudflared до останньої доступної версії, а потім необхідно перезапустити службу, щоб зміни набули чинності.

Як тунелювати SSH без Cloudflare Access?

Якщо ви не хочете використовувати Cloudflare Access (Zero Trust), ви все одно можете тунелювати SSH. Для цього на вашому локальному комп'ютері також має бути встановлений cloudflared. Ви можете використовувати його для проксіювання SSH-з'єднання:


cloudflared access ssh --hostname ssh.ваш-домен.com

Ця команда створить тимчасовий тунель з вашого локального cloudflared до Cloudflare Edge, а потім через ваш Cloudflare Tunnel на VPS до вашого SSH-сервера. Це вимагає автентифікації в Cloudflare з локальної машини. Для більш зручного використання можна налаштувати SSH-клієнт для використання cloudflared як ProxyCommand.

Чи можу я тунелювати кілька сервісів через один тунель?

Так, абсолютно. Це одна з головних переваг Cloudflare Tunnel. Ви просто додаєте нові правила ingress у ваш файл /etc/cloudflared/config.yml, вказуючи різні hostname та відповідні service (наприклад, http://localhost:8080 для іншого веб-застосунку). Після зміни config.yml не забудьте перезапустити службу cloudflared:

sudo systemctl restart cloudflared
.

Висновки та наступні кроки

Ми успішно налаштували Cloudflare Tunnel на вашому VPS, забезпечивши безпечний та приватний доступ до ваших локальних сервісів без необхідності відкривати порти на брандмауері. Тепер ваш сервер захищений від прямих атак, а весь трафік проходить через глобальну, захищену мережу Cloudflare, що значно підвищує безпеку та спрощує керування інфраструктурою.

Це рішення ідеально підходить для розробників, solo-фаундерів SaaS, гравців та криптоентузіастів, яким потрібен надійний спосіб публікації своїх сервісів в інтернеті, зберігаючи при цьому контроль та безпеку.

Наступні кроки:

  • Інтеграція з Cloudflare Zero Trust: Вивчіть Cloudflare Zero Trust (раніше Cloudflare Access) для реалізації гранулярного контролю доступу до ваших тунельованих сервісів. Ви зможете налаштувати автентифікацію через SSO (Google, GitHub тощо) та застосовувати політики доступу на основі особистості користувача, пристрою або IP-адреси.
  • Моніторинг та логування: Налаштуйте централізоване логування для cloudflared та ваших сервісів, а також моніторинг продуктивності VPS, щоб оперативно реагувати на будь-які проблеми.
  • Додавання нових сервісів: Розширте використання тунелю, додаючи нові сервіси (наприклад, GitLab, Mattermost, Grafana, Prometheus) до вашого config.yml, використовуючи різні піддомени.
  • Оптимізація продуктивності: Для високонавантажених сервісів розгляньте оптимізацію налаштувань Cloudflare (кешування, Argo Smart Routing) та налаштувань вашого VPS (тюнінг ядра Linux, оптимізація баз даних).

Поділитися цим записом:

налаштування Cloudflare Tunnel (Argo Tunnel) на VPS: безпечний доступ до локальних сервісів
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.