Self-hosting. Cloudflare Tunel

Cloudfkare Tunel - это zerotier ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСрвисов ΠΈ сайтов Π±Π΅Π· использования Π±Π΅Π»ΠΎΠ³ΠΎ ip адрСса. Π˜ΠΌΠ΅Π΅Ρ‚ ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ особСнностСй Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (100 Мб Π·Π° Ρ„Π°ΠΉΠ» Π½Π° бСсплатном ΠΏΠ»Π°Π½Π΅) Π±ΠΎΠ»Π΅Π΅ низкая Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ лСгкая Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ docker compose Ρ„Π°ΠΉΠ»Π°:

Cloudflare Tunel

Π”ΠΎΠΊΠ΅Ρ€ Ρ„Π°ΠΉΠ» написан ΠΈΠ· расчСт Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ 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

Для пСрСадрСсации запросов Ρ‡Π΅Ρ€Π΅Π· Self-hosting. Cloudflare Tunel Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Traefik Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².

Для этого ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ настройки:

Настройка Cloudflare Tunel вмСстС с Traefik.png
Для случая ΠΊΠΎΠ³Π΄Π° Π² Π΅Π΄ΠΈΠ½ΠΎΠΉ сСти Π΄ΠΎΠΊΠ΅Ρ€Π°, ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ip адрСс ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°/сСрвСра Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ traefik входящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° 443 ΠΏΠΎΡ€Ρ‚Ρƒ.

Настройка Cloudflare Tunel вмСстС с Traefik-1.png

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ настройку HTTP2 connection, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Origin Server Name ΠΈ HTTP Host Header ΡƒΠΊΠ°Π·Π°Π² https адрСс ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ traefik ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сСрвис ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ.


ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ip ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ использовании тунСля

ΠŸΡ€ΠΈ использованиС Π·Π°Ρ‰ΠΈΡ‚Ρ‹ CrowdSec Π² связкС с проксированиС cloudflare ΠΈΠ»ΠΈ Cloudflare Tunel Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π±Π°Π½ΠΎΠΌ Π½Π΅ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π° Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ прокси.

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ настройкС crowdsec ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ip адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π° доступа, Π½ΠΎ ΠΏΡ€ΠΈ использовании слоТной систСмы проксирования ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄ 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