← Cloudflare One / cloudflare-one / team-and-resources / devices / cloudflare-one-client / configure / route-traffic
Архитектура клиента
В этом руководстве объясняется, как Cloudflare One Client (ранее WARP) взаимодействует с операционной системой устройства для маршрутизации трафика в Режим Traffic and DNS режим.
В Режим только DNS режиме информация об IP-трафике неприменима. В Traffic only mode режиме информация о DNS-трафике неприменима.
Поток трафика клиента
Cloudflare One Client предоставляет организациям детальный контроль над приложениями, к которым может обращаться устройство конечного пользователя. Клиент перенаправляет DNS- и сетевой трафик с устройства в глобальную сеть Cloudflare, где в облаке применяются политики Zero Trust. На всех операционных системах служба WARP поддерживает три подключения между устройством и Cloudflare:
| Подключение | Протокол | Назначение |
|---|---|---|
| Туннель WARP (через WireGuard или MASQUE) | UDP | Отправляет IP-пакеты в Gateway для применения сетевых политик, политик HTTP и доступа к приватной сети. |
| DoH ↗ | HTTPS | Отправляет DNS-запросы в Gateway для применения политик DNS. Соединение DoH поддерживается внутри туннеля WARP. |
| Оркестрация устройств | HTTPS | Выполняет регистрацию пользователя, проверяет состояние устройства и применяет настройки профиля клиента устройства. |
flowchart LR
subgraph Device
W[Cloudflare One Client] -.-> D
D[DNS proxy]
W -.-> V[Virtual interface]
end
subgraph Cloudflare
A[Zero Trust account]
subgraph Gateway
N[L3/L4 firewall]
G[DNS resolver]
end
end
W<--"Device
orchestration"-->A
subgraph tunnel["WARP tunnel"]
ip@{ shape: text, label: "Network traffic" }
dns@{ shape: text, label: "DNS traffic" }
end
V --- ip-->N
D --- dns-->G
N --> O[(Application)]
Ваш Split Tunnel конфигурация определяет, какой IP-трафик направляется через туннель WARP. Ваша Local Domain Fallback конфигурация определяет, какие DNS-запросы отправляются в Gateway через DoH. Трафик к API оркестрации устройств конечная точка не подчиняется правилам Split Tunnel, так как соединение всегда работает вне туннеля WARP.
Далее вы узнаете, как Cloudflare One Client настраивает операционную систему для применения правил маршрутизации Local Domain Fallback и Split Tunnel. Детали реализации различаются для десктопных и мобильных клиентов.
Windows, macOS и Linux
Клиент для настольных систем состоит из двух компонентов: службы (демона), которая обеспечивает всю функциональность клиента на вашем устройстве, и графической оболочки, упрощающей взаимодействие пользователя с демоном.
DNS-трафик
Когда вы подключаете Cloudflare One Client, он создает на устройстве локальный DNS-прокси и привязывает его к следующим IP-адресам на порте 53 (порт, отведенный для DNS-трафика):
- IPv4:
127.0.2.2и127.0.2.3 - IPv6:
- macOS и Linux:
fd01:db8:1111::2иfd01:db8:1111::3 - Windows:
::ffff:127.0.2.2
- macOS и Linux:
Затем Cloudflare One Client настраивает операционную систему на отправку всех DNS-запросов на эти IP-адреса. Все сетевые интерфейсы устройства теперь будут использовать этот локальный DNS-прокси для разрешения DNS-имён. Иными словами, весь DNS-трафик теперь будет обрабатываться Cloudflare One Client.
В зависимости от настроек Local Domain Fallback клиент Cloudflare One перенаправит запрос либо в Gateway для применения DNS-политик, либо на ваш частный DNS-резолвер.
- Запросы к Gateway отправляются через наш Подключение DoH внутри туннеля WARP.
- Запросы к вашему приватному DNS-резолверу отправляются внутри туннеля или вне его в зависимости от конфигурации Split Tunnel. Подробнее см. в Как Cloudflare One Client обрабатывает DNS-запросы.
flowchart LR
D{{DNS request}}-->L["Local DNS proxy <br> (127.0.2.2 and 127.0.2.3)"]-->R{In local domain fallback?}
R -- Yes --> F[Private DNS resolver]
R -- No --> G[Cloudflare Gateway]
Убедиться, что операционная система использует локальный DNS-прокси Cloudflare One Client, можно следующим образом:
В macOS откройте окно терминала и выполните scutil --dns. В качестве DNS-серверов следует указать локальные IP-адреса DNS-прокси Cloudflare One Client.
scutil --dnsDNS configuration (for scoped queries)
resolver #1
search domain[0] : <DNS-SEARCH-DOMAIN>
nameserver[0] : 127.0.2.2
nameserver[1] : 127.0.2.3
if_index : 15 (en0)
flags : Scoped, Request A records
reach : 0x00030002 (Reachable,Local Address,Directly Reachable Address)
resolver #2
nameserver[0] : 127.0.2.2
nameserver[1] : 127.0.2.3
nameserver[2] : fd01:db8:1111::2
nameserver[3] : fd01:db8:1111::3
if_index : 23 (utun3)
flags : Scoped, Request A records, Request AAAA records
reach : 0x00030002 (Reachable,Local Address,Directly Reachable Address)В Windows откройте окно PowerShell и выполните ipconfig. В качестве DNS-серверов следует указать локальные IP-адреса DNS-прокси Cloudflare One Client.
ipconfigWindows IP Configuration
Unknown adapter CloudflareWARP:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Cloudflare WARP Interface Tunnel
Physical Address. . . . . . . . . :
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IPv6 Address. . . . . . . . . . . : 2606:4700:110:8f79:145:f180:fc4:8106(Preferred)
Link-local IPv6 Address . . . . . : fe80::83b:d647:4bed:d388%49(Preferred)
IPv4 Address. . . . . . . . . . . : 172.16.0.2(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 127.0.2.2
127.0.2.3
NetBIOS over Tcpip. . . . . . . . : EnabledВ Linux проверьте /etc/resolv.conf файл. В качестве DNS-серверов должны быть указаны локальные IP-адреса DNS-прокси Cloudflare One Client.
cat /etc/resolv.conf# This file was generated by cloudflare-warp.
nameserver 127.0.2.2
nameserver 127.0.2.3
nameserver fd01:db8:1111::2
nameserver fd01:db8:1111::3
search <DNS-SEARCH-DOMAIN>
options edns0
options trust-adIP-трафик
Когда вы подключаете Cloudflare One Client, он вносит на устройстве три изменения, чтобы управлять тем, идет трафик через туннель WARP или в обход него:
- Создает виртуальный сетевой интерфейс.
- Изменяет операционную систему таблица маршрутизации согласно правилам Split Tunnel.
- Изменяет операционную систему межсетевой экран согласно правилам Split Tunnel.
flowchart LR
P{{IP packet}}-->R["OS routing table"]-->F["OS firewall"] --> S{Excluded from Split Tunnels?}
S -- Yes --> A[(Application)]
S -- No --> U["Virtual interface<br> (172.16.0.2)"] --> G[Cloudflare Gateway]
Виртуальный интерфейс
Виртуальные интерфейсы позволяют операционной системе логически разделить физический интерфейс, например сетевой контроллер (NIC), на отдельные интерфейсы для маршрутизации IP-трафика. Виртуальный интерфейс Cloudflare One Client поддерживает соединение WireGuard/MASQUE между устройством и Cloudflare. По умолчанию его IPv4-адрес жёстко задан как 172.16.0.2 для устройств, использующих WireGuard, тогда как устройства, использующие MASQUE, присвоен уникальный IP из пространства IP-адресов CGNAT (100.96.0.0/12). Вы можете переопределить IP-адрес виртуального интерфейса по умолчанию с помощью пользовательский IP-адрес устройства.
Чтобы просмотреть список всех сетевых интерфейсов операционной системы:
В Windows выполните ipconfig. Когда Cloudflare One Client включен, вы увидите адаптер с именем CloudflareWARP с IP-адресом вашего устройства.
ipconfigWindows IP Configuration
Unknown adapter CloudflareWARP:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Cloudflare WARP Interface Tunnel
Physical Address. . . . . . . . . :
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IPv6 Address. . . . . . . . . . . : 2606:4700:110:8f79:145:f180:fc4:8106(Preferred)
Link-local IPv6 Address . . . . . : fe80::83b:d647:4bed:d388%49(Preferred)
IPv4 Address. . . . . . . . . . . : 172.16.0.2(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 127.0.2.2
127.0.2.3
NetBIOS over Tcpip. . . . . . . . : EnabledВ macOS выполните ifconfig. Когда Cloudflare One Client включен, вы увидите utun интерфейс с IP-адресом вашего устройства.
ifconfig<redacted>
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
inet 172.16.0.2 --> 172.16.0.2 netmask 0xffffffff
inet6 fe80::f6d4:88ff:fe82:6d9e%utun3 prefixlen 64 scopeid 0x17
inet6 2606:4700:110:8c7d:7369:7526:a59b:5636 prefixlen 128
nd6 options=201<PERFORMNUD,DAD>В Linux выполните ifconfig или ip addr. Когда Cloudflare One Client включен, вы увидите utun интерфейс с IP-адресом вашего устройства.
ip addr<redacted>
3: CloudflareWARP: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc mq state UNKNOWN group default qlen 500
link/none
inet 172.16.0.2/32 scope global CloudflareWARP
valid_lft forever preferred_lft forever
inet6 2606:4700:110:8a2e:a5f7:a8de:a1f9:919/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::117e:276b:8a79:c498/64 scope link stable-privacy
valid_lft forever preferred_lft foreverВ примере выше IPv4-адрес устройства 172.16.0.2.
Таблица маршрутизации
Cloudflare One Client изменяет системную таблицу маршрутизации, чтобы управлять тем, какой IP-трафик направляется в Gateway. Таблица маршрутизации определяет, какой сетевой интерфейс должен обрабатывать пакеты для конкретного IP-адреса. По умолчанию весь трафик проходит через виртуальный интерфейс Cloudflare One Client, за исключением IP-адресов и доменов из списка исключений Split Tunnel (они используют интерфейс устройства по умолчанию).
Убедиться, что таблица маршрутизации соответствует правилам Split Tunnel, можно так:
Чтобы просмотреть всю таблицу маршрутизации в macOS, выполните netstat -r.
Вы также можете выполнить поиск по таблице маршрутизации для домена или IP-адреса. В этом примере видно, что трафик к google.com отправляется через utun3, являющийся виртуальным интерфейсом Cloudflare One Client на этом устройстве:
route get google.com route to: lga25s81-in-f14.1e100.net
destination: 136.0.0.0
mask: 248.0.0.0
interface: utun3
flags: <UP,DONE,PRCLONING>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1280 0В отличие от этого, данный DHCP-адрес исключен из Cloudflare One Client и использует интерфейс по умолчанию:
route get 169.254.0.0 route to: 169.254.0.0
destination: 169.254.0.0
mask: 255.255.0.0
interface: en0
flags: <UP,DONE,CLONING,STATIC>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 -210842Чтобы просмотреть всю таблицу маршрутизации в Windows, выполните netstat -r.
Вы также можете выполнить поиск по таблице маршрутизации для IP-адреса. В этом примере видно, что трафик к 1.1.1.1 отправляется через виртуальный интерфейс Cloudflare One Client:
Find-NetRoute -RemoteIPAddress "1.1.1.1" | Select-Object InterfaceAlias -Last 1InterfaceAlias
--------------
CloudflareWARPВ отличие от этого, данный DHCP-адрес исключен из Cloudflare One Client и использует интерфейс по умолчанию:
Find-NetRoute -RemoteIPAddress "169.254.0.0" | Select-Object InterfaceAlias -Last 1InterfaceAlias
--------------
Wi-FiЧтобы просмотреть всю таблицу маршрутизации в Linux, выполните ip -6 route show table all или ip -4 route show table all.
Вы также можете выполнить поиск по таблице маршрутизации для IP-адреса. В этом примере видно, что трафик к 1.1.1.1 отправляется через виртуальный интерфейс Cloudflare One Client:
ip route get 1.1.1.11.1.1.1 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1000
cacheВ отличие от этого, данный DHCP-адрес исключен из Cloudflare One Client и использует интерфейс по умолчанию:
ip route get 169.254.0.0169.254.0.0 dev ens18 src 172.24.8.6 uid 1000
cacheСистемный межсетевой экран
Cloudflare One Client изменяет брандмауэр операционной системы, чтобы обеспечить соблюдение правил Split Tunnel. Это создаёт дополнительный уровень защиты на случай, если какая-либо служба обойдёт таблицу маршрутизации и попытается отправить трафик напрямую через другой интерфейс. Например, если трафик к 203.0.113.0 должен проверяться Gateway, мы создаём правило брандмауэра, которое блокирует 203.0.113.0 на всех интерфейсах, кроме utun.
iOS, Android и ChromeOS
На iOS и Android/ChromeOS Cloudflare One Agent устанавливается как VPN-клиент для перехвата и маршрутизации всего трафика. Приложение создано на официальном VPN-фреймворке для iOS и Android. Дополнительную информацию см. в документации Apple о Документация NetworkExtension ↗ и Google Документация для разработчиков Android ↗.
Обратите внимание, что ChromeOS запускает Android-приложение в виртуальной машине, а не в виде нативного приложения Chrome.