Self-hosting. Cloudflare Tunel

Cloudfkare Tunel - это zerotier подключение для публикации сервисов и сайтов без использования белого ip адреса. Имеет ряд ограничений и особенностей таких как ограничение разовой передачи данных (100 Мб за файл на бесплатном плане) более низкая надежность и легкая блокируемость.

Документация: Cloudflare Tunnel | Cloudflare Zero Trust docs

Пример docker compose файла:

type: docker-compose
tags:
aliases:
program:

  • cloudflared
    modified: 2024-10-06T00:57:38+03:00
    МОС: “[[Docker Compose]]”

Докер файл написан из расчет на подключение к Traefik в сети докер proxy. Токен выдается при создании нового подключения в cloudflare

services:
  cloudflare:
    image: cloudflare/cloudflared:latest
    container_name: cloudflare
    command: tunnel --no-autoupdate run
    environment:
      - TUNNEL_TOKEN=$TUNNEL_TOKEN
    networks:
      - proxy
    restart: unless-stopped

networks:
  proxy:
    external: true

Настройка Cloudflare Tunel вместе с Traefik

type: note
tags:
aliases:
data: 2024-08-18 01:15
modified: 2024-10-25T13:00:53+03:00
dg-publish: true

Для переадресации запросов через [[Self-hosting. Cloudflare Tunel|Self-hosting. Cloudflare Tunel]] на внутренний [[Self-hosting. Traefik|Traefik]] необходимо выполнить дополнительные настройки для передачи заголовков.

Для этого при создании нового подключения необходимо указать следующие настройки:


Для случая когда в единой сети докера, или указать Ip адрес контейнера/сервера на котором прослушивает traefik входящий трафик на 443 порту.

Включить настройку HTTP2 connection, а так же заполнить Origin Server Name и HTTP Host Header указав https адрес по которому traefik обрабатывает сервис который необходимо пробросить.


[!urls]- Упоминания:

Передача ip клиента при использовании тунеля

type: note
tags:
aliases:
data: 2025-06-09 00:05
modified: 2025-06-09T01:48:04+03:00
dg-publish: true
discourse_post_id: 59
discourse_topic_id: 39
discourse_url: https://gig.ovh//t/39
discourse_tags:
discourse_category_id: 6
discourse_category: Статьи от Deniom

При использование защиты [[Self-hosting. CrowdSec|CrowdSec]] в связке с проксирование cloudflare или [[Self-hosting. Cloudflare Tunel|Cloudflare Tunel]] возникает проблема с баном не атакующего клиента а вышестоящего прокси.

В обычной настройке crowdsec получает ip адрес клиента которого надо заблокировать из журнала доступа, но при использовании сложной системы проксирования когда перед [[Self-hosting. Traefik|Traefik]] находится еще один сервер пробирования (например cloudflare) клиентом в журнале становиться сам вышестоящий прокси сервер.

Настройка при использовании cloudflare tunnel

Для решения данной проблемы в статическую конфигурацию traefik необходимо добавить разрешенные прокси.

Разрешенные ip с которых необходимо передавать ip клиента указываются в разделе

forwardedHeaders:
      trustedIPs:

Пример:

entryPoints:
  http:
    address: ":80"
    forwardedHeaders:
      trustedIPs: &trustedIPs
        - 192.168.0.1/24
        - 100.127.101.215
    http:
      middlewares:
        - crowdsec@file
      redirections:
        entryPoint:
          to: https
          scheme: https
  https:
    address: ":443"
    forwardedHeaders:
      trustedIPs: *trustedIPs
    http:
      middlewares:
        - crowdsec@file

Необходимо указать ip адрес машины на которой непосредственно установлен cloudflare tunnel (если на одной машине в единой сети докер проблем не должно быть).

[!note]
Конструкция &trustedIPs используется при объявлении блока конфигурации для повторного использования. Для вызова используется конструкция *trustedIPs

Настройка при использовании проксирования cloudflare без cloudflare tunnel

Для решения проблемы когда перед traefik находится только сам сервер cloudflare можно воспользоваться плагином для traefik.

Плагин: Plugin
GitHub: GitHub - BetterCorp/cloudflarewarp

[!danger]
Плагин не обновляется возможно состав адресов неактуальный

Плагин по сути выполняет те же функции что и указание доверенных прокси при этом в его состав уже включены все адреса серверов cf используемые для проксирования.

Пример статической конфигурации:

entryPoints:
  http:
    address: ":80"
    http:
      middlewares:
        - crowdsec@file
        - cloudflarewarp@file
      redirections:
        entryPoint:
          to: https
          scheme: https
  https:
    address: ":443"
    http:
      middlewares:
        - crowdsec@file
        - cloudflarewarp@file

experimental:
  plugins:
    crowdsec-bouncer-traefik-plugin:
      moduleName: "github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin"
      version: "v1.4.2"
    cloudflarewarp:
      moduleName: github.com/BetterCorp/cloudflarewarp
      version: v1.3.3

В папке динамической конфигурации необходимо создать файл для нового middlewares следующего содержимого:

http:
  middlewares:
    cloudflarewarp:
      plugin:
        cloudflarewarp:
          disableDefault: false

[!urls]- Упоминания:


[!urls]- Упоминания:

  • [[Self-hosting программы]]
  • [[Сервер Gateway]]
  • [[Получите доступ к локальной установке Immich через Интернет, используя свой собственный домен|Инструкция по настройке на примере Immich]]

[!description]- Примечание
Примечание:: Публикация сервиса в интернете без белого IP