Публикуем сайт с домашнего компьютера: 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 сертификата.
Как это работает “под капотом”:
- Вы устанавливаете небольшую утилиту
cloudflared
на свой Linux-компьютер. cloudflared
устанавливает исходящее HTTPS-соединение с ближайшим сервером Cloudflare, создавая постоянный туннель.- Когда кто-то запрашивает ваш сайт через доменное имя, Cloudflare направляет этот запрос через установленный туннель к вашему локальному веб-серверу.
- Ваш веб-сервер обрабатывает запрос и отправляет ответ обратно через тот же туннель, а Cloudflare доставляет его пользователю.
Звучит здорово, не правда ли? Давайте начнём!
Что нам понадобится
- Доменное имя: Это обязательное условие. Вы можете купить его у любого регистратора или получить бесплатный домен (например, через Freenom, но имейте в виду их возможные ограничения).
- Аккаунт Cloudflare: Бесплатный тарифный план вполне подойдёт для большинства задач.
- Установленный веб-сервер на вашем Linux-компьютере: Это может быть Nginx, Apache, Caddy, Node.js-сервер, Python Simple HTTP Server или любой другой, который умеет слушать HTTP-запросы на локальном порту (например, 80, 8000, 3000 и т.д.).
- Компьютер с операционной системой Linux, на котором будет хоститься сайт.
Часть 1: Подготовка домена и установка Cloudflared
Этот раздел охватывает начальные шаги по интеграции вашего домена с Cloudflare и установке необходимого программного обеспечения.
Шаг 1: Добавляем ваш домен в Cloudflare
Если ваш домен ещё не управляется Cloudflare, это первый и самый важный шаг:
- Зайдите в ваш аккаунт Cloudflare.
- Нажмите “Add a Site” (Добавить сайт).
- Введите ваше доменное имя и выберите бесплатный тарифный план.
- Cloudflare просканирует ваши текущие DNS-записи. После этого вам будет предложено изменить DNS-серверы вашего домена на те, что предоставит Cloudflare (например,
xxx.ns.cloudflare.com
иyyy.ns.cloudflare.com
). Это критический момент – без этого Cloudflare не сможет управлять вашим доменным именем. Инструкции по изменению DNS-серверов вы найдёте у своего регистратора домена.
После того как вы обновите DNS-серверы, подождите некоторое время (от нескольких минут до нескольких часов), пока изменения распространятся по интернету. Статус вашего домена в Cloudflare должен измениться на “Active” (Активный).
Шаг 2: Устанавливаем cloudflared
на ваш Linux-компьютер
Cloudflare настоятельно рекомендует использовать их официальный репозиторий для установки cloudflared
. Это гарантирует, что у вас всегда будет самая актуальная версия утилиты и вы сможете получать автоматические обновления.
Добавьте ключ 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
Добавьте репозиторий 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
- Для Debian/Ubuntu и производных (использующих
Обновите список пакетов и установите
cloudflared
:- Для Debian/Ubuntu:
sudo apt update sudo apt install cloudflared
- Для CentOS/RHEL/Fedora:
sudo yum install cloudflared # Или для Fedora: sudo dnf install cloudflared
- Для Debian/Ubuntu:
После установки вы можете быстро проверить, что 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
.
- Перейдите в раздел “DNS” вашего домена в консоли управления Cloudflare.
- Нажмите кнопку “Add record” (Добавить запись).
- Выберите тип записи:
CNAME
. - В поле “Name” (Имя) введите:
@
– для основного домена (например,your-domain.com
).www
– для субдоменаwww
(например,www.your-domain.com
).
- В поле “Target” (Цель) введите:
<UUID вашего туннеля>.cfargotunnel.com
.- Важно: Замените
<UUID вашего туннеля>
на реальный UUID, полученный в Шаге 4.
- Важно: Замените
- Убедитесь, что значок “Proxy status” (Статус прокси) оранжевый (Full Proxy) – это означает, что трафик будет проходить через Cloudflare.
- Нажмите “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. Это открывает массу возможностей для личных проектов, тестирования и даже небольших коммерческих сайтов.
Если у вас остались вопросы, задавайте их в комментариях!