metalnikovg.ru
MetalnikovG.ru

Cоздание Cloudflare Tunnel

Banner.png
Опубликовано
//
3 мин. чтения

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
.env
TUNNEL_TOKEN='your_tunnel_token'

Затем создаем docker-compose файл

docker-compose.yaml
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 адреса.