Cloudflare DNS + Workers + Tunnels — три сервиса, которые закрывают большую часть инфраструктуры разработчика на бесплатном тарифе: домены и проксирование, серверный код на Edge, доступ к localhost из интернета без белого IP. Каждый из них работает самостоятельно, но вместе они дают связку, которой раньше нужен был VPS, Nginx, Let’s Encrypt и проброс портов.
Если вы запускаете пет-проект, делаете MVP для клиента или поднимаете self-hosted инструменты (n8n, Gitea, Home Assistant, Grafana) — эта тройка закрывает почти всё. Платный тариф нужен только когда вы упираетесь в лимиты или хотите завести команду из десятков человек за Cloudflare Access.
Этот материал — практический разбор всех трёх сервисов в одном месте. Что внутри каждого, как устроено, какие лимиты на бесплатном тарифе, как быстро поднять и какие подводные камни ждут на каждом шаге. В конце — общий чеклист и ссылки на документацию.
Что это
Это связка из трёх бесплатных сервисов Cloudflare, которая закрывает задачи, для которых раньше нужны были отдельный VPS, Nginx, Let’s Encrypt и настройка файрвола.
- Cloudflare DNS — самый быстрый публичный DNS-хостинг в мире. Бесплатный, без лимитов на число записей. Даёт DDoS-защиту, проксирование трафика, автоматический SSL и доступ ко всем остальным сервисам Cloudflare.
- Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Пишете функцию на JavaScript или TypeScript, деплоите — она работает по всему миру без серверов, без контейнеров, без DevOps.
- Cloudflare Tunnels — сервис, который создаёт зашифрованное соединение от вашего локального сервера к сети Cloudflare. Без белого IP, без проброса портов, без настройки NAT. localhost становится доступен по вашему домену.
Зачем нужно
Связка DNS + Workers + Tunnels закрывает почти все базовые задачи, для которых раньше нужен был платный VPS, отдельный Nginx и ручной выпуск сертификатов.
- Поднять сайт с custom-доменом за 10 минут — DNS + Pages дают HTTPS из коробки без Let’s Encrypt и cron.
- Скрыть API-ключи от внешних сервисов — Workers проксирует запросы и хранит секреты в зашифрованных переменных окружения.
- Поднять Telegram-бот или обработчик вебхуков без своего сервера — Worker на Edge работает по всему миру с cold start меньше миллисекунды.
- Показать заказчику localhost по красивому URL — Tunnel даёт временный или постоянный домен без белого IP и проброса портов.
- Поднять self-hosted сервисы (n8n, Gitea, Grafana, Home Assistant) и закрыть их авторизацией через Cloudflare Access — до 50 пользователей бесплатно.
- Получить глобальный CDN, защиту от DDoS и SSL без переговоров с хостером — оранжевое облако включается одним кликом.
Как устроено
Cloudflare DNS
DNS (Domain Name System) — система, которая превращает доменное имя (mysite.ru) в IP-адрес сервера. Cloudflare DNS — один из самых быстрых и надёжных публичных DNS-хостингов в мире. Бесплатный, без ограничений по числу записей и доменов. Серверы Cloudflare стоят в 330+ дата-центрах, и запрос пользователя отвечает ближайший — поэтому разрешение имён идёт за единицы миллисекунд.
Когда вы переносите домен на Cloudflare DNS, вы получаете не только быстрый DNS, но и DDoS-защиту на уровне DNS, проксирование трафика через Cloudflare (CDN, WAF, автоматический SSL), удобную панель записей и интеграцию со всеми остальными сервисами — Workers, Pages, Tunnels, Access.
Ключевое правило: Cloudflare DNS — фундамент. Без переноса домена на Cloudflare нельзя использовать Workers Routes, автоматический SSL для Pages и привязку домена к Tunnel. Можно держать домен у регистратора и прописать Cloudflare secondary, но часть функций тогда отключается.
Типы DNS-записей
Каждая DNS-запись — инструкция для интернета: куда отправлять запросы к вашему домену. Базовых типов семь, для большинства проектов хватает четырёх.
| Тип | Для чего | Пример значения |
|---|---|---|
| A | Указывает IPv4-адрес сервера | 203.0.113.50 |
| AAAA | Указывает IPv6-адрес сервера | 2001:db8::1 |
| CNAME | Алиас — перенаправляет на другой домен | mysite.pages.dev |
| MX | Почтовый сервер для домена | mx1.mailprovider.com |
| TXT | Текстовая запись (SPF, DKIM, верификация) | v=spf1 include:_spf.google.com ~all |
| NS | Nameserver-серверы домена | anna.ns.cloudflare.com |
| SRV | Служебная запись (порт + приоритет) | Для VoIP, игровых серверов |
| CAA | Какие центры сертификации могут выпускать SSL | letsencrypt.org |
Оранжевое облако: проксирование vs DNS-only
Главная фича Cloudflare DNS — переключатель проксирования (оранжевое или серое облако). Именно он решает, идёт ли трафик через CDN и защиту Cloudflare или напрямую к вашему серверу.
flowchart LR
A["Посетитель"] --> B{"Оранжевое облако?"}
B -->|Да| C["Cloudflare CDN"]
C --> D["Ваш сервер"]
B -->|Нет| D
Оранжевое облако (Proxied)
- IP сервера скрыт — в логах видны только IP Cloudflare, реальный адрес не утекает.
- Работает CDN — статика кэшируется на 330+ дата-центрах и отдаётся ближайшим.
- Включается DDoS-защита, WAF и Bot Fight Mode.
- Автоматический SSL-сертификат — Cloudflare сам выпускает и обновляет.
- Работают Page Rules, Redirect Rules, Transform Rules.
Серое облако (DNS only)
Cloudflare работает как обычный DNS — возвращает реальный IP сервера и не вмешивается в трафик. Нет CDN, нет защиты, нет SSL от Cloudflare. Посетитель подключается к серверу напрямую, и IP видно всем.
Когда что включать
| Запись | Облако | Почему |
|---|---|---|
| A / CNAME для сайта | Оранжевое | CDN, защита, SSL |
| A / CNAME для API | Оранжевое | Защита, скрытие IP |
| MX (почта) | Серое | Почтовые серверы не работают через прокси |
| A для SSH / FTP | Серое | Cloudflare проксирует только HTTP/HTTPS |
| CNAME для Tunnel | Оранжевое | Tunnel работает через прокси |
| TXT (SPF, DKIM) | — | TXT не поддерживает проксирование |
Важно: никогда не включайте оранжевое облако для MX-записей. Почта перестанет работать. Cloudflare проксирует только HTTP/HTTPS — для SMTP, IMAP, POP3 нужен прямой доступ к почтовому серверу.
Перенос домена на Cloudflare DNS
Перенос означает: вы меняете nameservers у регистратора домена, чтобы Cloudflare стал авторитетным DNS-сервером. Сам домен остаётся у регистратора — меняется только то, кто отвечает за DNS.
- Откройте dash.cloudflare.com и нажмите Add a site. Введите домен и выберите план Free. Cloudflare просканирует существующие DNS-записи.
- Проверьте записи. Cloudflare импортирует их автоматически, но сверьте: A-запись основного домена, CNAME для www, MX-записи (облако должно быть серым), TXT-записи (SPF, DKIM, верификация Google или Яндекс).
- Замените nameservers у регистратора. Cloudflare выдаст два NS-адреса вида
anna.ns.cloudflare.comиbob.ns.cloudflare.com(имена уникальны для каждого домена) — их нужно прописать в панели регистратора.
| Регистратор | Где менять |
|---|---|
| Reg.ru | Домены → Управление → DNS-серверы |
| Namecheap | Domain List → Manage → Nameservers → Custom DNS |
| GoDaddy | My Products → DNS → Nameservers → Change |
| Beget | Домены → DNS |
| TimeWeb | Домены и поддомены → NS серверы |
- Дождитесь активации. Обычно 10–30 минут, максимум 24 часа. Cloudflare пришлёт email. После активации домен управляется через Cloudflare, автоматически выпускается SSL-сертификат и доступны все остальные сервисы Cloudflare.
Практические настройки DNS
Подключение сайта к серверу. Тип A, имя @, значение — IPv4 сервера, облако оранжевое. Для www — CNAME на основной домен, облако оранжевое.
Подключение Cloudflare Pages. Тип CNAME, имя @ (или нужный поддомен), значение — your-project.pages.dev, облако оранжевое.
Настройка почты через Google Workspace. Тип MX, имя @, значение aspmx.l.google.com с приоритетом 1, облако серое. Плюс TXT с v=spf1 include:_spf.google.com ~all.
Email Routing (пересылка на Gmail). Настраивается в разделе Email → Email Routing — Cloudflare сам создаст нужные MX-записи.
Подключение Tunnel. Если создаёте Tunnel через дашборд, Cloudflare автоматически создаст CNAME-запись с tunnel-id.cfargotunnel.com. Вручную добавлять не нужно.
Полезные фичи DNS
- DNSSEC — защита от подмены DNS-ответов. Включается одной кнопкой: DNS → Settings → Enable DNSSEC. После включения нужно добавить DS-запись у регистратора (Cloudflare покажет параметры).
- Always Use HTTPS — перенаправляет все HTTP-запросы на HTTPS. Включается в SSL/TLS → Edge Certificates → Always Use HTTPS.
- Wildcard-записи — запись *.mysite.ru перенаправляет все поддомены на один IP или CNAME. Полезно для мультитенантных приложений.
Cloudflare Workers
Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Код выполняется на ближайшем к пользователю сервере из 330+ дата-центров. Проще говоря: пишете функцию на JavaScript или TypeScript, деплоите — и она работает по всему миру без серверов, без контейнеров, без DevOps.
Чаще всего Workers используют для:
- API-прокси — скрыть ключи от клиента, добавить CORS.
- Редиректы — сложная логика перенаправлений без Page Rules.
- Обработка вебхуков — принять данные от Telegram, Stripe, GitHub.
- Telegram-бот — бот целиком на Workers, без сервера.
- SSR — серверный рендеринг для фронтенд-фреймворков.
- A/B тестирование — разные версии страницы для разных пользователей.
- Геолокация — контент на основе страны или города посетителя.
Быстрый старт: первый Worker за 5 минут
Шаг 1. Установите CLI и авторизуйтесь.
npm install -g wrangler
wrangler login
Шаг 2. Создайте проект из шаблона Hello World.
npm create cloudflare@latest my-worker
cd my-worker
Шаг 3. Откройте src/index.ts и замените содержимое.
export default {
async fetch(request) {
return new Response("Привет из Cloudflare Workers!", {
headers: { "Content-Type": "text/plain;charset=UTF-8" },
});
},
};
Шаг 4. Запустите локально и проверьте ответ на http://localhost:8787.
wrangler dev
Шаг 5. Задеплойте. Worker будет доступен по адресу https://my-worker.
wrangler deploy
Хранилища Workers
У Workers четыре типа хранилищ. Для большинства задач хватает KV, но у каждого своя ниша.
| Хранилище | Тип | Для чего | Бесплатно |
|---|---|---|---|
| KV | Key-value | Конфиги, кэш, сессии | 1 ГБ, 100K чтений/день |
| R2 | Object storage | Файлы, картинки, бэкапы | 10 ГБ, egress бесплатно |
| D1 | SQLite | Реляционные данные | 5 ГБ |
| Durable Objects | Stateful | Чаты, счётчики, координация | Только платный план |
KV — key-value хранилище
Workers KV — глобальное хранилище ключ-значение. Данные реплицируются по всем Edge-серверам. Идеально для конфигурации, кэша и небольших данных.
Создание namespace:
wrangler kv namespace create MY_KV
Привязка в wrangler.toml:
[[kv_namespaces]]
binding = "MY_KV"
id = "<namespace-id>"
Использование в коде:
export default {
async fetch(request, env) {
// Записать
await env.MY_KV.put("user:123", JSON.stringify({
name: "Sergey",
plan: "free"
}));
// Прочитать
const user = await env.MY_KV.get("user:123", "json");
// Удалить
await env.MY_KV.delete("user:123");
return Response.json(user);
},
};
Лимиты KV и Workers на бесплатном тарифе
| Параметр | Free | Paid ($5/мес Workers) |
|---|---|---|
| KV: чтений в день | 100 000 | Безлимитно |
| KV: записей в день | 1 000 | Безлимитно |
| KV: хранилище | 1 ГБ | Безлимитно |
| KV: макс. размер значения | 25 МБ | 25 МБ |
| KV: макс. размер ключа | 512 байт | 512 байт |
| Workers: запросов в день | 100 000 | 10 миллионов (включено) |
| Workers: CPU time / запрос | 10 мс | 30 с |
| Workers: размер скрипта | 1 МБ | 10 МБ |
| Workers: количество Workers | 100 | 500 |
| Workers: Cron Triggers | 5 | 5 |
| Workers: cold start | < 1 мс | < 1 мс |
100 000 запросов в день — это много. Для API-прокси, ботов, редиректов и обработки форм бесплатного тарифа хватает с большим запасом. KV оптимизирован под чтение — записи eventual-consistent, изменение может стать видимым на всех серверах через 30–60 секунд. Для частых записей используйте Durable Objects или D1.
Cloudflare Tunnels
Cloudflare Tunnel (раньше назывался Argo Tunnel) — сервис, который создаёт зашифрованное соединение между вашим локальным сервером и глобальной сетью Cloudflare. Без белого IP, без проброса портов, без настройки NAT.
flowchart LR
A["Посетитель"] --> B["Cloudflare CDN"]
B --> C["Tunnel"]
C --> D["cloudflared на вашем сервере"]
D --> E["localhost:3000"]
На вашем сервере запускается демон cloudflared. Он устанавливает исходящее соединение с Cloudflare (не входящее!), Cloudflare привязывает поддомен к этому туннелю. Посетитель заходит на app.mysite.ru → Cloudflare → туннель → ваш localhost. Весь трафик идёт через Cloudflare с SSL, CDN и защитой. Ваш IP скрыт. Порты закрыты.
Важно: cloudflared устанавливает только исходящие подключения. Не нужно открывать порты на файрволе или роутере. Это безопаснее, чем проброс портов — ваш сервер вообще не светится в интернете.
Зачем нужен Tunnel
- Показать localhost заказчику — разрабатываете на ноутбуке, клиент видит результат по красивому URL.
- Домашний NAS — доступ к Synology, TrueNAS, Raspberry Pi из интернета без белого IP.
- Webhook для разработки — Telegram, Stripe, GitHub шлют вебхуки на ваш localhost.
- Self-hosted инструменты — Grafana, Gitea, n8n, Home Assistant доступны по HTTPS.
- Staging-сервер — показать staging-версию проекта без деплоя на хостинг.
- SSH без белого IP — безопасный доступ к серверу через Cloudflare Access.
Быстрый старт: Tunnel за 5 минут
Вариант 1. Через дашборд (рекомендуется для новичков):
- Откройте dash.cloudflare.com → Zero Trust → Networks → Tunnels.
- Нажмите Create a tunnel, выберите Cloudflared, задайте имя.
- Скопируйте команду установки cloudflared для вашей ОС и запустите её на сервере — туннель подключится автоматически.
- Добавьте Public hostname: поддомен → http://localhost:3000. Готово — app.mysite.ru ведёт на localhost:3000.
Вариант 2. Через CLI. Установка cloudflared:
# macOS
brew install cloudflared
# Ubuntu/Debian
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
# Windows
winget install Cloudflare.cloudflared
# Авторизация
cloudflared tunnel login
# Создание туннеля
cloudflared tunnel create my-tunnel
# Привязка DNS
cloudflared tunnel route dns my-tunnel app.mysite.ru
# Запуск
cloudflared tunnel --url http://localhost:3000 run my-tunnel
Конфигурация через файл
Для постоянной работы создайте ~/.cloudflared/config.yml. Один туннель может обслуживать несколько поддоменов — в ingress перечислите все hostname, cloudflared будет маршрутизировать запросы к нужному сервису.
tunnel: <tunnel-id>
credentials-file: /root/.cloudflared/<tunnel-id>.json
ingress:
# Веб-приложение
- hostname: app.mysite.ru
service: http://localhost:3000
# NAS
- hostname: nas.mysite.ru
service: https://192.168.1.100:5001
originRequest:
noTLSVerify: true
# Grafana
- hostname: grafana.mysite.ru
service: http://localhost:3001
# Обязательное правило по умолчанию
- service: http_status:404
cloudflared tunnel run my-tunnel
Tunnel как системный сервис
Чтобы туннель пережил перезагрузку сервера, ставим его как системный сервис.
# Linux
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
# macOS
sudo cloudflared service install
sudo launchctl load /Library/LaunchDaemons/com.cloudflare.cloudflared.plist
Quick Tunnel
Для быстрого показа localhost без настройки домена и авторизации — Quick Tunnel. Cloudflare выдаст временный URL вроде https://random-words.trycloudflare.com. Работает, пока запущена команда.
cloudflared tunnel --url http://localhost:3000
Подходит для быстрой демонстрации, тестирования вебхуков, показа прототипа коллеге. Для постоянного доступа используйте именованный туннель с привязкой к домену — Quick Tunnel временный, URL меняется при каждом запуске.
Практические сценарии
- Домашний NAS (Synology). Установите cloudflared на NAS (Docker или пакет), создайте туннель через дашборд, добавьте hostname nas.mysite.ru → https://localhost:5001, включите noTLSVerify: true (у Synology самоподписанный сертификат). Опционально: добавьте Cloudflare Access для авторизации.
- Webhook для разработки. Запустите Quick Tunnel, получите URL, укажите его как webhook URL в Telegram, Stripe или GitHub — запросы приходят на ваш localhost.
- Home Assistant. Создайте туннель, hostname home.mysite.ru → http://localhost:8123, в configuration.yaml добавьте http.use_x_forwarded_for: true и trusted_proxies с 0.0.0.0/0.
- n8n (self-hosted автоматизация). Hostname n8n.mysite.ru → http://localhost:5678. Добавьте Cloudflare Access, чтобы закрыть доступ посторонним.
Tunnel + Cloudflare Access
Cloudflare Access позволяет закрыть доступ к Tunnel за авторизацию. Бесплатно до 50 пользователей. Настройка: Zero Trust → Access → Applications → Add an application, тип Self-hosted, домен grafana.mysite.ru, политика Allow → Emails ending in @mycompany.com. Теперь при заходе на grafana.mysite.ru Cloudflare покажет экран авторизации — только разрешённые пользователи попадут дальше.
Tunnel vs альтернативы
| Параметр | Cloudflare Tunnel | ngrok | Tailscale Funnel |
|---|---|---|---|
| Цена | Бесплатно | Бесплатно (с лимитами) | Бесплатно (с лимитами) |
| Свой домен | Да | Только платно | Нет |
| Несколько хостов | Да (ingress) | Один на туннель | Один |
| CDN и защита | Включены | Нет | Нет |
| Access (авторизация) | 50 пользователей бесплатно | OAuth (платно) | Tailscale ACL |
| Постоянный URL | Да | Только платно | Да |
| Системный сервис | Да | Да (платно) | Да |
Когда использовать
| Ситуация | Подходит ли связка | Почему |
|---|---|---|
| Пет-проект или MVP с custom-доменом | Да | DNS + Pages + Tunnel закрывают всё, хостинг не нужен |
| Telegram-бот, вебхук-обработчик | Да | Worker на Edge + Tunnel для разработки, всё бесплатно |
| Self-hosted n8n / Grafana / Gitea для команды | Да | Tunnel даёт HTTPS, Access закрывает авторизацию |
| Сайт с глобальной аудиторией и CDN | Да | 330+ дата-центров, оранжевое облако включено по умолчанию |
| Демонстрация прототипа заказчику | Да | Quick Tunnel за одну команду, без регистрации домена |
| Высоконагруженный бэкенд с длинными запросами | Нет | Worker CPU time ограничен 10 мс на Free, для долгих задач нужен VPS |
| Реляционные данные с миллионами строк | Нет | D1 ограничен 5 ГБ, для серьёзных нагрузок нужен внешний Postgres |
| Корпоративный сайт с комплаенсом в РФ | Осторожно | Нужно проверить требования по хранению данных и сертификации |
Пример
Полный пример: API-прокси на Workers, который скрывает ключ от внешнего сервиса, плюс редирект для пользователей из России, плюс обработчик Telegram-бота в одном файле.
// Worker: API-прокси с редиректом по геолокации
// Развёртывание: wrangler deploy
// Секреты задаются через: wrangler secret put API_KEY
// wrangler secret put BOT_TOKEN
export default {
async fetch(request, env) {
const url = new URL(request.url);
// Редирект старых URL
const redirects = {
"/old-page": "/new-page",
"/blog/2024": "/archive/2024",
};
if (redirects[url.pathname]) {
return Response.redirect(
`${url.origin}${redirects[url.pathname]}`,
301
);
}
// Геолокация: русскоязычных — на /ru
const country = request.cf?.country;
if (url.pathname === "/" && country === "RU") {
return Response.redirect(`${url.origin}/ru`, 302);
}
// Telegram-бот: POST /bot
if (url.pathname === "/bot" && request.method === "POST") {
const update = await request.json();
const chatId = update.message?.chat?.id;
const text = update.message?.text;
if (chatId && text) {
await fetch(
`https://api.telegram.org/bot${env.BOT_TOKEN}/sendMessage`,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chat_id: chatId,
text: `Вы написали: ${text}`,
}),
}
);
}
return new Response("OK");
}
// API-прокси: GET /api/data
if (url.pathname === "/api/data") {
const response = await fetch("https://api.example.com/data", {
headers: {
"Authorization": `Bearer ${env.API_KEY}`,
"Content-Type": "application/json",
},
});
return new Response(response.body, {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
});
}
return new Response("Not found", { status: 404 });
},
};
Установка вебхука. Чтобы Telegram знал, куда слать сообщения, выполните один раз:
curl 'https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://my-bot.example.workers.dev'
Привязка к своему домену: откройте домен в Cloudflare → Workers Routes → добавьте маршрут api.mysite.ru/* → выберите Worker. Убедитесь, что DNS-запись для api.mysite.ru существует (A или CNAME с оранжевым облаком). Теперь https://api.mysite.ru/любой-путь обрабатывается Worker.
Ограничения
Ограничения
Что учитывать
Бесплатный тариф имеет жёсткие лимиты, которые важно знать до запуска.
Workers CPU time на Free
— только 10 мс на запрос — тяжёлые вычисления не помещаются, нужен платный тариф ($5/мес).
Workers KV оптимизирован под чтение
— записи eventual-consistent, изменение видно на всех серверах через 30–60 секунд.
D1 ограничен 5 ГБ
— для серьёзных реляционных данных нужен внешний Postgres (Neon, Supabase, Turso).
Durable Objects только на платном плане
— для стейтфул-логики (чаты, счётчики, координация) нужен Workers Paid.
Cloudflare проксирует только HTTP/HTTPS
— для почты (MX), SSH, FTP нужно ставить серое облако или использовать отдельные сервисы.
Quick Tunnel
— временный, URL меняется при каждом запуске, не подходит для продакшена.
Cloudflare Access бесплатен до 50 пользователей
— для команды больше нужен платный план.
Cloudflare как компания подчиняется законам США
— для проектов с жёсткими требованиями к локализации данных нужно проверять комплаенс.
Антипаттерны
Антипаттерны
Чего не делать
Частые ошибки, которые ломают работу связки или открывают дыры в безопасности.
Не включать оранжевое облако для MX-записей
— почта перестанет ходить, Cloudflare проксирует только HTTP/HTTPS.
Не оставлять дефолтный SSL-режим Flexible — между Cloudflare и сервером трафик идёт по HTTP, ключ API можно перехватить.
Всегда ставьте Full (Strict).
Не открывать SSH/FTP через оранжевое облако — Cloudflare их не проксирует, а серое облако отдаёт IP сервера всем желающим.
Для SSH используйте Cloudflare Access.
Не хранить секреты в коде Worker — только в wrangler secret или Settings
→ Variables. Код публикуется в Cloudflare и виден в дашборде.
Не использовать KV для частых записей
— записи eventual-consistent, изменение видно через 30–60 секунд, счётчики и логи теряют точность.
Не делать Quick Tunnel для продакшена
— URL временный и меняется при каждом запуске, для постоянного доступа нужен именованный туннель с привязкой к домену.
Не забывать про ingress-правило по умолчанию — без - service:
http_status:404 cloudflared падает или маршрутизирует запросы некорректно.
Не ставить самоподписанный сертификат на бэкенд без noTLSVerify:
true в ingress — cloudflared не сможет подключиться и вернёт 502.
Чеклист
Чеклист
Проверка перед запуском
Перед запуском пройдитесь по чеклисту — если что-то не отмечено, рабочая связка скорее всего сломается в первый же день.
Домен добавлен в Cloudflare
— nameservers заменены у регистратора, активация подтверждена email.
DNS-записи проверены
— A, CNAME, MX, TXT импортированы корректно, оранжевое облако включено для веб-записей и выключено для MX.
SSL/TLS режим установлен в Full (Strict)
— не Flexible, иначе между Cloudflare и сервером трафик идёт без шифрования.
DNSSEC включён в настройках DNS и DS-запись добавлена у регистратора.
Always Use HTTPS включён в SSL/TLS
→ Edge Certificates.
wrangler установлен и авторизован
— wrangler whoami возвращает ваш account ID.
Первый Worker задеплоен и отвечает Hello на *.workers.dev
— sanity check перед привязкой к домену.
Секреты хранятся в Environment Variables
— wrangler secret put API_KEY, никаких ключей в коде.
Worker привязан к домену через Workers Routes
— DNS-запись для поддомена существует и имеет оранжевое облако.
KV namespace создан
— wrangler kv namespace create MY_KV, привязка прописана в wrangler.toml.
cloudflared установлен на сервере
— cloudflared —version возвращает версию.
Туннель создан и подключён — виден в Zero Trust
→ Networks → Tunnels с статусом Healthy.
Public hostname настроен
— app.mysite.ru ведёт на нужный localhost-порт и реально открывается в браузере.
cloudflared работает как сервис
— systemctl status cloudflared показывает active, переживает перезагрузку.
Cloudflare Access настроен для приватных сервисов
— Grafana, n8n, Home Assistant закрыты авторизацией через email или SSO.
Ссылки
Ссылки
- Документация: Cloudflare DNS — документация
- Документация: Типы DNS-записей
- Документация: Proxy status (оранжевое облако)
- Документация: Cloudflare Workers — документация
- Документация: Workers KV
- Документация: Примеры Workers
- Документация: Лимиты Workers
- Документация: Pricing Workers
- Документация: Cloudflare Tunnel — документация
- Документация: Быстрый старт Tunnel
- Репозиторий: cloudflared на GitHub
- Документация: Cloudflare Access