INTEGRITY Документация

Маршрутизация

Cloudflare Tunnel направляет трафик из сети Cloudflare к сервисам, работающим за cloudflared. Когда вы опубликовать приложение, вы связываете публичное имя хоста с локальным сервисом, например, app.example.com к http://localhost:8080 и Cloudflare применяет кеширование CDN, WAF и защиту от DDoS-атак, прежде чем переслать запрос на ваш источник.

Несколько исходящих подключений от cloudflared распределяются между дата-центрами Cloudflare для надёжности и отказоустойчивости.

Опубликованные приложения

Опубликованное приложение представляет собой привязку имени хоста к сервису, заданную в конфигурации туннеля. Каждая привязка сообщает cloudflared какая локальная служба должна получать трафик для указанного публичного имени хоста.

На одном туннеле можно опубликовать несколько приложений. Для каждого приложения укажите:

Когда вы добавляете маршрут через панель управления, Cloudflare автоматически создаёт запись DNS, указывающую имя хоста на поддомен вашего туннеля (<UUID>.cfargotunnel.com).

Поддерживаемые протоколы

В таблице ниже перечислены типы служб, которые можно направить на общедоступное имя хоста. Для служб, отличных от HTTP, требуется установка cloudflared на клиенте чтобы конечные пользователи могли подключиться.

Тип службы Описание Пример service значение
HTTP Проксирует входящие HTTPS-запросы к вашей локальной веб-службе по протоколу HTTP. http://localhost:8000
HTTPS Проксирует входящие HTTPS-запросы напрямую к вашей локальной веб-службе. Вы можете отключить проверку TLS для самоподписанных сертификатов. https://localhost:8000
UNIX То же самое, что и HTTP, но использует Unix-сокет. unix:/home/production/echo.sock
UNIX + TLS То же самое, что и HTTPS, но использует Unix-сокет. unix+tls:/home/production/echo.sock
TCP Передаёт TCP через WebSocket-соединение. Конечные пользователи выполняют cloudflared access tcp к подключиться. Для долгоживущих подключений используйте Клиент-Tunnel взамен. tcp://localhost:2222
SSH Передаёт SSH через WebSocket-соединение. Конечные пользователи выполняют cloudflared access ssh к подключиться. Для долгоживущих подключений используйте Клиент-Tunnel взамен. ssh://localhost:22
RDP Передаёт RDP через WebSocket-соединение. Дополнительные сведения см. в Подключитесь к RDP с помощью cloudflared на стороне клиента. rdp://localhost:3389
SMB Передаёт SMB через WebSocket-соединение. Дополнительные сведения см. в Подключение к SMB с помощью cloudflared на стороне клиента. smb://localhost:445
HTTP_STATUS Отвечает на все запросы фиксированным кодом состояния HTTP. http_status:404
BASTION Позволяет cloudflared чтобы он выступал в роли jump host, обеспечивая доступ к любому локальному адресу. bastion
HELLO_WORLD Тестовый сервер для проверки подключения Cloudflare Tunnel (для туннели с локальным управлением только). hello_world

Служебные адреса IPv6

Если значение службы представляет собой литерал IPv6, заключите адрес в квадратные скобки, как определено в RFC 3986 ↗. Скобки обязательны, чтобы : символы в адресе не путались с разделителем порта.

Тип службы Пример service значение
HTTP http://[2001:db8::1]:8000
HTTPS https://[2001:db8::1]:443
TCP tcp://[2001:db8::1]:2222
SSH ssh://[2001:db8::1]:22
RDP rdp://[2001:db8::1]:3389

Именам хостов и IPv4-адресам не нужны скобки: http://localhost:8000 и http://192.0.2.1:8000 действительны в исходном виде.

DNS-записи

Когда вы создаете туннель, Cloudflare генерирует поддомен по адресу <UUID>.cfargotunnel.com. Чтобы направить трафик с вашего имени хоста в туннель, укажите запись CNAME на этот субдомен.

cfargotunnel.com поддомен проксирует трафик только для DNS-записей в том же аккаунте Cloudflare. Если кто-то узнает UUID вашего туннеля, он не сможет создать DNS-запись в другом аккаунте, чтобы проксировать через неё трафик.

Создайте DNS-запись

Чтобы создать запись DNS для Cloudflare Tunnel:

  1. Войдите в Панель управления Cloudflare ↗ и перейдите в DNS-записи для вашего домена.

    Перейдите в Записи ↗
  2. Выберите Add record.

  3. Введите следующие значения:

    • Тип: CNAME
    • Название: Поддомен вашего приложения
    • Цель: <UUID>.cfargotunnel.com
  4. Выберите Save.

Пример заполненных полей для создания новой записи CNAME.

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

cloudflared tunnel route dns <UUID or NAME> www.app.com

Это создаёт запись CNAME, но не проксирует трафик, пока не запущен туннель.

DNS-запись и туннель существуют независимо друг от друга. Вы можете создавать DNS-записи, указывающие на туннель, который не запущен. Если туннель останавливается, DNS-запись не удаляется: посетители увидят 1016 ошибка.

Вы также можете создать несколько DNS-записей, указывающих на один и тот же поддомен туннеля. Если вы направляете трафик от нескольких имён хостов к нескольким службам, создайте запись CNAME для каждого имени хоста. Все записи используют одну и ту же цель.

Load balancing

Используйте публичный балансировщик нагрузки для распределения трафика между серверами, на которых выполняются опубликованные вами приложения. Это обеспечивает переключение при сбое на основе проверок работоспособности и интеллектуальное распределение трафика между регионами.

graph LR
    accTitle: Load balancing traffic to applications behind Cloudflare Tunnel

    A[Internet] --> C{Cloudflare <br> Load Balancer}
    C -- Tunnel 1 --> cf1
    C -- Tunnel 2 --> cf2
    subgraph F[Data center 2]
        cf2[cloudflared]
        S3[App server]
        S4[App server]
        cf2-->S3
        cf2-->S4
    end
    subgraph E[Data center 1]
        cf1[cloudflared]
        S1[App server]
        S2[App server]
        cf1-->S1
        cf1-->S2
    end

Реплики и балансировщики нагрузки

Запуск нескольких cloudflared реплики с одинаковым UUID туннеля обеспечивает базовую отказоустойчивость: если один хост выходит из строя, остальные реплики продолжают обслуживать трафик. Однако балансировщик нагрузки воспринимает все реплики с одинаковым UUID туннеля как единую конечную точку.

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

Добавьте туннель в пул балансировщика нагрузки

Чтобы создать балансировщик нагрузки для приложений, опубликованных через Cloudflare Tunnel:

  1. На панели управления Cloudflare перейдите к разделу Load Balancing страницу.

    Перейдите в Load Balancing ↗
  2. Выберите Создать балансировщик нагрузки, затем выберите Общедоступный балансировщик нагрузки.

  3. В разделе Выберите веб-сайт, выберите домен маршрута опубликованного приложения.

  4. На Имя хоста странице укажите имя хоста для балансировщика нагрузки (например, lb.example.com).

  5. На Пулы странице выберите Создать пул и введите понятное название.

  6. Добавьте endpoint туннеля со следующими значениями:

    • Endpoint Name: Название сервера, на котором запущено приложение
    • Endpoint Address: <UUID>.cfargotunnel.com (найдите Tunnel ID в [панели управления Cloudflare](https://dash.cloudflare.com/) в разделе **Networking** > **Tunnels**)
    • Значение заголовка: Имя хоста маршрута вашего опубликованного приложения (например, app.example.com)
    • Вес: 1 (если конечная точка только одна)
  7. Выберите Резервный пул. См. политики управления трафиком для параметров маршрутизации.

  8. (Рекомендуется) На Мониторы странице привяжите монитор к конечной точке. Для приложения HTTP или HTTPS создайте монитор HTTPS:

    • Тип: HTTPS
    • Путь: /
    • Порт: 443
    • Ожидаемый код(-ы): 200
    • Header Name: Host
    • Значение: app.example.com
  9. Сохраните и разверните балансировщик нагрузки.

Чтобы протестировать, откройте приложение, используя имя хоста балансировщика нагрузки (lb.example.com).

Мониторинг источников TCP-туннелей

Мониторы TCP не поддерживаются для конечных точек туннеля. Вместо этого создайте конечную точку проверки работоспособности на cloudflared хост и используйте HTTPS-монитор. Например, вы можете использовать cloudflared и верните фиксированный ответ с HTTP-статусом:

  1. Добавьте маршрут опубликованного приложения для проверки работоспособности:
    • Имя хоста: health-check.example.com
    • Тип службы: HTTP_STATUS
    • Код состояния HTTP: 200
  2. Создайте монитор с такими настройками:
    • Тип: HTTPS
    • Путь: /
    • Порт: 443
    • Ожидаемый код(-ы): 200
    • Header Name: Host
    • Значение: health-check.example.com

Этот монитор проверяет, что cloudflared доступно. Это не означает, что вышестоящая служба принимает запросы.

Предпочтение локального соединения

Если вы замечаете дисбаланс трафика между конечными точками в разных локациях, вам может понадобиться скорректировать конфигурацию балансировщика нагрузки.

Cloudflare использует Anycast-маршрутизация ↗ чтобы направлять запросы конечных пользователей в ближайший дата-центр. cloudflared предпочитает обслуживать запросы через соединения в том же дата-центре, что может влиять на распределение трафика между конечными точками.

Если вы выполните cloudflared реплики с одним и тем же UUID туннеля, рассмотрите возможность перехода на отдельные туннели для более детального контроля над управление трафиком.

настройки Cloudflare

Опубликованные приложения наследуют настройки Cloudflare для своего имени хоста, включая cache rules, Правила WAF, и другие Правила конфигурации. Вы можете изменить эти настройки для каждого имени хоста в Панель управления Cloudflare ↗.

Если вы используете балансировщик нагрузки, настройки применяются к имени хоста балансировщика нагрузки.