← Cloudflare One / cloudflare-one / traffic-policies
Резолвера политики
По умолчанию Gateway отправляет DNS-запросы на 1.1.1.1, публичный DNS-резолвер Cloudflare, для разрешения запросов. Пользователи тарифа Enterprise могут вместо этого создать политики Gateway для направления DNS-запросов на пользовательские резолверы.
flowchart TD
%% Accessibility
accTitle: How Gateway routes DNS queries
accDescr: Flowchart describing the order Cloudflare Gateway routes a DNS query from an endpoint through DNS and resolver policies back to the user.
%% Flowchart
user(["User"])-->endpoint[/"Gateway DNS endpoint"/]
endpoint-->query["DNS policy (query)"]
query-->resolver["Resolver policy"]
resolver--"Routes to </br>custom resolver"-->response["DNS policy (response)"]
response--"Returns response"-->user
Gateway направляет трафик пользователей к настроенному DNS-резолверу на основе подходящей политики, даже если IP-адреса ваших резолверов пересекаются.
Сценарии использования
Политики DNS-резолвера пригодятся, если вам нужен доступ к доменам без публичной маршрутизации, например к сервисам частной сети или внутренним ресурсам. Также их можно использовать, если требуется доступ к защищённой DNS-службе или нужно упростить управление DNS для нескольких площадок.
Internal DNS
Cloudflare Internal DNS позволяет управлять DNS записями внутренних ресурсов в приватной сети. DNS зоны, настроенные в Internal DNS, может запрашивать только резолвер Gateway. С помощью политик резолвера вы можете определить, как Gateway разрешает DNS запросы вашей организации во внутренние ресурсы в зависимости от контекста запроса, например по известным исходным IP адресам для географического региона.
Чтобы начать работу с разрешением внутренних DNS-запросов с помощью политик резолвера, см. Начало работы.
Local Domain Fallback
Используйте политики Resolver, если ваш DNS-сервер доступен из сети Cloudflare (например, через Cloudflare Tunnel, туннель IPsec/GRE или обычный интернет). Используйте Local Domain Fallback когда DNS-сервер доступен только с устройства пользователя.
Если для одного и того же устройства настроены и Local Domain Fallback, и политики Resolver, Cloudflare сначала применит клиентские правила Local Domain Fallback. Если вы подключаете DNS-запросы к Gateway через Cloudflare One Client и направляете их с помощью политик Resolver, исходным IP-адресом этих запросов будет IP-адрес, назначенный Cloudflare One Client.
Подключения резолвера
Политики резолвера поддерживают TCP- и UDP-соединения. Пользовательские резолверы могут указывать на интернет через IPv4 или IPv6 либо на службу приватной сети, например на туннель Magic. По умолчанию политики используют порт 53. Вы можете изменить порт, который использует ваш резолвер, настроив это в своей политике.
Вы можете защитить свои авторитативные серверы имен от DDoS-атак, включив DNS Firewall.
Cloudflare Tunnel
Вы можете настроить подключения к частному резолверу, подключённому к Cloudflare, с помощью Cloudflare Tunnel. Чтобы обеспечить cloudflared может направлять UDP-трафик на ваш резолвер, подключать туннель через QUIC.
Дополнительные сведения о подключении приватного DNS-резолвера к Cloudflare с помощью Cloudflare Tunnel см. в Частный DNS.
Cloudflare WAN
Чтобы включить подключения к приватному резолверу, подключенному к Cloudflare через Cloudflare WAN, свяжитесь со своей командой по работе с аккаунтом.
Доступные конечные точки DNS
Политики резолвера могут направлять запросы на разрешение из следующих конечных точек DNS:
- IPv4
- IPv6
- DNS over HTTPS (DoH)
- DNS over TLS (DoT)
- DNS-запросы, созданные Cloudflare Browser Isolation и Clientless Web Isolation
- DNS-запросы, созданные конечные точки прокси
Gateway фильтрует, разрешает и регистрирует ваши запросы независимо от конечной точки.
Создать политику резолвера
Чтобы создать политику Resolver:
-
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Политики трафика > Резолвера политики.
-
Выберите Добавление политики.
-
Создайте выражение для нужного трафика. Например, вы можете разрешить имя хоста для внутреннего сервиса:
Селектор Оператор Значение Host in internal.example.comУбедитесь, что ваш пункт назначения не подпадает под действие Local Domain Fallback.
-
В Выберите DNS-резолвер, выберите Настройте пользовательские DNS-резолверы.
-
Введите IP-адреса пользовательского DNS-резолвера. По мере ввода IP-адреса Gateway будет выполнять поиск в виртуальные сети настроено в Zero Trust.
-
В Сеть, выберите, направлять ли запросы публично (в интернет) или приватно (в сервис приватной сети).
-
(Необязательно) Введите пользовательский порт для каждого IP-адреса.
-
Выберите Создать политику.
Пользовательские резолверы сохраняются в вашем аккаунте для дальнейшего использования. Вы можете добавить в политику до 10 адресов IPv4 и 10 адресов IPv6.
-
Добавьте следующее разрешение в свой
cloudflare_api_token↗:Zero Trust Write
-
Создайте политику резолвера с помощью
cloudflare_zero_trust_gateway_policy↗ ресурс:resource "cloudflare_zero_trust_gateway_policy" "resolver_policy" { name = "Example resolver policy" enabled = true account_id = var.cloudflare_account_id description = "TERRAFORM MANAGED resolver policy" action = "resolve" traffic = "dns.fqdn in {\"internal.example.com\"}" identity = "identity.email in {\"[email protected]\"}" precedence = 1 rule_settings = { dns_resolvers = { # You can add up to 10 IPv4 and 10 IPv6 addresses to a policy. ipv4 = [{ ip = "192.0.2.24" port = 53 route_through_private_network = true vnet_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.staging_vnet.id }] ipv6 = [{ ip = "2001:DB8::" port = 53 route_through_private_network = true vnet_id = cloudflare_zero_trust_tunnel_cloudflared_virtual_network.staging_vnet.id }] } } }
Когда запрос пользователя совпадает с политикой резолвера, Gateway отправляет запрос указанным вами резолверам в следующем порядке:
- Публичные резолверы
- Приватные резолверы за виртуальной сетью по умолчанию для вашего аккаунта
- Приватные резолверы за пользовательской виртуальной сетью
Gateway кэширует самый быстрый резолвер для использования в последующих запросах. Приоритет резолверов кэшируется отдельно для каждого пользователя в каждом дата-центре.
Дополнительные сведения о создании политики DNS см. в Политики DNS.
Селекторы
Content Categories
Используйте этот селектор, чтобы фильтровать домены, принадлежащие определённым категории контента.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Content Categories | any(dns.content_category[*] in {1}) |
До разрешения DNS |
IP-адрес DNS-резолвера
Используйте этот селектор, чтобы применять политики к DNS-запросам, поступившим на ваш IP-адрес Gateway Resolver, привязанный к зарегистрированному местоположению DNS. Для большинства клиентов Gateway это IPv4 anycast-адрес, и политики, созданные с использованием этого IPv4-адреса, будут применяться ко всем местоположениям DNS. Однако у каждого местоположения DNS есть выделенный IPv6-адрес, а некоторым клиентам Gateway предоставлен выделенный IPv4-адрес: оба адреса можно использовать для применения политик к конкретным зарегистрированным местоположениям DNS.
| UI name | Пример API | Этап оценки |
|---|---|---|
| IP-адрес DNS-резолвера | any(dns.resolved_ip[*] == 198.51.100.0) |
До разрешения DNS |
Поддомен DoH
Используйте этот селектор, чтобы находить соответствие DNS-запросам, поступающим через DNS-over-HTTPS (DoH) и предназначенным для конечной точки DoH, настроенной для каждого местоположения DNS. Например, можно использовать местоположение DNS с конечной точкой DoH abcdefg.cloudflare-gateway.com выбрав селектор DoH Subdomain и указав значение abcdefg.
| UI name | Пример API | Этап оценки |
|---|---|---|
| DOH Subdomain | dns.doh_subdomain == "abcdefg" |
До разрешения DNS |
Домен
Используйте этот селектор, чтобы находить соответствие домену и всем его поддоменам. Например, можно указать соответствие example.com и его поддомены, например www.example.com.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Домен | any(dns.domains[*] == "example.com") |
До разрешения DNS |
Политики Gateway не поддерживают домены с нелатинскими символами напрямую. Чтобы использовать домен с нелатинскими символами, добавьте его в список.
Host
Используйте этот селектор, чтобы находить соответствие только указанному имени хоста. Например, можно указать соответствие test.example.com но не example.com или www.test.example.com.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Host | dns.fqdn == "example.com" |
До разрешения DNS |
Политики Gateway не поддерживают имена хостов с нелатинскими символами напрямую. Чтобы использовать имя хоста с нелатинскими символами, добавьте его в список.
Расположение
Используйте этот селектор, чтобы применять политики к определённому DNS-локация Gateway или набор местоположений.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Расположение | dns.location in {"location_uuid_1" "location_uuid_2"} |
До разрешения DNS |
Тип записи запроса
Используйте этот селектор, чтобы выбрать тип ресурсной записи DNS, к которому нужно применить политики. Например, можно указать соответствие A записи для домена, но не MX записи.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Тип записи запроса | dns.query_rtype == "TXT" |
До разрешения DNS |
Security Categories
Используйте этот селектор, чтобы находить соответствие доменам (а также, при необходимости, IP-адреса) принадлежащих определённым категории безопасности.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Security Categories | any(dns.security_category[*] in {1}) |
До разрешения DNS |
Континент источника
Используйте этот селектор, чтобы фильтровать по континенту, из которого запрос поступил в Gateway.
Геолокация определяется по публичному IP-адресу устройства (обычно назначаемому интернет-провайдером пользователя). Чтобы указать континент, введите его двухбуквенный код в поле Значение поле:
| Континент | Код |
|---|---|
| Африка | AF |
| Антарктида | AN |
| Азия | AS |
| Европа | EU |
| Северная Америка | NA |
| Океания | OC |
| Южная Америка | SA |
| UI name | Пример API | Этап оценки |
|---|---|---|
| Геолокация IP по континенту источника | dns.src.geo.continent == "North America" |
До разрешения DNS |
Страна источника
Используйте этот селектор, чтобы фильтровать по стране, из которой запрос поступил в Gateway.
Геолокация определяется по публичному IP-адресу устройства (обычно назначаемому интернет-провайдером пользователя). Чтобы указать страну, введите её код ISO 3166-1 Alpha-2 ↗ в Значение поле.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Геолокация IP по стране источника | dns.src.geo.country == "RU" |
До разрешения DNS |
Исходный IP
Используйте этот селектор, чтобы применять политики к исходному IP-адресу DNS-запросов. Например, это может быть WAN IP-адрес резолвера-заглушки, который ваша организация использует для отправки запросов в Gateway.
| UI name | Пример API | Этап оценки |
|---|---|---|
| Исходный IP | dns.src_ip == 198.51.100.0 |
До разрешения DNS |
Пользователи
Используйте эти селекторы, чтобы находить соответствие атрибутам идентификации.
| UI name | Пример API | Этап оценки |
|---|---|---|
| User Email | identity.email == "[email protected]" |
До разрешения DNS |
| User Name | identity.name == "Test User" |
До разрешения DNS |
| User Group IDs | any(identity.groups[*].id in {"group_id"}) |
До разрешения DNS |
| User Group Names | any(identity.groups[*].name in {"group_name"}) |
До разрешения DNS |
| User Group Emails | any(identity.groups[*].email in {"[email protected]"}) |
До разрешения DNS |
| SAML Attributes | any(identity.saml_attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] in {"Test User"}) |
До разрешения DNS |
Операторы сравнения
С помощью операторов сравнения Gateway сопоставляет трафик с селектором. Когда вы выбираете Селектор в конструкторе политик панели управления, Оператор раскрывающемся меню будут показаны доступные варианты для этого селектора.
| Оператор | Значение |
|---|---|
| является | равно заданному значению |
| не является | не равно заданному значению |
| in | соответствует хотя бы одному из указанных значений |
| not in | не соответствует ни одному из заданных значений |
| in list | в предопределённом список значений |
| not in list | не входит в предопределённый список значений |
| matches regex | regex возвращает true |
| does not match regex | regex возвращает false |
| больше | превышает заданное число |
| больше или равно | превышает заданное число или равно ему |
| меньше | меньше заданного числа |
| меньше или равно | меньше или равно заданному числу |
Значение
В Значение поле можно ввести единственное значение при использовании оператора сравнения на равенство (например, является) или несколько значений при использовании оператора сравнения на вхождение (например, in). Кроме того, вы можете использовать регулярные выражения (или regex), чтобы задать диапазон значений для поддерживаемых селекторов.
Регулярные выражения
Регулярные выражения обрабатываются с использованием Rust. Реализация Rust немного отличается от библиотек regex, используемых в других местах. Дополнительную информацию см. в нашем руководстве по Подстановочные знаки. Чтобы проверить, соответствует ли ваше регулярное выражение, вы можете использовать Rustexp ↗.
Чтобы сопоставить несколько значений, можно использовать символ вертикальной черты (|) в качестве оператора OR. Использовать escape-символ не требуется (\) до символа "|". Например, следующее выражение возвращает true, если имя хоста совпадает с одним из значений: .*whispersystems.org или .*signal.org:
| Селектор | Оператор | Значение |
|---|---|---|
| Host | matches regex | .*whispersystems.org|.*signal.org |
Помимо регулярных выражений, вы можете использовать логические операторы чтобы соответствовать нескольким значениям.
Логические операторы
Чтобы оценить несколько условий в выражении, выберите И логический оператор. Эти выражения можно дополнительно сравнить с помощью Или логический оператор.
| Оператор | Значение |
|---|---|
| И | соответствуют всем условиям в выражении |
| Или | соответствуют хотя бы одному из условий в выражении |
Или оператор работает только с условиями в пределах одной группы выражений. Например, нельзя сравнивать условия в Трафик с условиями в Identity.