update routing.md

This commit is contained in:
iambabyninja 2024-09-27 22:39:43 +05:00
parent 4520035d54
commit d38231b5fa

View file

@ -1,15 +1,14 @@
# Маршрутизация
Модуль маршрутизации позволяет направлять входящие данные через разные исходящие подключения в соответствии с различными правилами, что позволяет реализовать проксирование по требованию.
Модуль маршрутизации может отправлять входящие данные через разные исходящие соединения в соответствии с разными правилами для достижения цели проксирования по требованию.
Например, распространенным сценарием использования является разделение трафика на внутренний и внешний.
Xray может определять трафик из разных регионов с помощью внутренних механизмов и отправлять его через разные исходящие подключения.
Например, распространенным сценарием использования является разделение внутреннего и внешнего трафика. Xray может использовать внутренние механизмы для определения трафика из разных регионов, а затем отправлять его на разные исходящие прокси.
Более подробное описание функции маршрутизации: [Введение в маршрутизацию (routing)](../document/level-1/routing-lv1-part1.md).
Более подробный анализ функции маршрутизации: [Краткий анализ функции маршрутизации (routing)](../document/level-1/routing-lv1-part1.md).
## RoutingObject
`RoutingObject` соответствует полю `routing` в конфигурационном файле.
`RoutingObject` соответствует элементу `routing` в файле конфигурации.
```json
{
@ -24,40 +23,36 @@ Xray может определять трафик из разных регион
> `domainStrategy`: "AsIs" | "IPIfNonMatch" | "IPOnDemand"
Стратегия разрешения доменных имен.
Стратегия разрешения доменных имен. Используются разные стратегии в зависимости от настройки.
- `"AsIs"`: использовать только доменные имена для выбора маршрута.
Значение по умолчанию.
- `"IPIfNonMatch"`: если доменное имя не соответствует ни одному правилу, разрешить доменное имя в IP-адрес (запись A или AAAA) и снова выполнить сопоставление.
- Если у домена есть несколько записей A, Xray попытается сопоставить все записи A, пока одна из них не совпадет с каким-либо правилом.
- Разрешенный IP-адрес используется только для выбора маршрута, в пересылаемых пакетах данных по-прежнему используется исходное доменное имя.
- `"IPOnDemand"`: при сопоставлении с любым правилом, основанным на IP-адресе, доменное имя немедленно разрешается в IP-адрес для сопоставления.
- `"AsIs"`: для выбора маршрута используются только доменные имена. Значение по умолчанию.
- `"IPIfNonMatch"`: если доменное имя не соответствует ни одному правилу, доменное имя разрешается в IP-адрес (запись A или запись AAAA) для повторного сопоставления;
- Если у доменного имени несколько записей A, предпринимается попытка сопоставить все записи A, пока одна из них не будет соответствовать какому-либо правилу;
- Разрешенный IP-адрес используется только при выборе маршрута, в пересылаемых пакетах данных по-прежнему используется исходное доменное имя;
- `"IPOnDemand"`: если при сопоставлении встречается любое правило на основе IP-адреса, доменное имя немедленно разрешается в IP-адрес для сопоставления;
> `domainMatcher`: "hybrid" | "linear"
Алгоритм сопоставления доменных имен.
Этот параметр влияет на все `RuleObject`, для которых не указан алгоритм сопоставления.
Алгоритм сопоставления доменных имен. Используются разные алгоритмы в зависимости от настройки. Этот параметр влияет на все `RuleObject`, для которых не указан отдельный алгоритм сопоставления.
- `"hybrid"`: использовать новый алгоритм сопоставления доменных имен, который работает быстрее и занимает меньше памяти.
Значение по умолчанию.
- `"linear"`: использовать старый алгоритм сопоставления доменных имен.
- `"hybrid"`: используется новый алгоритм сопоставления доменных имен, который работает быстрее и занимает меньше места. Значение по умолчанию.
- `"linear"`: используется старый алгоритм сопоставления доменных имен.
> `rules`: \[[RuleObject](#ruleobject)\]
Массив, каждый элемент которого представляет собой правило.
Соответствует массиву, каждый элемент которого является правилом.
Для каждого соединения маршрутизатор проверяет правила сверху вниз.
Когда встречается первое подходящее правило, соединение перенаправляется на исходящее подключение, указанное в его `outboundTag` или `balancerTag`.
Для каждого соединения маршрутизация будет выполняться в соответствии с этими правилами сверху вниз. Когда встречается первое действующее правило, это соединение перенаправляется на указанный им `outboundTag` или `balancerTag`.
::: tip
Если ни одно правило не подходит, трафик отправляется через первое исходящее подключение по умолчанию.
Если ни одно правило не совпадает, трафик по умолчанию отправляется через первый исходящий канал.
:::
> `balancers`: \[ [BalancerObject](#balancerobject) \]
Массив, каждый элемент которого представляет собой конфигурацию балансировщика нагрузки.
Массив, каждый элемент которого является конфигурацией балансировщика нагрузки.
Если правило указывает на балансировщик нагрузки, Xray выбирает исходящее подключение через этот балансировщик нагрузки и перенаправляет трафик через него.
Когда правило указывает на балансировщик нагрузки, Xray выбирает исходящий канал через этот балансировщик нагрузки, а затем перенаправляет трафик через него.
### RuleObject
@ -76,162 +71,133 @@ Xray может определять трафик из разных регион
"protocol": ["http", "tls", "bittorrent"],
"attrs": { ":method": "GET" },
"outboundTag": "direct",
"balancerTag": "balancer"
"balancerTag": "balancer",
"ruleTag": "rule name"
}
```
::: danger
Если указано несколько атрибутов, правило применяется только в том случае, если **все** атрибуты совпадают.
Если указано несколько атрибутов, они должны выполняться **одновременно**, чтобы текущее правило вступило в силу.
:::
> `domainMatcher`: "hybrid" | "linear"
Алгоритм сопоставления доменных имен.
Этот параметр имеет приоритет над параметром `domainMatcher` в `RoutingObject`.
Алгоритм сопоставления доменных имен. Используются разные алгоритмы в зависимости от настройки. Этот параметр имеет приоритет над `domainMatcher`, настроенным в `RoutingObject`.
- `"hybrid"`: использовать новый алгоритм сопоставления доменных имен, который работает быстрее и занимает меньше памяти.
Значение по умолчанию.
- `"linear"`: использовать старый алгоритм сопоставления доменных имен.
- `"hybrid"`: используется новый алгоритм сопоставления доменных имен, который работает быстрее и занимает меньше места. Значение по умолчанию.
- `"linear"`: используется старый алгоритм сопоставления доменных имен.
> `type`: "field"
В настоящее время поддерживается только значение `"field"`.
В настоящее время поддерживается только опция `"field"`.
::: tip
В Xray-core v1.8.7 и более поздних версиях эту строку можно опустить.
Можно опустить эту строку в Xray-core v1.8.7 или более поздней версии.
:::
> `domain`: \[string\]
Массив, каждый элемент которого представляет собой шаблон доменного имени.
Доступны следующие форматы:
Массив, каждый элемент которого представляет собой сопоставление доменного имени. Возможны следующие форматы:
- Простая строка: правило применяется, если эта строка соответствует любой части целевого доменного имени.
Например, "sina.com" соответствует "sina.com", "sina.com.cn" и "www.sina.com", но не соответствует "sina.cn".
- Регулярное выражение: начинается с `"regexp:"`, а остальная часть - это регулярное выражение.
Правило применяется, если это регулярное выражение соответствует целевому доменному имени.
Например, "regexp:\\\\.goo.\*\\\\.com\$" соответствует "www.google.com" или "fonts.googleapis.com", но не соответствует "google.com".
- Поддомен (рекомендуется): начинается с `"domain:"`, а остальная часть - это доменное имя.
Правило применяется, если это доменное имя является целевым доменным именем или его поддоменом.
Например, "domain:xray.com" соответствует "www.xray.com" и "xray.com", но не соответствует "wxray.com".
- Полное совпадение: начинается с `"full:"`, а остальная часть - это доменное имя.
Правило применяется, если это доменное имя полностью совпадает с целевым доменным именем.
Например, "full:xray.com" соответствует "xray.com", но не соответствует "www.xray.com".
- Предопределенный список доменов: начинается с `"geosite:"`, а остальная часть - это имя, например `geosite:google` или `geosite:cn`.
Список имен и доменов см. в разделе [Предопределенные списки доменов](#предопределенные-списки-доменов).
- Загрузка доменов из файла: имеет вид `"ext:file:tag"`, где `ext:` (в нижнем регистре) - префикс, за которым следует имя файла и тег.
Файл должен находиться в [каталоге ресурсов](./features/env.md#пути-к-файлам-ресурсов).
Формат файла такой же, как у `geosite.dat`.
Тег должен присутствовать в файле.
- Простая строка: правило вступает в силу, если эта строка соответствует любой части целевого доменного имени. Например, "sina.com" может соответствовать "sina.com", "sina.com.cn" и "www.sina.com", но не соответствует "sina.cn".
- Регулярное выражение: начинается с `"regexp:"`, остальная часть является регулярным выражением. Правило вступает в силу, если это регулярное выражение соответствует целевому доменному имени. Например, `"regexp:\\\\.goo.\*\\\\.com\$"` соответствует "www.google.com" или "fonts.googleapis.com", но не соответствует "google.com". (Обратите внимание, что в json обратная косая черта, часто используемая в регулярных выражениях, используется как escape-символ, поэтому обратная косая черта `\` в регулярном выражении должна быть заменена на `\\`)
- Поддомен (рекомендуется): начинается с `"domain:"`, остальная часть является доменным именем. Правило вступает в силу, если это доменное имя является целевым доменным именем или его поддоменом. Например, "domain:xray.com" соответствует "www.xray.com", "xray.com", но не соответствует "wxray.com".
- Полное совпадение: начинается с `"full:"`, остальная часть является доменным именем. Правило вступает в силу, если это доменное имя полностью соответствует целевому доменному имени. Например, "full:xray.com" соответствует "xray.com", но не соответствует "www.xray.com".
- Предопределенный список доменов: начинается с `"geosite:"`, остальная часть является именем, например, `geosite:google` или `geosite:cn`. Имена и списки доменов см. в разделе [Предопределенные списки доменов](#предопределенные-списки-доменов).
- Загрузка доменных имен из файла: имеет вид `"ext:файл:тег"`, должно начинаться с `ext:` (в нижнем регистре), за которым следует имя файла и тег, файл хранится в [каталоге ресурсов](./features/env.md#путь-к-файлу-ресурсов), формат файла такой же, как у `geosite.dat`, тег должен существовать в файле.
::: tip
`"ext:geoip.dat:cn"` эквивалентно `"geoip:cn"`.
`"ext:geoip.dat:cn"` эквивалентно `"geoip:cn"`
:::
> `ip`: \[string\]
Массив, каждый элемент которого представляет собой диапазон IP-адресов.
Правило применяется, если один из элементов соответствует целевому IP-адресу.
Доступны следующие форматы:
Массив, каждый элемент которого представляет собой диапазон IP-адресов. Правило вступает в силу, если какой-либо элемент соответствует целевому IP-адресу. Возможны следующие форматы:
- IP-адрес: например, `"127.0.0.1"`.
- [CIDR](https://ru.wikipedia.org/wiki/Бесклассовая_адресация): например, `"10.0.0.0/8"`.
- Предопределенный список IP-адресов: этот список включен в каждый установочный пакет Xray и называется `geoip.dat`.
Используйте формат `"geoip:cn"`, где `geoip:` (в нижнем регистре) - префикс, за которым следует двухбуквенный код страны.
Поддерживаются практически все страны с доступом в Интернет.
- Специальное значение: `"geoip:private"`, включает все частные IP-адреса, например `127.0.0.1`.
- Инверсия (!): `"geoip:!cn"` означает все IP-адреса, кроме тех, что указаны в `geoip:cn`.
- Загрузка IP-адресов из файла: имеет вид `"ext:file:tag"`, где `ext:` (в нижнем регистре) - префикс, за которым следует имя файла и тег.
Файл должен находиться в [каталоге ресурсов](./features/env.md#пути-к-файлам-ресурсов).
Формат файла такой же, как у `geoip.dat`.
Тег должен присутствовать в файле.
- [CIDR](https://ru.wikipedia.org/wiki/Бесклассовая_междоменная_маршрутизация): например, `"10.0.0.0/8"`, также можно использовать `"0.0.0.0/0"` `"::/0"` для указания всех IPv4- или IPv6-адресов.
- Предопределенный список IP-адресов: этот список встроен в каждый установочный пакет Xray, имя файла - `geoip.dat`. Формат использования: `"geoip:код_страны"`, должно начинаться с `geoip:` (в нижнем регистре), за которым следует двухбуквенный код страны, поддерживаются почти все страны с доступом в Интернет.
- Специальное значение: `"geoip:private"`, включает в себя все частные адреса, например, `127.0.0.1`.
- Функция инверсии (!), `"geoip:!cn"` означает результаты, не входящие в `geoip:cn`.
- Загрузка IP-адресов из файла: имеет вид `"ext:файл:тег"`, должно начинаться с `ext:` (в нижнем регистре), за которым следует имя файла и тег, файл хранится в [каталоге ресурсов](./features/env.md#путь-к-файлу-ресурсов), формат файла такой же, как у `geoip.dat`, тег должен существовать в файле.
> `port`: number | string
Диапазон портов назначения.
Доступны следующие форматы:
Диапазон портов назначения, возможны три формата:
- `"a-b"`: `a` и `b` - положительные целые числа, меньшие 65536.
Диапазон является замкнутым, правило применяется, если целевой порт находится в этом диапазоне.
- `a`: `a` - положительное целое число, меньшее 65536.
Правило применяется, если целевой порт равен `a`.
- Комбинация двух вышеуказанных форматов, разделенных запятыми ",".
Например: `"53,443,1000-2000"`.
- `"a-b"`: a и b являются положительными целыми числами, меньшими 65536. Этот диапазон является замкнутым интервалом, правило вступает в силу, если порт назначения попадает в этот диапазон.
- `a`: a является положительным целым числом, меньшим 65536. Правило вступает в силу, если порт назначения равен a.
- Смесь двух вышеуказанных форматов, разделенных запятой ",". Например: `"53,443,1000-2000"`.
> `sourcePort`: number | string
Порт источника.
Доступны следующие форматы:
Порт источника, возможны три формата:
- `"a-b"`: `a` и `b` - положительные целые числа, меньшие 65536.
Диапазон является замкнутым, правило применяется, если порт источника находится в этом диапазоне.
- `a`: `a` - положительное целое число, меньшее 65536.
Правило применяется, если порт источника равен `a`.
- Комбинация двух вышеуказанных форматов, разделенных запятыми ",".
Например: `"53,443,1000-2000"`.
- `"a-b"`: a и b являются положительными целыми числами, меньшими 65536. Этот диапазон является замкнутым интервалом, правило вступает в силу, если порт источника попадает в этот диапазон.
- `a`: a является положительным целым числом, меньшим 65536. Правило вступает в силу, если порт источника равен a.
- Смесь двух вышеуказанных форматов, разделенных запятой ",". Например: `"53,443,1000-2000"`.
> `network`: "tcp" | "udp" | "tcp,udp"
Допустимые значения: "tcp", "udp" или "tcp,udp".
Правило применяется, если тип сети соединения соответствует указанному значению.
Допустимые значения: "tcp", "udp" или "tcp,udp". Правило вступает в силу, если тип соединения соответствует указанному.
> `source`: \[string\]
Массив, каждый элемент которого представляет собой диапазон IP-адресов.
Доступны следующие форматы: IP-адрес, CIDR, GeoIP и загрузка IP-адресов из файла.
Правило применяется, если один из элементов соответствует IP-адресу источника.
Массив, каждый элемент которого представляет собой диапазон IP-адресов. Возможные форматы: IP-адрес, CIDR, GeoIP и загрузка IP-адресов из файла. Правило вступает в силу, если какой-либо элемент соответствует IP-адресу источника.
> `user`: \[string\]
Массив, каждый элемент которого представляет собой адрес электронной почты.
Правило применяется, если один из элементов соответствует пользователю источника.
Массив, каждый элемент которого является адресом электронной почты. Правило вступает в силу, если какой-либо элемент соответствует пользователю-источнику.
Аналогично доменному имени, также поддерживается сопоставление с помощью регулярных выражений, начинающихся с `regexp:`. (Также необходимо заменить `\` на `\\`, см. объяснение в разделе `domain`)
> `inboundTag`: \[string\]
Массив, каждый элемент которого представляет собой тег.
Правило применяется, если один из элементов соответствует тегу входящего протокола.
Массив, каждый элемент которого является тегом. Правило вступает в силу, если какой-либо элемент соответствует тегу входящего протокола.
> `protocol`: \[ "http" | "tls" | "bittorrent" \]
Массив, каждый элемент которого представляет собой протокол.
Правило применяется, если один из элементов соответствует типу протокола текущего соединения.
Массив, каждый элемент которого представляет собой протокол. Правило вступает в силу, если какой-либо протокол соответствует типу протокола текущего соединения.
::: tip
Для определения типа протокола соединения необходимо включить параметр `sniffing` во входящем подключении.
Необходимо включить опцию `sniffing` во входящем прокси, чтобы определить тип протокола, используемого соединением.
:::
> `attrs`: object
Объект JSON, где ключи и значения являются строками, используемый для проверки атрибутов трафика.
Правило применяется, если заголовки HTTP содержат все указанные ключи, а значения содержат указанные подстроки.
Ключи нечувствительны к регистру.
Значения могут быть регулярными выражениями.
Объект json, ключи и значения которого являются строками, используется для проверки значений атрибутов трафика. Правило вступает в силу, если HTTP-заголовки содержат все указанные ключи, а значения содержат указанные подстроки. Регистр ключей не учитывается. Значения поддерживают использование регулярных выражений.
В настоящее время этот атрибут устанавливается только входящим прокси HTTP.
Также поддерживаются псевдозаголовки h2, такие как `:method` и `:path`, для сопоставления метода и пути (хотя в HTTP/1.1 эти заголовки отсутствуют)
Для метода, отличного от CONNECT, входящего HTTP-запроса, `attrs` можно получить напрямую, для других входящих запросов необходимо включить `sniffing`, чтобы получить эти значения для сопоставления.
Примеры:
- Проверка метода HTTP GET: `{":method": "GET"}`
- Проверка пути HTTP: `{":path": "/test"}"`
- Проверка типа содержимого: `{"accept": "text/html"}"`
- Проверка HTTP GET: `{":method": "GET"}`
- Проверка HTTP Path: `{":path": "/test"}`
- Проверка Content Type: `{"accept": "text/html"}`
> `outboundTag`: string
Тег исходящего подключения.
Соответствует тегу исходящего канала.
> `balancerTag`: string
Тег балансировщика нагрузки.
Соответствует тегу балансировщика нагрузки.
::: tip
Необходимо указать либо `balancerTag`, либо `outboundTag`.
Если указаны оба параметра, используется `outboundTag`.
Необходимо указать либо `balancerTag`, либо `outboundTag`. Если указаны оба, используется `outboundTag`.
:::
> `ruleTag`: string
Необязательно, не имеет фактического эффекта, используется только для идентификации имени этого правила.
Если установлено, при совпадении с этим правилом в журнал с уровнем Info будет выводиться соответствующая информация, используемая для отладки того, какое правило маршрутизации сработало.
### BalancerObject
Настройки балансировщика нагрузки.
Когда балансировщик нагрузки активируется, он выбирает наиболее подходящее исходящее подключение из указанных и перенаправляет трафик через него.
Конфигурация балансировщика нагрузки. Когда балансировщик нагрузки активен, он выбирает наиболее подходящий исходящий канал из указанных исходящих каналов в соответствии с конфигурацией и перенаправляет трафик через него.
```json
{
@ -244,18 +210,17 @@ Xray может определять трафик из разных регион
> `tag`: string
Тег этого балансировщика нагрузки, используемый для сопоставления с `balancerTag` в `RuleObject`.
Тег этого балансировщика нагрузки, используется для сопоставления с `balancerTag` в `RuleObject`.
> `selector`: \[ string \]
Массив строк, каждый элемент которого будет использоваться для сопоставления с префиксом тега исходящего подключения.
Например, для следующих тегов исходящих подключений: `[ "a", "ab", "c", "ba" ]`, `"selector": ["a"]` будет соответствовать `[ "a", "ab" ]`.
Массив строк, каждая из которых будет использоваться для сопоставления с префиксом тега исходящего канала. Например, для следующих тегов исходящих каналов: `[ "a", "ab", "c", "ba" ]`, `"selector": ["a"]` будет соответствовать `[ "a", "ab" ]`.
Если найдено несколько совпадений, балансировщик нагрузки в настоящее время выбирает одно из них случайным образом.
Если найдено несколько исходящих каналов, балансировщик нагрузки в настоящее время случайным образом выбирает один из них в качестве конечного исходящего канала.
> `fallbackTag`: string
Исходящее подключение, которое будет использоваться, если балансировщик нагрузки не сможет выбрать подходящее исходящее подключение.
Если балансировщик нагрузки не может выбрать подходящий исходящий канал, используется исходящий канал, указанный в этом параметре.
> `strategy`: [StrategyObject](#strategyobject)
@ -268,21 +233,17 @@ Xray может определять трафик из разных регион
```
> `type` : "random" | "roundRobin" | "leastPing" | "leastLoad"
- `random` (значение по умолчанию): случайный выбор из подходящих исходящих подключений.
- `roundRobin`: последовательный выбор из подходящих исходящих подключений.
- `leastPing`: выбор исходящего подключения с наименьшей задержкой на основе результатов мониторинга подключений.
Требуется настроить [observatory](./observatory.md#observatoryobject).
- `leastLoad`: выбор наиболее стабильного исходящего подключения на основе результатов мониторинга подключений.
Требуется настроить [burstObservatory](./observatory.md#burstobservatoryobject).
- `random`: значение по умолчанию. Случайным образом выбирает соответствующий исходящий прокси.
- `roundRobin`: выбирает соответствующие исходящие прокси по очереди.
- `leastPing`: выбирает соответствующий исходящий прокси с наименьшей задержкой на основе результатов наблюдений за соединением. Необходимо добавить параметр конфигурации [observatory](./observatory.md#observatoryobject).
- `leastLoad`: выбирает наиболее стабильный соответствующий исходящий прокси на основе результатов наблюдений за соединением. Необходимо добавить параметр конфигурации [burstObservatory](./observatory.md#burstobservatoryobject).
> `settings`: [StrategySettingsObject](#strategysettingsobject)
##### StrategySettingsObject
Это необязательный параметр конфигурации, формат которого различается для разных стратегий балансировки нагрузки. В настоящее время этот параметр конфигурации можно добавить только для стратегии балансировки нагрузки `leastLoad`.
Это необязательный параметр. Формат настройки зависит от стратегии балансировки нагрузки.
В настоящее время этот параметр можно использовать только со стратегией `leastLoad`.
### Пример конфигурации балансировщика нагрузки
### Примеры конфигурации балансировки нагрузки
```json
"routing": {
@ -309,18 +270,15 @@ Xray может определять трафик из разных регион
"inbounds": [
{
// Настройки входящего подключения
"tag": "in"
}
]
"outbounds": [
{
// Настройки исходящего подключения
"tag": "out1"
},
{
// Настройки исходящего подключения
"tag": "out2"
}
]
@ -328,14 +286,12 @@ Xray может определять трафик из разных регион
### Предопределенные списки доменов
Этот список включен в каждый установочный пакет Xray и называется `geosite.dat`.
Этот файл содержит некоторые распространенные доменные имена.
Формат использования: `geosite:filename`, например `geosite:google` означает сопоставление с доменными именами, указанными в файле в разделе `google`, для маршрутизации или фильтрации DNS.
Этот список встроен в каждый установочный пакет Xray, имя файла - `geosite.dat`. Этот файл содержит некоторые распространенные доменные имена. Формат использования: `geosite:имя_файла`, например, `geosite:google` означает фильтрацию маршрутизации или DNS для доменных имен, соответствующих `google` в файле.
Распространенные доменные имена:
- `category-ads`: содержит доменные имена распространенных рекламных сервисов.
- `category-ads-all`: содержит доменные имена распространенных рекламных сервисов, а также доменные имена поставщиков рекламы.
- `category-ads`: содержит распространенные доменные имена рекламы.
- `category-ads-all`: содержит распространенные доменные имена рекламы, а также доменные имена поставщиков рекламы.
- `cn`: эквивалентно объединению `geolocation-cn` и `tld-cn`.
- `apple`: содержит большинство доменных имен Apple.
- `google`: содержит большинство доменных имен Google.
@ -343,15 +299,10 @@ Xray может определять трафик из разных регион
- `facebook`: содержит большинство доменных имен Facebook.
- `twitter`: содержит большинство доменных имен Twitter.
- `telegram`: содержит большинство доменных имен Telegram.
- `geolocation-cn`: содержит доменные имена распространенных сайтов, расположенных в Китае.
- `geolocation-!cn`: содержит доменные имена распространенных сайтов, расположенных за пределами Китая.
- `tld-cn`: содержит доменные имена верхнего уровня, управляемые CNNIC и используемые в Китае, например, домены, оканчивающиеся на `.cn`, `.中国`.
- `tld-!cn`: содержит доменные имена верхнего уровня, не используемые в Китае, например, домены, оканчивающиеся на `.tw` (Тайвань), `.jp` (Япония), `.sg` (Сингапур), `.us` (США), `.ca` (Канада) и т.д.
- `geolocation-cn`: содержит распространенные доменные имена сайтов материкового Китая.
- `geolocation-!cn`: содержит распространенные доменные имена сайтов, не относящихся к материковому Китаю.
- `tld-cn`: содержит домены верхнего уровня, управляемые CNNIC для использования в материковом Китае, например, доменные имена, оканчивающиеся на `.cn`, `.中国`.
- `tld-!cn`: содержит домены верхнего уровня, не используемые в материковом Китае, например, доменные имена, оканчивающиеся на `.tw` (Тайвань), `.jp` (Япония), `.sg` (Сингапур), `.us` (США), `.ca` (Канада) и т.д.
Вы также можете просмотреть полный список доменов здесь: [Domain list community](https://github.com/v2fly/domain-list-community).