cloudflared — sing-box
Входящий cloudflared запускает встроенный коннектор Cloudflare Tunnel. Вместо прослушивания локального порта он сам подключается к периферии Cloudflare с токеном туннеля и передаёт каждое соединение, доставленное туннелем, — TCP, UDP и ICMP, — движку маршрутизации sing-box с тегом этого входящего.
Без локального слушателя
У cloudflared нет адреса прослушивания: поля прослушивания (listen, listen_port и т. д.), описанные на странице Входящие, не применяются. Всё приходит через исходящие соединения туннеля.
Параметры входящего
type: "cloudflared" в inbounds[]:
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
token | string | (required) | <base64 tunnel token> | Токен туннеля из панели Cloudflare Zero Trust (Networks → Tunnels → Install connector). Без него запуск завершается ошибкой. |
ha_connections | int | 4 | <int> | Число соединений высокой доступности с периферией Cloudflare. 0 или отсутствие значения означает 4; ограничено числом обнаруженных адресов периферии. |
protocol | string | auto | auto | quic | http2 | h2mux | Транспорт к периферии. auto (или пусто) начинает с QUIC и переключается на HTTP/2 после повторных сбоев или если QUIC выглядит заблокированным. h2mux принимается, но с предупреждением обрабатывается как http2. |
post_quantum | bool | false | true | false | Использовать постквантовый обмен ключами. Только QUIC: транспорт фиксируется на QUIC (без отката на HTTP/2), а сочетание с protocol: http2 отклоняется. |
edge_ip_version | int | 0 | 0 | 4 | 6 | Версия IP для подключения к периферии Cloudflare; 0 — автоматический выбор. |
datagram_version | string | (remote) | v2 | v3 | Версия протокола датаграмм для UDP поверх QUIC. Если не задана, следует удалённой настройке функций Cloudflare для аккаунта (начиная с v2). Имеет смысл только с QUIC. |
grace_period | badoption.Duration | 30s | <duration> | Окно корректного завершения для активных соединений с периферией. |
region | string | (from token) | <region> | Выбор региона периферии Cloudflare. Отклоняется, если токен уже содержит конечную точку. |
control_dialer | DialerOptions | (direct) | Dial Fields | Поля набора для соединений с управляющей плоскостью Cloudflare. Имена хостов разрешаются через DNS-маршрутизатор sing-box. |
tunnel_dialer | DialerOptions | (direct) | Dial Fields | Поля набора для соединений с плоскостью данных периферии Cloudflare. |
Исходный код: option/cloudflared.go:5-16 · зафиксировано на v1.14.2 (af6e64c)
Примеры
Принимать всё, что доставляет туннель, и отправлять напрямую:
json
{
"inbounds": [
{
"type": "cloudflared",
"tag": "cf-in",
"token": "<tunnel token>"
}
],
"outbounds": [
{ "type": "direct", "tag": "direct" }
],
"route": {
"rules": [
{ "inbound": ["cf-in"], "outbound": "direct" }
]
}
}Примечания
- Тип компилируется только с тегом сборки
with_cloudflared; другие сборки завершаются ошибкой при запуске с подсказкой пересобрать. - Какие публичные имена хостов и частные сети обслуживает туннель, настраивается в панели Cloudflare, а не в sing-box. Адреса источников, на которые указывают эти правила ingress, становятся назначениями, которые маршрутизирует sing-box, поэтому правило с
inbound: ["<tag>"]решает, какой исходящий к ним ведёт. - С
protocolпо умолчанию коннектор начинает с QUIC и переключается на HTTP/2 после пяти неудачных попыток (или сразу, если QUIC выглядит заблокированным). Чтобы зафиксировать транспорт, задайтеquicилиhttp2. post_quantumработает только поверх QUIC; вместе сprotocol: http2входящий завершается ошибкой при запуске.regionконфликтует с токенами, в которые уже встроена конечная точка.control_dialerиtunnel_dialerпринимают обычные поля набора, так что сам туннель можно устанавливать через другой исходящий (detour) или привязать к интерфейсу.
Сравнение с другими ядрами
- У Xray-core и mihomo нет встроенного коннектора Cloudflare Tunnel; с ними отдельный демон
cloudflaredзапускают рядом с ядром.
Исходный код: option/cloudflared.go:5-16 · v1.14.2 (af6e64c)
