Sync docs

This commit is contained in:
Fangliding
2026-06-02 00:33:44 +08:00
parent 7de1c73442
commit abe0e4ce92
36 changed files with 166 additions and 120 deletions
+2 -2
View File
@@ -78,13 +78,13 @@ Run `go tool dist list` to view all supported systems and architectures.
Use the following command to build (`<short commit ID>` should be replaced with the first seven characters of the corresponding commit SHA-256):
```bash
CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags="-X [github.com/xtls/xray-core/core.build=](https://github.com/xtls/xray-core/core.build=)<short commit ID> -s -w -buildid=" -v ./main
CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags="-X github.com/xtls/xray-core/core.build=<short commit ID> -s -w -buildid=" -v ./main
```
For MIPS/MIPSLE architectures, you should use:
```bash
CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags="-l=4" -ldflags="-X [github.com/xtls/xray-core/core.build=](https://github.com/xtls/xray-core/core.build=)<short commit ID> -s -w -buildid=" -v ./main
CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags="-l=4" -ldflags="-X github.com/xtls/xray-core/core.build=<short commit ID> -s -w -buildid=" -v ./main
```
::: warning
+11 -4
View File
@@ -95,9 +95,16 @@ Now for the second question:
```html
<html lang="">
<!-- Text between angle brackets is an HTML tag and is not displayed.
Most tags, such as the HTML and /HTML tags that surround the contents of
a page, come in pairs; some tags, like HR, for a horizontal rule, stand
alone. Comments, such as the text you're reading, are not displayed when
the Web page is shown. The information between the HEAD and /HEAD tags is
not displayed. The information between the BODY and /BODY tags is displayed.-->
<head>
<title>Enter a title, displayed at the top of the window.</title>
</head>
<!-- The information between the BODY and /BODY tags is displayed.-->
<body>
<h1>Enter the main heading, usually the same as the title.</h1>
<p>
@@ -110,21 +117,21 @@ Now for the second question:
<p>Improve your image by including an image.</p>
<p>
<img
src="[https://i.imgur.com/SEBww.jpg](https://i.imgur.com/SEBww.jpg)"
src="https://i.imgur.com/SEBww.jpg"
alt="A Great HTML Resource"
/>
</p>
<p>
Add a link to your favorite
<a href="[https://www.dummies.com/](https://www.dummies.com/)"
>Web site</a
>. Break up your page with a horizontal rule or two.
<a href="https://www.dummies.com/">Web site</a>. Break up your
page with a horizontal rule or two.
</p>
<hr />
<p>
Finally, link to <a href="page2.html">another page</a> in your own
Web site.
</p>
<!-- And add a copyright notice.-->
<p>&#169; Wiley Publishing, 2011</p>
</body>
</html>
+41 -2
View File
@@ -86,7 +86,26 @@ Before officially applying for a certificate, let's use a test command (`--issue
sxlYqPvWreKgD5b8JyOQX0Yg2MLoRUoDyqVkd31PthIiwzdckoh5eD3JU7ysYBtN
cTFK4LGOfjqi8Ks87EVJdK9IaSAu7ZC6h5to0eqpJ5PLhaM3e6yJBbHmYA8w1Smp
wAb3tdoHZ9ttUIm9CrSzvDBt6BBT6GqYdDamMyCYBLooMyDEM4CUFsOzCRrEqqvC
... (omitted for brevity) ...
2mTTEmhvpojo5rhdTSJxibozyNWTGwoTj0v9pTUeQcGqLIzqi4DowjBHD5guwRid
SjAFnm6JT2xUQgWFm58A1gv1OhbH1TRPUUmtE1nFEN7YiSjI4xgxqAXT3CLD2EUb
wXlUrO6c75zSsQP4bRMzgOjJUqHtSb6IEqELzt4M7KzL5iCOruCChCo2DZxUwvVX
tOoaAyQJzCbTqE6aUqwiKi3gVyoxvDP9mI5JdRYzsDL6GVud7EHPnYeMl9ubLZAK
0vg84mbMP3f6mYM4KRa1cqiyOIcQPT4AzGFYVv4sm049bZQg7sd0Bz9CaFvE7yDA
1y17XlgCDnsjxl66bqI1vkENN9XT5xeFHONqc18b5fZEKSIvdX7iWPFWp1PyMPpG
0pMCP1EymZNFxIMJLgbWqExwLWfPc5Ib3PjBaIqhXPnw6sT2MQSxXwDupq1UJVhV
7E3hQRVlwI4CXi6WLHJMNvNRyyK87gCrLH1bKYsPeRVaz77poWBq49zwBCts6hPY
IeF4ltGXyANNIOPEi8vy138fRU4LYh81d8FjOtFfJZogMjwhfNvapqxPMsioPlmX
TnZu0n7setrVNUEfTMHWqPpDgk5MPrWLA4LapqaDfEX4pwnQJLMwMi6s94z165c0
iMRSKA1yU5zqv8aNsDfPoY4OkSPWs4MaXgRRSLBsUfZ15DwQXPk76kegHIyxWvwF
tYw9HKR5QCMK66fa0z4aJoFVFLK0IIOGEZOanRFUCnkLUDd3QZ3YU8lEcrj7Uxos
haiRNICyC6UfsCJ94a8vcNyMosPv3xBLMp19WXgiFYqEFQkntkv1FLRI35fjeJmg
0fmD9VG9bkzGPHihJgQLRlCHasGf6XrdfkSsODAyCUHUHJ0RzqF4YEZMcxDxzuQ2
YO7bFwj7S3mUdVPZ6MPasjxdyBjJgEBMch2uy4AhmudXfEBQBye8W6ZI4ztZjLVV
FmP4SIuaNUmMe20TjR8b9NVC96AhxOanWT3mRROsdokpKQGTJvl27EHH8KuAbUOc
G6KtPy4wslNZNXWcBy9n63RcWak12r7kAIFn38tZxmlw2WUKoRSMAH64GcDTjRQd
Am65hBHzvGrj93wEuVNIebvNIsJOlng3HFjpIxVqKGMCIfWIKGDE3YzK3p4LbGZ6
NZFQWYJLNVf2M9CCJfbEImPYgvctrxl39H6KVYPCw1SAdaj9NneUqmREOQkKoEB0
x6PmNirbMscHhQPSC0JQaqUgaQFgba1ALmzRYAnYhNb0twkTxWbY7DBkAarxqMIp
yiLKcBFc5H7dgJCImo7us7aJeftC44uWkPIjw9AKH=
--END CERTIFICAT--
[Wed 30 Dec 2022 15:21:52 AM EST] Your cert is in /home/vpsadmin/.acme.sh/subdomain.yourdomain.com_ecc/subdomain.yourdomain.com.cer
@@ -145,7 +164,27 @@ Before officially applying for a certificate, let's use a test command (`--issue
--BEGIN CERTIFICAT--
sxlYqPvWreKgD5b8JyOQX0Yg2MLoRUoDyqVkd31PthIiwzdckoh5eD3JU7ysYBtN
cTFK4LGOfjqi8Ks87EVJdK9IaSAu7ZC6h5to0eqpJ5PLhaM3e6yJBbHmYA8w1Smp
... (omitted for brevity) ...
wAb3tdoHZ9ttUIm9CrSzvDBt6BBT6GqYdDamMyCYBLooMyDEM4CUFsOzCRrEqqvC
2mTTEmhvpojo5rhdTSJxibozyNWTGwoTj0v9pTUeQcGqLIzqi4DowjBHD5guwRid
SjAFnm6JT2xUQgWFm58A1gv1OhbH1TRPUUmtE1nFEN7YiSjI4xgxqAXT3CLD2EUb
wXlUrO6c75zSsQP4bRMzgOjJUqHtSb6IEqELzt4M7KzL5iCOruCChCo2DZxUwvVX
tOoaAyQJzCbTqE6aUqwiKi3gVyoxvDP9mI5JdRYzsDL6GVud7EHPnYeMl9ubLZAK
0vg84mbMP3f6mYM4KRa1cqiyOIcQPT4AzGFYVv4sm049bZQg7sd0Bz9CaFvE7yDA
1y17XlgCDnsjxl66bqI1vkENN9XT5xeFHONqc18b5fZEKSIvdX7iWPFWp1PyMPpG
0pMCP1EymZNFxIMJLgbWqExwLWfPc5Ib3PjBaIqhXPnw6sT2MQSxXwDupq1UJVhV
7E3hQRVlwI4CXi6WLHJMNvNRyyK87gCrLH1bKYsPeRVaz77poWBq49zwBCts6hPY
IeF4ltGXyANNIOPEi8vy138fRU4LYh81d8FjOtFfJZogMjwhfNvapqxPMsioPlmX
TnZu0n7setrVNUEfTMHWqPpDgk5MPrWLA4LapqaDfEX4pwnQJLMwMi6s94z165c0
iMRSKA1yU5zqv8aNsDfPoY4OkSPWs4MaXgRRSLBsUfZ15DwQXPk76kegHIyxWvwF
tYw9HKR5QCMK66fa0z4aJoFVFLK0IIOGEZOanRFUCnkLUDd3QZ3YU8lEcrj7Uxos
haiRNICyC6UfsCJ94a8vcNyMosPv3xBLMp19WXgiFYqEFQkntkv1FLRI35fjeJmg
0fmD9VG9bkzGPHihJgQLRlCHasGf6XrdfkSsODAyCUHUHJ0RzqF4YEZMcxDxzuQ2
YO7bFwj7S3mUdVPZ6MPasjxdyBjJgEBMch2uy4AhmudXfEBQBye8W6ZI4ztZjLVV
FmP4SIuaNUmMe20TjR8b9NVC96AhxOanWT3mRROsdokpKQGTJvl27EHH8KuAbUOc
G6KtPy4wslNZNXWcBy9n63RcWak12r7kAIFn38tZxmlw2WUKoRSMAH64GcDTjRQd
Am65hBHzvGrj93wEuVNIebvNIsJOlng3HFjpIxVqKGMCIfWIKGDE3YzK3p4LbGZ6
NZFQWYJLNVf2M9CCJfbEImPYgvctrxl39H6KVYPCw1SAdaj9NneUqmREOQkKoEB0
x6PmNirbMscHhQPSC0JQaqUgaQFgba1ALmzRYAnYhNb0twkTxWbY7DBkAarxqMIp
yiLKcBFc5H7dgJCImo7us7aJeftC44uWkPM=
--END CERTIFICAT--
[Wed 30 Dec 2022 15:22:52 AM EST] Your cert is in /home/vpsadmin/.acme.sh/subdomain.yourdomain.com_ecc/subdomain.yourdomain.com.cer
+2 -2
View File
@@ -348,10 +348,10 @@ So far, we have used `systemctl` related commands like `start`, `status`, `reloa
net.ipv4.tcp_congestion_control=bbr
```
9. Reboot the VPS to make the `BBR` settings take effect.
9. Read the configuration to make the `BBR` settings take effect.
```shell
sudo reboot
sudo sysctl --system
```
10. Confirm `BBR` is enabled
+4 -2
View File
@@ -54,9 +54,9 @@ v24.9.30 был установлен как latest почти на день, и
## 2024.9.17
Количество участников в группе Project VLESS достигло 1000.
Количество участников в дочерней группе Project X достигло 1000.
Спасибо за поддержку!
Спасибо за поддержку из некитайскоязычного мира!
- Что такое XHTTP и XgRPC?
@@ -112,6 +112,8 @@ We have created [Project VLESS](https://t.me/projectVless) for non-Chinese users
## 2024.7.22 <Badge>[v1.8.21](https://github.com/XTLS/Xray-core/releases/tag/v1.8.21)</Badge>
Кажется, мы вернулись к изначальному состоянию «диарейных» частых выпусков...
Как и было объявлено в v1.8.16, SplitHTTP теперь имеет начальную поддержку HTTP/3 (QUIC). Нет сомнений в том, что SplitHTTP H3 открыл новую эру.
- SplitHTTP H3 — это первый QUIC-подобный прокси, полностью основанный на стандарте H3 и поддерживающий CDN, который также можно использовать с обратным проксированием и Browser Dialer для сокрытия себя.
+2 -2
View File
@@ -106,8 +106,8 @@ API для изменения входящих и исходящих подкл
- Удаление существующего исходящего подключения;
- Получение списка входящих подключений;
- Получение списка исходящих подключений;
- Добавление пользователя к входящему подключению (поддерживается только для VMess, VLESS, Trojan, Shadowsocks (v1.3.0+));
- Удаление пользователя из входящего подключения (поддерживается только для VMess, VLESS, Trojan, Shadowsocks (v1.3.0+));
- Добавление пользователя к входящему подключению (поддерживается только для VMess, VLESS, Trojan, Shadowsocks);
- Удаление пользователя из входящего подключения (поддерживается только для VMess, VLESS, Trojan, Shadowsocks);
### RoutingService
+13 -10
View File
@@ -15,7 +15,7 @@
- Перехват DNS-трафика в режиме TUN/Transparent Proxy через связку routing и DNS outbound, чтобы направлять DNS-трафик в этот модуль; либо работа в качестве рекурсивного DNS-сервера, открытого на порту 53.
::: tip TIP 1
DNS-запросы, отправляемые встроенным DNS-сервером, автоматически перенаправляются в соответствии с конфигурацией маршрутизации (Routing).
DNS-сервер по умолчанию проходит сопоставление в системе маршрутизации, если только он не содержит `+local`. При использовании доменных имён внутри него обратите внимание на возможные петли (loop); может помочь `hosts`.
:::
::: tip TIP 2
@@ -24,16 +24,19 @@ DNS-запросы, отправляемые встроенным DNS-серве
## Процесс обработки DNS
Если запрашиваемый домен:
Домен сначала проходит проверку сопоставления Hosts (см. поле `hosts`). Если нужный IP не найден, для запроса используется DNS-сервер.
- Попадает в маппинг «домен - IP» или «домен - массив IP» в `hosts`, то этот IP или массив возвращается как результат DNS-резолвинга.
- Попадает в маппинг «домен - домен» в `hosts`, то значение (другой домен) становится текущим запрашиваемым доменом и снова проходит процесс обработки DNS, пока не будет получен IP или пустой ответ.
- Не попал в `hosts`, но попал в список доменов `domains` одного (или нескольких) DNS-серверов, то запрос выполняется через эти серверы в порядке приоритета правил. Если запрос к выбранному серверу не удался или `expectedIPs` не совпали, используется следующий подходящий сервер; в противном случае возвращается полученный IP. Если все подходящие серверы не смогли выполнить запрос или `expectedIPs` не совпали, компонент DNS:
- По умолчанию выполняет «DNS Fallback запрос»: последовательно опрашиваются серверы, которые «не использовались в предыдущем неудачном раунде и имеют `skipFallback` со значением по умолчанию `false`». Если запрос не удался или `expectedIPs` не совпали, возвращается пустой ответ; иначе — полученный IP.
- Если `disableFallback` установлено в `true`, «DNS Fallback запрос» не выполняется.
- Не попал ни в `hosts`, ни в списки `domains` DNS-серверов, то:
- По умолчанию последовательно используются «серверы с `skipFallback` по умолчанию `false`». Если первый выбранный сервер не смог выполнить запрос или `expectedIPs` не совпали, используется следующий; иначе возвращается IP. Если все выбранные серверы потерпели неудачу, возвращается пустой ответ.
- Если количество «серверов с `skipFallback` по умолчанию `false`» равно 0 или `disableFallback` установлено в `true`, используется первый DNS-сервер из конфигурации. При неудаче возвращается пустой ответ, при успехе — IP.
Затем ядро начинает строить список серверов, сортируя их в зависимости от запрашиваемого домена по следующим правилам.
- Построение списка 1: содержит серверы, у которых поле `domains` успешно совпало с запрашиваемым доменом, в порядке их появления в конфигурационном файле.
- Проверка `disableFallback`: если `true`, построение списка 2 пропускается.
- Проверка `disableFallbackIfMatch`: если `true` и список 1 не пуст, построение списка 2 пропускается.
- Построение списка 2: содержит серверы, не входящие в список 1, у которых `skipFallback` не равно `true`, в порядке их появления в конфигурационном файле.
- Итоговый список серверов = список 1 + список 2.
Примечание: любой DNS-сервер с `FinalQuery`, равным `true`, напрямую усекает последующую часть списка.
При выполнении DNS-запроса ядро последовательно опрашивает серверы из итогового списка, фильтруя результаты с помощью `expectedIPs` и `unexpectedIPs`; если результат пуст, переходит к следующему серверу в списке. (При `enableParallelQuery`, равном `true`, поведение немного отличается, подробнее см. описание этого поля.)
## DnsObject
+2
View File
@@ -30,6 +30,8 @@ Xray предоставляет следующие переменные сред
Файлы `.json` в этом каталоге будут читаться в порядке имен файлов как параметры конфигурации.
Этот параметр имеет более низкий приоритет, чем аргумент запуска `confdir`.
## Строгий JSON-парсер
- Название: `xray.json.strict` или `XRAY_JSON_STRICT`.
+1 -2
View File
@@ -59,7 +59,7 @@
Обратите внимание, что прослушивание порта — это довольно ресурсоемкая операция. Прослушивание слишком большого диапазона портов может привести к значительному увеличению потребляемых ресурсов и даже нарушить нормальную работу Xray. Как правило, проблемы могут начаться, когда количество прослушиваемых портов приближается к четырехзначным числам. Если вам нужен большой диапазон, рассмотрите возможность использования iptables для перенаправления вместо того, чтобы настраивать его здесь.
> `protocol`: "dokodemo-door" | "http" | "shadowsocks" | "mixed" | "vless" | "vmess" | "trojan" | "wireguard" | "hysteria"
> `protocol`: "dokodemo-door" | "http" | "shadowsocks" | "socks" | "vless" | "vmess" | "trojan" | "wireguard" | "hysteria"
Название протокола соединения. Список доступных протоколов см. в разделе [Входящие протоколы](./inbounds/) в меню слева.
@@ -170,4 +170,3 @@ Xray будет использовать доменные имена, обнар
Если вы уверены, что **проксируемое соединение будет правильно разрешено DNS**, то при использовании `routeOnly` и включенном `destOverride` можно установить стратегию сопоставления маршрутов `domainStrategy` в `AsIs`, чтобы реализовать разделение трафика по доменам и IP-адресам без DNS-разрешения.
В этом случае при сопоставлении правил на основе IP-адресов будет использоваться исходный IP-адрес домена.
:::
ы
-2
View File
@@ -38,8 +38,6 @@
Перенаправлять трафик на этот адрес. Может быть IP-адресом, например, `"1.2.3.4"`, или доменным именем, например, `"xray.com"`, по умолчанию `"localhost"`.
Если `followRedirect` (см. ниже) равно `true`, то `rewriteAddress` может быть пустым.
> `rewritePort`: number
Перенаправляет трафик на указанный порт целевого адреса, диапазон `[0, 65535]`, числовой тип. Если не заполнено или равно `0`, по умолчанию используется порт прослушиваемого адреса.
+1 -14
View File
@@ -14,9 +14,8 @@ VLESS - это легкий транспортный протокол без с
{
// ...
"protocol": "vless",
// [!code focus:18]
// [!code focus:17]
"settings": {
"flow": "xtls-rprx-vision",
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
@@ -38,18 +37,6 @@ VLESS - это легкий транспортный протокол без с
}
```
> `flow`: string
Режим управления потоком, используется для выбора алгоритма XTLS.
Это работает аналогично настройке внутри каждого клиента [UserObject](#userobject), но задается глобально для всех пользователей данного inbounds.
Если параметр отсутствует, ядро будет использовать значение flow, указанное индивидуально внутри каждого объекта [UserObject](#userobject).
В настоящее время доступны следующие режимы:
- Отсутствует `flow` или пустая строка: используется обычный TLS-прокси
- `xtls-rprx-vision`: используется новый режим XTLS, включает случайное заполнение внутреннего рукопожатия
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий группу пользователей, одобренных сервером.
+2
View File
@@ -76,3 +76,5 @@ LogObject соответствует полю `log` в конфигурацио
- ipv4 `1.2.*.*` `1.*.*.*` `[Masked IPv4]`
- ipv6 `1234:5678::/32` `1234::/16` `[Masked IPv6]`
При более специфических требованиях можно использовать пользовательский формат, например `/16+/32`. Формат задает количество бит, которые остаются немаскированными; первое число относится к IPv4, второе — к IPv6, причем значение для IPv4 должно делиться на 8. `/32` или `/128` означает полное отсутствие маскировки, а `/0` приводит к отображению `[Masked IPv4/IPv6]`.
+19 -1
View File
@@ -34,6 +34,8 @@ URL-адрес, используемый для проверки состоян
Формат времени: число + единица измерения, например `"10s"`, `"2h45m"`.
Поддерживаемые единицы измерения: `ns`, `us`, `ms`, `s`, `m`, `h` (наносекунды, микросекунды, миллисекунды, секунды, минуты, часы).
Обратите внимание, что поскольку интервал между запросами фиксирован, периодические запросы через равные промежутки времени могут создавать характерный шаблон поведения. Использование протоколов с мультиплексированием или включение `mux` может смягчить эту проблему.
> `enableConcurrency`: true | false
- `true` - проверять все соответствующие исходящие прокси одновременно, после чего сделать паузу на время, указанное в `probeInterval`.
@@ -63,6 +65,9 @@ URL-адрес, используемый для проверки состоян
```json
{
// Для каждого исходящего прокси выполняется 10 проверок в течение 10 минут, конкретное время проверок случайно
// Если все они завершатся неудачей, узел будет помечен как неисправный в течение 10 ~ 20 минут
// После сбоя достаточно одной успешной проверки, чтобы узел был помечен как исправный, на это потребуется не более 10 минут
"destination": "https://connectivitycheck.gstatic.com/generate_204",
"connectivity": "",
"interval": "1m",
@@ -81,11 +86,18 @@ URL-адрес, используемый для проверки состоян
> `connectivity`: string
URL-адрес, используемый для проверки подключения к локальной сети.
Этот URL-адрес должен возвращать код состояния HTTP 204.
Пустая строка означает, что проверка подключения к локальной сети не выполняется.
Эта проверка выполняется только тогда, когда проверка `destination` завершается неудачей. Это позволяет более четко отразить в журнале причину отсутствия сетевого подключения.
Внимание: в режиме прозрачного проксирования этот запрос может быть перехвачен прозрачным прокси и снова попасть в Xray для маршрутизации (в зависимости от вашей конфигурации). Необходимо принять дополнительные меры, чтобы он не был перехвачен прозрачным прокси, например, обход по IP-адресу URL, либо использование cgroup, pid-маршрутизации и других способов, чтобы запросы Xray полностью не перехватывались. Либо вы можете выбрать URL-адрес, который соответствует правилу прямого подключения, и позволить этому запросу быть перехваченным прозрачным прокси.
> `interval`: string
Проверить все соответствующие исходящие прокси в течение указанного времени, отправляя `sampling` + 1 запросов на каждый прокси.
Ожидаемый **средний** интервал между проверками для каждого исходящего прокси.
Формат времени: число + единица измерения, например `"10s"`, `"2h45m"`.
Поддерживаемые единицы измерения: `ns`, `us`, `ms`, `s`, `m`, `h` (наносекунды, микросекунды, миллисекунды, секунды, минуты, часы).
По умолчанию `"1m"`. Минимальное допустимое значение — `"10s"`. Если указано меньше, будет использовано `"10s"`.
@@ -105,3 +117,9 @@ URL-адрес, используемый для проверки подключ
HTTP-метод, используемый для выполнения проверки (например, `"HEAD"`, `"GET"`).
По умолчанию `"HEAD"`.
::: tip
Принцип работы мониторинга параллельных подключений заключается в том, что каждые `interval` \* `sampling` (далее — цикл проверки) для каждого совпавшего исходящего прокси немедленно планируется задача проверки, но сама проверка выполняется в случайный момент времени в пределах цикла каждой задачи. Это означает, что по сравнению с `observatory` (фоновым мониторингом подключений) характерный шаблон этого детектора менее заметен. Но если `interval` задан слишком малым или `sampling` слишком большим, что приводит к частым проверкам, шаблон станет более заметным.
`interval` и `sampling` совместно влияют на чувствительность переключения при сбое и восстановления. Когда узел постоянно не проходит проверки, чтобы пометить его как неисправный, требуется минимум 1 цикл проверки и максимум 2 цикла проверки. Для восстановления после сбоя требуется одна успешная проверка, что зависит от плотности проверок; максимум на это уходит 1 цикл проверки.
:::
+2 -2
View File
@@ -67,11 +67,11 @@
> `method`: string
Обязательный параметр.
Метод шифрования Shadowsocks. Обязательный параметр.
> `password`: string
Обязательный параметр.
Пароль аутентификации Shadowsocks. Обязательный параметр.
> `uot`: bool
+6 -6
View File
@@ -1,6 +1,6 @@
# Socks (Mixed)
# Socks
Стандартная реализация протокола Socks, совместимая с [Socks 4](http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol), [Socks 4a](https://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4A.protocol) и Socks 5.
Стандартная реализация протокола Socks, совместимая с Socks 5.
::: danger
**Протокол Socks не обеспечивает шифрования передачи, поэтому он не подходит для передачи данных через общедоступные сети.**
@@ -44,18 +44,18 @@
> `user`: string
Имя пользователя, тип данных: строка. Обязательный параметр.
Имя пользователя, тип данных: строка. Обязательный параметр, если удаленный сервер требует аутентификации; в противном случае не включайте этот элемент.
> `pass`: string
Пароль, тип данных: строка. Обязательный параметр.
Пароль, тип данных: строка. Обязательный параметр, если удаленный сервер требует аутентификации; в противном случае не включайте этот элемент.
> `level`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя. Необязательный параметр, если удаленный сервер требует аутентификации; в противном случае не включайте этот элемент.
Значение userLevel соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.
> `email`: string
Адрес электронной почты, используемый для идентификации пользователя.
Адрес электронной почты, используемый для идентификации пользователя. Необязательный параметр, если удаленный сервер требует аутентификации; в противном случае не включайте этот элемент.
+4 -19
View File
@@ -16,8 +16,10 @@ VMess полагается на системное время. Убедитес
{
// ...
"protocol": "vmess",
// [!code focus:6]
// [!code focus:8]
"settings": {
"address": "127.0.0.1",
"port": 37192,
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
@@ -36,23 +38,6 @@ VMess полагается на системное время. Убедитес
Номер порта, который прослушивает сервер, обязательный параметр.
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий группу пользователей, распознаваемых сервером.
Каждый элемент - это пользователь [UserObject](#userobject).
#### UserObject
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
"experiments": ""
}
```
> `id`: string
Идентификатор пользователя VMess, может быть любой строкой длиной менее 30 байт или допустимым UUID.
@@ -92,4 +77,4 @@ VMess полагается на системное время. Убедитес
"AuthenticatedLength" включает эксперимент с аутентифицированной длиной пакета. Этот эксперимент необходимо включить одновременно на клиенте и сервере, а также запустить одну и ту же версию программы.
"NoTerminationSignal" включает эксперимент с отключением сигнала завершения соединения. Этот эксперимент может повлиять на стабильность проксируемого соединения.
"NoTerminationSignal" включает отправку отключенного сигнала разрыва соединения. Эта функция теперь включена по умолчанию.
+4 -18
View File
@@ -101,26 +101,12 @@ MTU нижнего уровня tun в Wireguard.
> `domainStrategy`: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP"
Управляет стратегией разрешения доменных имен, когда адрес сервера Wireguard является доменным именем или целевой адрес проксируемого трафика является доменным именем.
В отличие от большинства прокси-протоколов, Wireguard не позволяет передавать доменные имена в качестве целей. Если в качестве цели передается доменное имя, оно разрешается в IP-адрес через встроенный DNS Xray. Подробнее см. поле `domainStrategy` для outbound `Freedom`. По умолчанию используется `ForceIP`.
Примечание: В настройках `Freedom` доступны опции, такие как `UseIP`, которые здесь отсутствуют, так как Wireguard требует наличия действительного IP-адреса.
```json
{
"dns": {
"servers": [
"https://1.1.1.1/dns-query",
{
"address": "https://1.1.1.1/dns-query",
"domains": ["geosite:openai"],
"skipFallback": true,
"queryStrategy": "UseIPv6" // Запрос только AAAA-записей
}
],
"queryStrategy": "UseIP" // Запрос A и AAAA одновременно. Если не указано, используется значение по умолчанию UseIP.
}
}
```
В настройках `domainStrategy` outbound `Freedom` доступны опции, такие как `UseIP`, которые здесь отсутствуют, так как Wireguard должен получить действительный IP-адрес и не может выполнять откат к доменному имени после неудачного разрешения `UseIP`.<br>
Примечание: при применении к проксируемому трафику эта опция также ограничивается опцией `address`. Например, если вы установили `ForceIPv6v4`, но в `address` не задан IPv6-адрес, то даже при наличии у целевого домена AAAA-записей они не будут разрешены.
### Peers
+1 -1
View File
@@ -103,7 +103,7 @@ Xray будет применять различные локальные пол
> `statsUserOnline`: true | false
Если значение равно `true`, включить учет пользоватлей онлайн для всех пользователей текущего уровня по электронной почте.
Если значение равно `true`, включить учет количества онлайн-пользователей для всех пользователей текущего уровня. (Критерий онлайн: наличие сетевой активности в течение 20 секунд)
> `bufferSize`: number
+12 -8
View File
@@ -24,11 +24,17 @@
Стратегия разрешения доменных имен. Используются разные стратегии в зависимости от настройки.
- `"AsIs"`: для выбора маршрута используются только доменные имена. Значение по умолчанию.
- `"IPIfNonMatch"`: если доменное имя не соответствует ни одному правилу, доменное имя разрешается в IP-адрес (запись A или запись AAAA) для повторного сопоставления;
- Если у доменного имени несколько записей A, предпринимается попытка сопоставить все записи A, пока одна из них не будет соответствовать какому-либо правилу;
- Разрешенный IP-адрес используется только при выборе маршрута, в пересылаемых пакетах данных по-прежнему используется исходное доменное имя;
- `"IPOnDemand"`: если при сопоставлении встречается любое правило на основе IP-адреса, доменное имя немедленно разрешается в IP-адрес для сопоставления;
- `"AsIs"`: никаких дополнительных операций не выполняется, используется доменное имя из целевого адреса или доменное имя, полученное при sniff. Значение по умолчанию.
- `"IPIfNonMatch"`: после завершения целого раунда сопоставления, если ни одно правило не сработало, доменное имя разрешается в IP-адрес и выполняется повторное сопоставление.
- `"IPOnDemand"`: перед началом сопоставления доменное имя сразу разрешается в IP-адрес для сопоставления.
Фактическое разрешение будет отложено до момента, когда впервые встретится правило на основе IP, чтобы уменьшить задержку. Результат будет содержать одновременно IPv4 и IPv6 (вы можете дополнительно ограничить это через `queryStrategy` во встроенном DNS). Когда доменное имя разрешается в несколько IP-адресов, каждое правило по очереди пробует все IP-адреса; если хотя бы один IP соответствует требованию, правило считается сработавшим.
Когда включены sniff + routeOnly, что позволяет системе маршрутизации одновременно видеть IP и доменное имя, в случае указанного выше разрешения система маршрутизации может видеть только IP, полученный из доменного имени, и не может видеть исходный целевой IP, если только разрешение не завершится неудачей.
Когда существуют два доменных имени (целевое доменное имя + результат sniff), приоритет результата sniff всегда выше, как при разрешении, так и при сопоставлении доменных имен.
Независимо от того, выполняется разрешение или нет, система маршрутизации не влияет на фактический целевой адрес. Целью запроса по-прежнему остается исходная цель.
> `rules`: \[[RuleObject](#ruleobject)\]
@@ -80,8 +86,6 @@
> `domain`: \[string\]
Массив, каждый элемент которого представляет собой сопоставление доменного имени. Возможны следующие форматы:
- **Строка**: Аналогично подстроке ниже, но префикс `"keyword:"` в начале можно опустить.
- **Регулярное выражение**: Начинается с `"regexp:"`, остальная часть является регулярным выражением. Правило вступает в силу, когда это регулярное выражение соответствует целевому домену. Например, `"regexp:\\\\.goo.\*\\\\.com$"` соответствует `"www.google.com"` и `"fonts.googleapis.com"`, но не `"google.com"`. Чувствительно к регистру.
- **Поддомен (рекомендуется)**: Начинается с `"domain:"`, остальная часть — доменное имя. Правило вступает в силу, если это имя является целевым доменом или его поддоменом. Например, `"domain:xray.com"` соответствует `"www.xray.com"` и `"xray.com"`, но не `"wxray.com"`.
@@ -102,7 +106,7 @@
- IP-адрес: например, `"127.0.0.1"`.
- [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:private"`, включает в себя все частные адреса, например, `127.0.0.1`.
- Загрузка IP-адресов из файла: имеет вид `"ext:файл:тег"`, должно начинаться с `ext:` (в нижнем регистре), за которым следует имя файла и тег, файл хранится в [каталоге ресурсов](./features/env.md#путь-к-файлу-ресурсов), формат файла такой же, как у `geoip.dat`, тег должен существовать в файле.
- Функция инверсии `!`: `"!10.0.0.0/8"` обозначает всё, что не входит в `10.0.0.0/8`, а `"!geoip:cn"` — результаты, не входящие в `geoip:cn`. Несколько условий с отрицанием объединяются логическим **AND**, а положительные условия и совокупность всех отрицательных условий — логическим **OR**. Например, `ip: ["!geoip:cn", "!geoip:us", "geoip:telegram"]` соответствует IP, которые не относятся к США **И** не относятся к Китаю, **ИЛИ** являются IP Telegram.
+3 -2
View File
@@ -1,11 +1,12 @@
# gRPC
Режим передачи данных, основанный на HTTP/2, полностью соответствует стандарту HTTP/2 и может быть ретранслирован другими HTTP-серверами (такими как Nginx).
Режим передачи данных, основанный на gRPC.
Он основан на протоколе HTTP/2 и теоретически может быть ретранслирован через другие серверы, поддерживающие HTTP/2 (такие как Nginx).
gRPC (HTTP/2) имеет встроенное мультиплексирование, не рекомендуется включать mux.cool при использовании gRPC и HTTP/2.
::: danger
**Рекомендуется перейти на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947), преимущества которого перед gRPC отмечены в разделе STREAM-UP/ONE.**
**Рекомендуется перейти на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113), преимущества которого перед gRPC отмечены в разделе STREAM-UP/ONE.**
:::
::: warning ⚠⚠⚠
+1 -1
View File
@@ -1,3 +1,3 @@
# HTTP/2
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947)
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
+1 -1
View File
@@ -1,3 +1,3 @@
# HTTP
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947)
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
+2 -2
View File
@@ -5,7 +5,7 @@
Его дизайн не рекомендуется для самостоятельного использования, а лучше всего работает в сочетании с TLS.
::: danger
**Рекомендуется переключиться на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947), чтобы избежать значительных характеристик трафика, таких как HTTPUpgrade «ALPN is http/1.1».**
**Рекомендуется переключиться на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113), чтобы избежать значительных характеристик трафика, таких как HTTPUpgrade «ALPN is http/1.1».**
:::
## HTTPUpgradeObject
@@ -61,6 +61,6 @@ HTTP-путь, используемый HTTPUpgrade, по умолчанию `"/
> `headers`: map \{string: string\}
Пользовательские HTTP-заголовки, пара ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение - строка.
Только для клиента. Пользовательские HTTP-заголовки, пара ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение - строка.
По умолчанию пустое.
+1 -1
View File
@@ -1,3 +1,3 @@
# QUIC
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947)
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
+1 -1
View File
@@ -1,6 +1,6 @@
# RAW
Переименованный из транспортного уровня TCP (первоначальное название было неоднозначным), исходящий транспортный уровень RAW отправляет данные TCP и UDP, сгенерированные обертками прокси-протоколов, напрямую, и ядро не использует другие транспортные уровни (такие как [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947)) для передачи своего трафика.
Переименованный из транспортного уровня TCP (первоначальное название было неоднозначным), исходящий транспортный уровень RAW отправляет данные TCP и UDP, сгенерированные обертками прокси-протоколов, напрямую, и ядро не использует другие транспортные уровни (такие как [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113)) для передачи своего трафика.
Может использоваться в различных комбинациях с различными протоколами.
+1 -1
View File
@@ -1,3 +1,3 @@
# SplitHTTP
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947)
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
+3 -3
View File
@@ -5,7 +5,7 @@
Подключение WebSocket может быть проксировано другими HTTP-серверами (например, Nginx) и VLESS fallbacks path.
::: danger
**Рекомендуется переключиться на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947), чтобы избежать значительных характеристик трафика, таких как WebSocket «ALPN is http/1.1».**
**Рекомендуется переключиться на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113), чтобы избежать значительных характеристик трафика, таких как WebSocket «ALPN is http/1.1».**
:::
::: tip
@@ -54,7 +54,7 @@ WebSocket распознает заголовок X-Forwarded-For в HTTP-зап
Путь, используемый WebSocket в HTTP-протоколе, значение по умолчанию — `"/"`.
Если в пути клиента есть параметр `ed` (например, `/mypath?ed=2560`), будет активирован `Early Data` для уменьшения задержки.
Если в пути клиента есть параметр `ed` (например, `/mypath?ed=2560`), будет активирован `Early Data` для уменьшения задержки. При этом во время апгрейда данные первого пакета передаются через заголовок `Sec-WebSocket-Protocol`, а значение параметра задает пороговое значение длины первого пакета. Если длина первого пакета превышает это значение, `Early Data` не активируется. Рекомендуемое значение — 2560, максимальное — 8192. Слишком большие значения могут привести к проблемам совместимости; если вы столкнулись с такими проблемами, попробуйте уменьшить порог.
> `host`: string
@@ -66,7 +66,7 @@ WebSocket распознает заголовок X-Forwarded-For в HTTP-зап
> `headers`: map \{string: string\}
Пользовательские HTTP-заголовки, пары ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение является строкой.
Только для клиента. Пользовательские HTTP-заголовки, пары ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение является строкой.
Значение по умолчанию: пустое.
+1 -1
View File
@@ -1,3 +1,3 @@
# XHTTP: Beyond REALITY
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947)
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
+2 -2
View File
@@ -145,6 +145,6 @@ Xray-core
**Для разработчика**
Если вам нужно использовать диапазон в файле конфигурации, используйте тип `Int32Range`. Для получения значений используйте `.From` и `.To` вместо использования строкового типа (`string`) и последующего ручного разбора.
Если вам нужно использовать диапазон в файле конфигурации, используйте тип `Int32Range`.
Метод `.EnsureOrder()` можно использовать для обмена значений From и To, если From больше, чем To (при необходимости).
Используйте `.From` и `.To` для получения значений. Когда From > To (например, 1919-810), значения автоматически меняются местами, чтобы гарантировать, что From меньше To. Если вы хотите получить исходные значения, можно использовать `.Left` и `.Right`.
+1
View File
@@ -20,6 +20,7 @@ The commands are:
run Запустить Xray с конфигурацией
version Показать текущую версию Xray
api Вызвать API в процессе Xray
convert Конвертировать конфигурации
tls Инструменты TLS
uuid Сгенерировать UUIDv4 или UUIDv5 (VLESS)
x25519 Сгенерировать ключевую пару для обмена ключами X25519 (REALITY, VLESS Encryption)
+6
View File
@@ -2,6 +2,12 @@
> **В этой главе вы узнаете, как максимально просто получить Xray и начать его использовать.**
::: tip
Этот раздел не обновлялся уже довольно давно, поэтому некоторые места могут быть не вполне актуальными. Мы стараемся поддерживать в актуальном состоянии в первую очередь документацию по файлу конфигурации. Если вы где-то столкнулись с трудностями и у вас есть предложения по исправлению, мы будем рады PR.
ℱ.
:::
## Загрузка и установка
Xray поддерживает разнообразные платформы, и вы можете получить разные версии Xray из множества источников и различными способами.
+1 -1
View File
@@ -225,7 +225,7 @@
![Генерация ключей](./ch04-img08-puttygen-save.png)
::: warning
На скриншоте показан пример генерации 2048-битного RSA-ключа. Однако для достижения уровня безопасности, со comparableного с 256-битным ключом ECDSA/Ed25519, вам нужно сгенерировать 3072-битный RSA-ключ (т.е. ввести значение `3072` в поле «Number of bits in a generated key»).
На скриншоте показан пример генерации 2048-битного RSA-ключа. Однако для достижения уровня безопасности, сопоставимого с 256-битным ключом ECDSA/Ed25519, вам нужно сгенерировать 3072-битный RSA-ключ (т.е. ввести значение `3072` в поле «Number of bits in a generated key»).
::: 2. Вы можете установить пароль для защиты приватного ключа. 3. Нажмите кнопку **Save public key**, чтобы сохранить публичный ключ в файл `id_rsa.pub`. 4. Нажмите кнопку **Save private key**, чтобы сохранить приватный ключ в файл `id_rsa` (приватные ключи PuTTY имеют расширение `.ppk`). 5. **Важно!** Скопируйте содержимое поля, выделенного красной рамкой (не забудьте прокрутить текст до конца!), и сохраните его в файл `authorized_keys`. (Если вы будете использовать для этого VSCode, файл будет сохранён с расширением `.txt` — `authorized_keys.txt`. Это нормально, позже мы переименуем файл).
![Сохранение ключей](./ch04-img09-puttygen-save-keys.png)
+3 -3
View File
@@ -135,13 +135,13 @@
</html>
```
5. Дайте другим пользователям право на чтение этого файла:
Дайте другим пользователям право на чтение этого файла:
```shell
chmod -R a+r .
```
6. Отредактируйте файл `nginx.conf` и перезапустите Nginx, чтобы он открывал созданную нами страницу `index.html` при обращении к порту `80`.
5. Отредактируйте файл `nginx.conf` и перезапустите Nginx, чтобы он открывал созданную нами страницу `index.html` при обращении к порту `80`.
1. Отредактируйте файл `nginx.conf`.
```shell
@@ -191,7 +191,7 @@
- Вы работаете не под пользователем `root`, но скопировали команды из статьи без изменений (как будто списали домашнее задание вместе с именем одноклассника).
- Вы работаете под пользователем `root`.
Если у вас возникли проблемы, вернитесь к разделу 5.3 и внимательно перечитайте пункты 3 и 6.2.
Если у вас возникли проблемы, вернитесь к разделу 5.3 и внимательно перечитайте пункты 3 и 5.2.
::: warning
В предыдущих главах мы много говорили о важности использования пользователя, отличного от `root`, и вся статья написана с учётом этого. Поэтому проблемы, связанные с использованием `root`, не рассматриваются в рамках этой статьи.
+2 -2
View File
@@ -349,10 +349,10 @@ Xray основан на проекте с открытым исходным к
net.ipv4.tcp_congestion_control=bbr
```
9. Перезагружаем VPS, чтобы настройки `BBR` вступили в силу:
9. Считываем конфигурацию, чтобы настройки `BBR` вступили в силу:
```shell
sudo reboot
sudo sysctl --system
```
10. Проверяем, что `BBR` включён
@@ -554,4 +554,10 @@ IP-адреса пограничного маршрутизатора можно
## Заключение
В настоящее время IPv6 еще не получил широкого распространения, и 99% трафика, к которому мы обращаемся, по-прежнему приходится на IPv4.
Многие провайдеры VPS
Многие провайдеры VPS хотя и предоставляют IPv6-адреса, но оптимизация маршрутов у них очень плохая, вплоть до полной неработоспособности. Так зачем же добавлять настройки IPv6?
Можно заметить, что в настоящее время IPv6 находится в довольно неловком положении: поддержка IPv6 на различных устройствах оставляет желать лучшего, но постепенно улучшается. В то же время приоритет IPv6 в системах Windows также растет, многие браузеры отдают предпочтение разрешению и доступу по IPv6, а многие сайты уже начали по умолчанию использовать IPv6 (например, Netflix; если IPv6 не настроен, при открытии Netflix в браузере отобразится «Not Available», поскольку IPv6-запросы Netflix не проксируются. Конечно, можно отключить IPv6 в Windows, но тогда не будут работать PT-сайты, поддерживающие IPv6).
В таком случае IPv4 не может полностью удовлетворить потребности в веб-серфинге, и даже тот 1% трафика, столкнувшись с которым, может вызвать немало головной боли.
При этом можно предположить, что IPv6 постепенно начнет конкурировать с IPv4, поэтому добавление настроек IPv6 является необходимым.
+1 -1
View File
@@ -101,7 +101,7 @@ bash -c "$(curl -L wgcf-cli.vercel.app)"
- Полный файл будет сохранен в файле `wgcf.json` в текущем каталоге.
3. Запустите `wgcf-cli generate --xray`, чтобы создать исходящий WireGuard.
Содержимое будет сохранено в файле `wgcf.json.xray.json`.
Содержимое будет сохранено в файле `wgcf.xray.json`.
- Пример файла: