Cloudflare Tunnel - это Zero Trust
туннель который обеспечивает безопасный доступ к локальным ресурсам через Интернет без необходимости в публичных IP-адресах или открытых портах брандмауэра. Имеет ряд ограничений и особенностей таких как ограничение разовой передачи данных (100 Мб за файл на бесплатном плане) более низкая надежность и легкая блокируемость.
Как это работает?
Туннели Cloudflare работают путем установки приложения/сервиса Cloudflare под названием Cloudflared
, этот сервис создает обратный туннель, который взаимодействует с серверами Cloudflare и подключается к ближайшему ЦОД Cloudflare. Это устанавливает безопасное соединение между Cloudflare и нашей локальной машиной. Теперь наше устройство может взаимодействовать с Cloudflare.
Создание туннеля
Давайте создадим туннель и выставим тестовое приложение в общедоступный интернет. Вначале необходимо перенести управление вашим доменом в Cloudflare, если вы еще это не сделали, то как это сделать можно прочитать здесь. Далее открывем Cloudflare Dash, в левом меню выбираем Zero Trust
. Перейдя в панель управления ZeroTrust, выберете в левом меню Networks
> Tunnels
Выбираем тип туннеля Cloudflared
и нажимаем Next
Задаем имя туннеля и снова нажимаем Next
В этом примере я буду публиковать Uptime Kuma. В поле Subdomain
указываем субдомен на котором будет доступен ваш сервис. DNS-запись создастся автоматически для вашего домена при создании туннеля, но при удалении туннеля нужно будет удалять ее вручную. Поле Type
оставляем без изменений HTTP
. При использовании в docker контейнере, в поле URL
вписываем container_name:port
и нажимаем кнопку Next
На следующем шаге вы выбираем операционную систему Docker
и копируем токен, он понадобится далее.
Подключение к туннелю
Создаем .env
файл и вместо your_tunnel_token
вставляем полученный ранее токен:
nano .env
TUNNEL_TOKEN='your_tunnel_token'
Затем создаем docker-compose
файл
version: "3.8"
services:
uptime-kuma:
restart: unless-stopped
ports:
- 3001:3001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
container_name: uptime-kuma
image: louislam/uptime-kuma:1
cf-tunnel:
image: cloudflare/cloudflared:latest
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
Запускаем контейнер:
docker compose up -d
Если туннель успешно запустился, то в списке туннелей вы увидите статус HEALTHY
Перейдите на URL-адрес который вы задали при настройке и проверьте, что он доступен.
Так же его можно использование в связке с обратным прокси сервером, например traefik, для публикации сразу нескольких сервисов, для этого необходимо добавить к docker-compose
файл Traefik следующее содержимое:
services:
cf-tunnel:
image: cloudflare/cloudflared:latest
container_name: cf-tunnel
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
networks:
- proxy
restart: unless-stopped
networks:
proxy:
external: true
Заключение
Мы успешно выставили сервис мониторинга Uptime Kuma в Интернет с помощью туннеля Cloudflare, безопасно, через публичную запись DNS и без использования статического белого IP адреса.