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

Получить VPS arrow_forward
eco Начальный Туториал

Настройка Cloudflare Tunnel (Argo Tunnel) на VPS: безопасный доступ к локальным сервисам

calendar_month Jun 19, 2026 schedule 22 мин. чтения visibility 42 просмотров
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 и т.д.) в соответствии с рекомендациями их разработчиков, соблюдая окна обслуживания.

Всегда делайте бэкап перед крупными обновлениями или изменениями конфигурации.

Troubleshooting + 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.