Публикуем сайт с домашнего компьютера: Cloudflare Tunnel без белого IP

Опубликовано 16.06.2025

Часто возникает необходимость разместить свой сайт, будь то личный блог, тестовый проект или небольшой сервис, прямо на домашнем компьютере. Это удобно, экономично и даёт полный контроль. Однако, многие сталкиваются с проблемой отсутствия “белого” (публичного) IP-адреса от провайдера, что делает прямой доступ извне практически невозможным. А если и есть, то зачастую он динамический и требует постоянного обновления через DDNS.

Не расстраивайтесь! Сегодня мы погрузимся в мир сетевых технологий и расскажем, как обойти это ограничение и опубликовать свой сайт в интернете, используя мощный и бесплатный инструмент от Cloudflare – Cloudflare Tunnel (ранее известный как Argo Tunnel). Вам больше не потребуется белый IP, проброс портов на роутере и другие сложные настройки!


Что такое Cloudflare Tunnel и как он работает?

Cloudflare Tunnel – это безопасный и элегантный способ подключить ваш локальный веб-сервер к глобальной сети Cloudflare без необходимости открывать входящие порты на вашем роутере. Он создает зашифрованный исходящий туннель между вашим домашним компьютером и ближайшим сервером Cloudflare. Весь входящий трафик к вашему сайту будет проходить через инфраструктуру Cloudflare, обеспечивая вам множество преимуществ: от их CDN и кэширования до защиты от DDoS-атак и бесплатного SSL/TLS сертификата.

Как это работает “под капотом”:

  1. Вы устанавливаете небольшую утилиту cloudflared на свой Linux-компьютер.
  2. cloudflared устанавливает исходящее HTTPS-соединение с ближайшим сервером Cloudflare, создавая постоянный туннель.
  3. Когда кто-то запрашивает ваш сайт через доменное имя, Cloudflare направляет этот запрос через установленный туннель к вашему локальному веб-серверу.
  4. Ваш веб-сервер обрабатывает запрос и отправляет ответ обратно через тот же туннель, а Cloudflare доставляет его пользователю.

Звучит здорово, не правда ли? Давайте начнём!


Что нам понадобится

  1. Доменное имя: Это обязательное условие. Вы можете купить его у любого регистратора или получить бесплатный домен (например, через Freenom, но имейте в виду их возможные ограничения).
  2. Аккаунт Cloudflare: Бесплатный тарифный план вполне подойдёт для большинства задач.
  3. Установленный веб-сервер на вашем Linux-компьютере: Это может быть Nginx, Apache, Caddy, Node.js-сервер, Python Simple HTTP Server или любой другой, который умеет слушать HTTP-запросы на локальном порту (например, 80, 8000, 3000 и т.д.).
  4. Компьютер с операционной системой Linux, на котором будет хоститься сайт.

Часть 1: Подготовка домена и установка Cloudflared

Этот раздел охватывает начальные шаги по интеграции вашего домена с Cloudflare и установке необходимого программного обеспечения.

Шаг 1: Добавляем ваш домен в Cloudflare

Если ваш домен ещё не управляется Cloudflare, это первый и самый важный шаг:

  1. Зайдите в ваш аккаунт Cloudflare.
  2. Нажмите “Add a Site” (Добавить сайт).
  3. Введите ваше доменное имя и выберите бесплатный тарифный план.
  4. Cloudflare просканирует ваши текущие DNS-записи. После этого вам будет предложено изменить DNS-серверы вашего домена на те, что предоставит Cloudflare (например, xxx.ns.cloudflare.com и yyy.ns.cloudflare.com). Это критический момент – без этого Cloudflare не сможет управлять вашим доменным именем. Инструкции по изменению DNS-серверов вы найдёте у своего регистратора домена.

После того как вы обновите DNS-серверы, подождите некоторое время (от нескольких минут до нескольких часов), пока изменения распространятся по интернету. Статус вашего домена в Cloudflare должен измениться на “Active” (Активный).

Шаг 2: Устанавливаем cloudflared на ваш Linux-компьютер

Cloudflare настоятельно рекомендует использовать их официальный репозиторий для установки cloudflared. Это гарантирует, что у вас всегда будет самая актуальная версия утилиты и вы сможете получать автоматические обновления.

  1. Добавьте ключ GPG Cloudflare:

    sudo mkdir -p --mode=0755 /usr/share/keyrings
    curl -fsSL [https://pkg.cloudflare.com/cloudflare-main.gpg](https://pkg.cloudflare.com/cloudflare-main.gpg) | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
    
  2. Добавьте репозиторий Cloudflare в вашу систему:

    • Для Debian/Ubuntu и производных (использующих apt):
      echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] [https://pkg.cloudflare.com/cloudflared](https://pkg.cloudflare.com/cloudflared) stable main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
      
    • Для CentOS/RHEL/Fedora и производных (использующих yum/dnf):
      echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] [https://pkg.cloudflare.com/cloudflared](https://pkg.cloudflare.com/cloudflared) stable main' | sudo tee /etc/yum.repos.d/cloudflared.repo
      
  3. Обновите список пакетов и установите cloudflared:

    • Для Debian/Ubuntu:
      sudo apt update
      sudo apt install cloudflared
      
    • Для CentOS/RHEL/Fedora:
      sudo yum install cloudflared
      # Или для Fedora: sudo dnf install cloudflared
      

После установки вы можете быстро проверить, что cloudflared установлен и доступен, выполнив команду:

cloudflared --version

Шаг 3: Авторизуем cloudflared с вашим аккаунтом Cloudflare

Теперь необходимо связать установленную утилиту cloudflared с вашим аккаунтом Cloudflare. Откройте терминал на вашем Linux-компьютере и выполните:

cloudflared tunnel login

Эта команда автоматически откроет веб-браузер. Вам нужно будет войти в свой аккаунт Cloudflare и выбрать домен, для которого вы создаете туннель. После успешной авторизации вы увидите сообщение об успешном сохранении сертификата в вашей домашней директории (обычно в /root/.cloudflared/cert.pem или /home/youruser/.cloudflared/cert.pem). Этот сертификат используется для аутентификации вашего cloudflared агента с Cloudflare.


Часть 2: Создание и настройка Cloudflare Tunnel

На этом этапе мы создадим сам туннель и настроим его маршрутизацию.

Шаг 4: Создаем Cloudflare Tunnel

Пришло время создать ваш первый туннель! Придумайте для него уникальное и легко запоминающееся имя, например, my-website-tunnel.

cloudflared tunnel create my-website-tunnel

В ответ вы получите UUID вашего туннеля (это длинная строка вида a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6) и путь к файлу учетных данных (например, /root/.cloudflared/a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6.json). Обязательно сохраните этот UUID и путь к файлу, они понадобятся нам на следующем шаге.

Шаг 5: Конфигурируем туннель (файл config.yml)

Теперь создадим файл конфигурации для нашего туннеля, который будет определять, как Cloudflare должен направлять трафик к вашему локальному веб-серверу. Cloudflare рекомендует размещать этот файл в директории /etc/cloudflared/.

Создайте файл с именем config.yml (или любым другим именем с расширением .yml):

sudo nano /etc/cloudflared/config.yml

Пример содержимого файла config.yml:

tunnel: <UUID вашего туннеля>
credentials-file: /root/.cloudflared/<UUID вашего туннеля>.json # Укажите полный путь к файлу JSON из Шага 4

ingress:
  - hostname: your-domain.com # Замените на ваш домен, например, myblog.ru
    service: http://localhost:80 # Порт, на котором ваш веб-сервер слушает локально
  - hostname: [www.your-domain.com](https://www.your-domain.com) # Если хотите, чтобы работало и с www, например, www.myblog.ru
    service: http://localhost:80
  - service: http_status:404 # Обязательное правило для перехвата всех остальных запросов

Пояснения к config.yml:

  • tunnel: Это UUID, который вы получили на предыдущем шаге.
  • credentials-file: Полный путь к файлу JSON, содержащему учетные данные туннеля. Дважды проверьте и укажите правильный путь к этому файлу на вашей системе.
  • ingress: Это массив правил, которые определяют, как Cloudflare будет маршрутизировать входящие запросы. Правила обрабатываются сверху вниз.
    • hostname: Доменное имя (или субдомен), для которого применяется данное правило.
    • service: Адрес вашего локального веб-сервера и порт, на котором он слушает. Например, если ваш веб-сервер слушает на порту 3000, измените на http://localhost:3000.
    • service: http_status:404: Это обязательное последнее правило в списке. Оно гарантирует, что любой запрос, не соответствующий предыдущим правилам hostname, получит ошибку HTTP 404 (Not Found), предотвращая потенциальный нежелательный доступ.

После редактирования сохраните и закройте файл (для nano: Ctrl+O, Enter, затем Ctrl+X).

Шаг 6: Настраиваем DNS-записи в Cloudflare для туннеля

Чтобы Cloudflare знал, что ваш домен должен использовать созданный туннель, необходимо создать специальную DNS-запись типа CNAME.

  1. Перейдите в раздел “DNS” вашего домена в консоли управления Cloudflare.
  2. Нажмите кнопку “Add record” (Добавить запись).
  3. Выберите тип записи: CNAME.
  4. В поле “Name” (Имя) введите:
    • @ – для основного домена (например, your-domain.com).
    • www – для субдомена www (например, www.your-domain.com).
  5. В поле “Target” (Цель) введите: <UUID вашего туннеля>.cfargotunnel.com.
    • Важно: Замените <UUID вашего туннеля> на реальный UUID, полученный в Шаге 4.
  6. Убедитесь, что значок “Proxy status” (Статус прокси) оранжевый (Full Proxy) – это означает, что трафик будет проходить через Cloudflare.
  7. Нажмите “Save” (Сохранить).

Повторите этот шаг для www субдомена, если вы хотите, чтобы ваш сайт был доступен и по www.your-domain.com, и по your-domain.com.


Часть 3: Запуск и проверка туннеля

Последние шаги – это запуск cloudflared как системного сервиса и проверка работоспособности.

Шаг 7: Запускаем туннель как системный сервис

Cloudflare рекомендует запускать cloudflared как системный сервис (systemd для большинства современных Linux-систем). Это обеспечит его автоматический запуск при загрузке системы и стабильную работу в фоновом режиме.

В терминале выполните следующую команду:

sudo cloudflared tunnel service install

Эта команда установит cloudflared как системный сервис, используя файл конфигурации, который вы создали в /etc/cloudflared/config.yml.

После установки вы можете управлять сервисом с помощью стандартных команд systemctl:

sudo systemctl start cloudflared     # Запустить туннель
sudo systemctl status cloudflared    # Проверить текущий статус туннеля
sudo systemctl enable cloudflared    # Включить автозапуск туннеля при загрузке системы
sudo systemctl stop cloudflared      # Остановить туннель
sudo systemctl restart cloudflared   # Перезапустить туннель (полезно после изменений в config.yml)

Шаг 8: Проверяем работу!

Итак, все настроено! Ваш локальный веб-сервер должен быть запущен, cloudflared должен работать как сервис, и DNS-записи в Cloudflare должны указывать на ваш туннель.

Откройте веб-браузер и введите ваше доменное имя (например, your-domain.com). Если все шаги выполнены правильно, вы должны увидеть свой сайт, работающий прямо с вашего домашнего Linux-компьютера!


Важные моменты и рекомендации

  • Локальный веб-сервер: Убедитесь, что ваш веб-сервер на Linux-машине запущен и слушает на порту, указанном в config.yml. Например, если вы используете Python для быстрого тестирования: python3 -m http.server 8000 и настройте service: http://localhost:8000 в конфиге.
  • Безопасность: Cloudflare Tunnel значительно повышает безопасность, исключая необходимость открывать порты. Однако, всегда следите за безопасностью самого Linux-сервера.
  • Мониторинг: Cloudflare предоставляет базовую статистику трафика. Для более детального мониторинга вашего локального сервера используйте стандартные Linux-инструменты (htop, netstat, логи веб-сервера).
  • Скорость интернета: Производительность вашего сайта, конечно, будет зависеть от скорости исходящего интернет-соединения на вашем домашнем компьютере. Cloudflare CDN поможет кэшировать статический контент, но динамические запросы будут проходить через туннель.

Надеюсь, это подробное руководство помогло вам разобраться в процессе публикации собственного сайта с домашнего Linux-компьютера через Cloudflare Tunnel. Это открывает массу возможностей для личных проектов, тестирования и даже небольших коммерческих сайтов.

Если у вас остались вопросы, задавайте их в комментариях!

Похожие посты

Свяжитесь со мной

Обсудим ваш проект и найдём подходящее решение