补充一些内容和修正 (#447)

* Update routing.md

* Update vmess.md

* Update README.md

* Create metrics.md

* Update inbound.md

* Update wireguard.md

* Update freedom.md

* Update api.md

* Update routing.md

* Update grpc.md

* Update grpc.md

* Update transport.md

补充 tcpWindowClamp 参数,参数介绍是谷歌搜索的。

* Update transport.md
pull/448/head
ちか 2024-01-08 03:19:56 +08:00 committed by GitHub
parent d95dbe2da4
commit 7d80639f6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 322 additions and 70 deletions

View File

@ -22,7 +22,8 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
"transport": {},
"stats": {},
"reverse": {},
"fakedns": {}
"fakedns": {},
"metrics": {}
}
```
@ -75,3 +76,7 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
> fakedns: [FakeDnsObject](./fakedns.md)
FakeDNS 配置。可配合透明代理使用,以获取实际域名。
> metrics: [metricsObject](./metrics.md)
metrics 配置。更直接(希望更好)的统计导出方式。

View File

@ -65,6 +65,17 @@ API 接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供
}
```
在基础配置中增加 api
```json
"api": {
"tag": "api",
"services": [
"StatsService"
]
}
```
## 支持的 API 列表
### HandlerService

View File

@ -111,11 +111,11 @@
其中 `["fakedns+others"]` 相当于 `["http", "tls", "quic", "fakedns"]`,当 IP 地址处于 FakeIP 区间内但没有命中域名记录时会使用 `http`、`tls` 和 `quic` 进行匹配。此项仅在 `metadataOnly``false` 时有效。
::: tip 1
::: tip
Xray只会嗅探 `destOverride` 中协议的域名用作路由,如果只想进行嗅探用作路由而不想重置目标地址,请在这里添加对应的协议并启用 `routeOnly`
:::
::: tip 2
::: tip
当使用 Tor 浏览器设置使用代理访问互联网HTTP / SOCKS地址为本地 IP 127.0.0.1,需要关闭 `"sniffing"` 才能正常使用。
:::

275
docs/config/metrics.md Normal file
View File

@ -0,0 +1,275 @@
# metrics
更直接(希望更好)的统计导出方式。
## 相关配置
可以在 inbounds 配置中增加一个 metrics 的 inbound
```json
"inbounds": [
{
"listen": "127.0.0.1",
"port": 11111,
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1"
},
"tag": "metrics_in"
}
]
```
在路由配置中增加针对 metrics inbound 的路由规则
```json
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"metrics_in"
],
"outboundTag": "metrics_out"
}
]
}
```
在基础配置中增加 metrics
```json
"metrics": {
"tag": "metrics_out"
}
```
## 使用方法
### pprof
Access `http://127.0.0.1:11111/debug/pprof/` or use go tool pprof to start profiling or inspect running goroutines.
### expvars
Access `http://127.0.0.1:11111/debug/vars`
Variables exported include:
* `stats` includes statistics about inbounds, outbounds and users
* `observatory` includes observatory results
for example with [luci-app-xray](https://github.com/yichya/luci-app-xray) you are likely to get a result like this (standard expvar things like `cmdline` and `memstats` are omitted)
<details><summary>点击查看</summary><br>
```json
{
"observatory": {
"tcp_outbound": {
"alive": true,
"delay": 782,
"outbound_tag": "tcp_outbound",
"last_seen_time": 1648477189,
"last_try_time": 1648477189
},
"udp_outbound": {
"alive": true,
"delay": 779,
"outbound_tag": "udp_outbound",
"last_seen_time": 1648477191,
"last_try_time": 1648477191
}
},
"stats": {
"inbound": {
"api": {
"downlink": 0,
"uplink": 0
},
"dns_server_inbound_5300": {
"downlink": 14286,
"uplink": 5857
},
"http_inbound": {
"downlink": 74460,
"uplink": 10231
},
"https_inbound": {
"downlink": 0,
"uplink": 0
},
"metrics": {
"downlink": 6327,
"uplink": 1347
},
"socks_inbound": {
"downlink": 19925615,
"uplink": 5512
},
"tproxy_tcp_inbound": {
"downlink": 4739161,
"uplink": 1568869
},
"tproxy_udp_inbound": {
"downlink": 0,
"uplink": 2608142
}
},
"outbound": {
"blackhole_outbound": {
"downlink": 0,
"uplink": 0
},
"direct": {
"downlink": 97714548,
"uplink": 3234617
},
"dns_server_outbound": {
"downlink": 7116,
"uplink": 2229
},
"manual_tproxy_outbound_tcp_1": {
"downlink": 0,
"uplink": 0
},
"manual_tproxy_outbound_udp_1": {
"downlink": 0,
"uplink": 0
},
"tcp_outbound": {
"downlink": 23873238,
"uplink": 1049595
},
"udp_outbound": {
"downlink": 639282,
"uplink": 74634
}
},
"user": {}
}
}
```
</details>
To get a better view of these numbers, [Netdata](https://github.com/netdata/netdata) (with python.d plugin) is a great option:
1. Edit related configuration file (`sudo /etc/netdata/edit-config python.d/go_expvar.conf`)
2. Take the following configuration file as an example:
<details><summary>点击查看</summary><br>
```
xray:
name: 'xray'
update_every: 2
url: 'http://127.0.0.1:11111/debug/vars'
collect_memstats: false
extra_charts:
- id: 'inbounds'
options:
name: 'inbounds'
title: 'Xray System Inbounds'
units: bytes
family: xray
context: xray.inbounds
chart_type: line
lines:
- expvar_key: stats.inbound.tproxy_tcp_inbound.downlink
id: 'tcp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.tproxy_udp_inbound.downlink
id: 'udp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.http_inbound.downlink
id: 'http.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.https_inbound.downlink
id: 'https.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.socks_inbound.downlink
id: 'socks.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.tproxy_tcp_inbound.uplink
id: 'tcp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.tproxy_udp_inbound.uplink
id: 'udp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.http_inbound.uplink
id: 'http.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.https_inbound.uplink
id: 'https.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.socks_inbound.uplink
id: 'socks.uplink'
algorithm: incremental
expvar_type: int
- id: 'outbounds'
options:
name: 'outbounds'
title: 'Xray System Outbounds'
units: bytes
family: xray
context: xray.outbounds
chart_type: line
lines:
- expvar_key: stats.outbound.tcp_outbound.downlink
id: 'tcp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.udp_outbound.downlink
id: 'udp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.direct.downlink
id: 'direct.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.tcp_outbound.uplink
id: 'tcp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.udp_outbound.uplink
id: 'udp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.direct.uplink
id: 'direct.uplink'
algorithm: incremental
expvar_type: int
- id: 'observatory'
options:
name: 'observatory'
title: 'Xray Observatory Metrics'
units: milliseconds
family: xray
context: xray.observatory
chart_type: line
lines:
- expvar_key: observatory.tcp_outbound.delay
id: tcp
expvar_type: int
- expvar_key: observatory.udp_outbound.delay
id: udp
expvar_type: int
```
</details>
And you will get a nice plot like this:
![160428235-2988bf69-5d6c-41ec-8267-1bd512508aa8](https://github.com/chika0801/Xray-docs-next/assets/88967758/455e88ce-ced2-4593-a9fa-425bb293215b)
### Additional
Maybe reusing the empty object `stats` in config file is better than adding `metrics` here?
**Edit:** removed prometheus related things and added usage about expvars

View File

@ -30,60 +30,9 @@ Xray-core v1.8.6 新增功能:<br>
当目标地址为域名时配置相应的值Freedom 的行为模式如下:
- `"AsIs"`Freedom 使用系统 DNS 同时查询 A 和 AAAA 记录获取 IP向此域名发出连接。IPv4 或 IPv6 优先级由系统控制。
| | AsIs |
| :--- | :---: |
| 系统有 IPv4 IPv6 | 通常 IPv6 优先 |
| 系统只有 IPv4 | IPv4 |
| 系统只有 IPv6 | IPv6 |
- `"UseIP"`、`"UseIPv6v4"`、`"UseIPv6"`、`"UseIPv4v6"`、`"UseIPv4"`:使用 Xray-core [内置 DNS 服务器](../dns.md) 查询获取 IP向此域名发出连接。IPv4 或 IPv6 优先级详见下方表格。
| 系统有 IPv4 IPv6 | UseIP | UseIPv6v4 | UseIPv6 | UseIPv4v6 | UseIPv4 |
| :--- | :---: | :---: | :---: | :---: | :---: |
| `"queryStrategy": "UseIP"` | **1** | **2** | IPv6 | **3** | IPv4 |
| `"queryStrategy": "UseIPv4"` | IPv4 | **4** | **5** | **6** | IPv4 |
| `"queryStrategy": "UseIPv6"` | IPv6 | **7** | IPv6 | **8** | **9** |
**1** IPv4 IPv6 地址,随机优先<br>
**2** IPv4 IPv6 地址IPv6 优先<br>
**3** IPv4 IPv6 地址IPv4 优先<br>
**4** IPv4 IPv6 地址IPv6 优先IPv6 地址由系统 DNS 查询<br>
**5** IPv6 地址IPv6 地址由系统 DNS 查询<br>
**6** IPv4 IPv6 地址IPv4 优先IPv6 地址由系统 DNS 查询<br>
**7** IPv4 IPv6 地址IPv6 优先IPv4 地址由系统 DNS 查询<br>
**8** IPv4 IPv6 地址IPv4 优先IPv4 地址由系统 DNS 查询<br>
**9** IPv4 地址IPv4 地址由系统 DNS 查询
- `"ForceIP"`、`"ForceIPv6v4"`、`"ForceIPv6"`、`"ForceIPv4v6"`、`"ForceIPv4"`:使用 Xray-core [内置 DNS 服务器](../dns.md) 查询获取 IP向此域名发出连接。IPv4 或 IPv6 优先级详见下方表格。
| 系统有 IPv4 IPv6 | ForceIP | ForceIPv6v4 | ForceIPv6 | ForceIPv4v6 | ForceIPv4 |
| :--- | :---: | :---: | :---: | :---: | :---: |
| `"queryStrategy": "UseIP"` | **1** | **2** | IPv6 | **3** | IPv4 |
| `"queryStrategy": "UseIPv4"` | IPv4 | IPv4 | 冲突 | IPv4 | IPv4 |
| `"queryStrategy": "UseIPv6"` | IPv6 | IPv6 | IPv6 | IPv6 | 冲突 |
**1** IPv4 IPv6 地址,随机优先<br>
**2** IPv4 IPv6 地址IPv6 优先<br>
**3** IPv4 IPv6 地址IPv4 优先
- 当使用 `"UseIP"` 系列值 或 `"ForceIP"` 系列值时,若没写 `"dns"` 配置,使用系统 DNS 同时查询 A 和 AAAA 记录获取 IP向此域名发出连接。IPv4 或 IPv6 优先级详见下方表格。
| | UseIP | UseIPv6v4 | UseIPv6 | UseIPv4v6 | UseIPv4 |
| :--- | :---: | :---: | :---: | :---: | :---: |
| 系统有 IPv4 IPv6 | **1** | **2** | IPv6 | **3** | IPv4 |
| 系统只有 IPv4 | IPv4 | 冲突 | 冲突 | IPv4 | IPv4 |
| 系统只有 IPv6 | IPv6 | IPv6 | IPv6 | 冲突 | 冲突 |
| | ForceIP | ForceIPv6v4 | ForceIPv6 | ForceIPv4v6 | ForceIPv4 |
| :--- | :---: | :---: | :---: | :---: | :---: |
| 系统有 IPv4 IPv6 | **1** | **2** | IPv6 | **3** | IPv4 |
| 系统只有 IPv4 | IPv4 | 冲突 | 冲突 | IPv4 | IPv4 |
| 系统只有 IPv6 | IPv6 | IPv6 | IPv6 | 冲突 | 冲突 |
**1** IPv4 IPv6 地址,随机优先<br>
**2** IPv4 IPv6 地址IPv6 优先<br>
**3** IPv4 IPv6 地址IPv4 优先
- `"UseIP"`、`"UseIPv6v4"`、`"UseIPv6"`、`"UseIPv4v6"`、`"UseIPv4"`:使用 Xray-core [内置 DNS 服务器](../dns.md) 查询获取 IP向此域名发出连接。
- `"ForceIP"`、`"ForceIPv6v4"`、`"ForceIPv6"`、`"ForceIPv4v6"`、`"ForceIPv4"`:使用 Xray-core [内置 DNS 服务器](../dns.md) 查询获取 IP向此域名发出连接。
- 当使用 `"UseIP"` 系列值 或 `"ForceIP"` 系列值时,若没写 `"dns"` 配置,使用系统 DNS 同时查询 A 和 AAAA 记录获取 IP向此域名发出连接。
::: tip TIP 1
当使用 `"UseIP"`、`"ForceIP"` 模式时,并且 [出站连接配置](../outbound.md#outboundobject) 中指定了 `sendThrough`Freedom 会根据 `sendThrough` 的值自动判断所需的 IP 类型IPv4 或 IPv6。

View File

@ -18,7 +18,8 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0
"level": 0,
"experiments": ""
}
]
}
@ -62,7 +63,8 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0
"level": 0,
"experiments": ""
}
```
@ -108,3 +110,12 @@ level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。
无论使用哪种加密方式, VMess 的包头都会受到加密和认证的保护。
:::
> `experiments`: string
启用的 VMess 协议实验性功能。(此处的功能为不稳定功能, 可能随时被移除)多个启用的实验之间可以用 | 字符分割,如 "AuthenticatedLength|NoTerminationSignal" 。
"AuthenticatedLength" 启用认证的数据包长度实验。此实验需要同时在客户端与服务器端同时开启,并运行相同版本的程序。
"NoTerminationSignal" 启用不发送断开连接标致实验。此实验可能会影响被代理的连接的稳定性。

View File

@ -86,17 +86,6 @@ Xray-core v1.8.6 新增参数。<br>
若不写此参数,或留空,默认值 `"ForceIP"`<br>
当目标地址为域名时,使用 Xray-core [内置 DNS 服务器](../dns.md)查询获取 IP若没写 `"dns"` 配置,使用系统 DNS将此 IP 通过 wireguard 发出连接。<br>
| domainStrategy | test-ipv6.com | bgp.he.net | chat.openai.com |
| :--- | :---: | :---: | :---: |
| ForceIPv6v4 | IPv6v4地址 | IPv6地址 | IPv6地址 |
| ForceIPv6 | 网站打不开 | IPv6地址 | IPv6地址 |
| ForceIPv4v6 | IPv6v4地址 **1** | IPv4地址 | IPv4地址 |
| ForceIPv4 | IPv4地址 | IPv4地址 | IPv4地址 |
| ForceIP | IPv6v4地址 **2** | IPv6地址 | IPv6地址 |
**1** 提示`你已经有 IPv6 地址了,但你的浏览器不太愿意用,这一点比较令人担心。`<br>
**2** 有机率提示`你已经有 IPv6 地址了,但你的浏览器不太愿意用,这一点比较令人担心。`
::: tip
`domainStrategy` 的值与 `"dns"` 配置中 `"queryStrategy"` 的值产生冲突,会造成网站打开失败。
:::

View File

@ -113,6 +113,7 @@
- [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing):形如 `"10.0.0.0/8"`
- 预定义 IP 列表:此列表预置于每一个 Xray 的安装包中,文件名为 `geoip.dat`。使用方式形如 `"geoip:cn"`,必须以 `geoip:`(小写)开头,后面跟双字符国家代码,支持几乎所有可以上网的国家。
- 特殊值:`"geoip:private"`,包含所有私有地址,如 `127.0.0.1`
- 反选(!)功能,`"geoip:!cn"` 表示非 geoip:cn 中的结果。
- 从文件中加载 IP形如 `"ext:file:tag"`,必须以 `ext:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](./features/env.md#资源文件路径) 中,文件格式与 `geoip.dat` 相同标签必须在文件中存在。
> `port`number | string

View File

@ -88,6 +88,7 @@
"tcpcongestion": "bbr",
"interface": "wg0",
"V6Only": false,
"tcpWindowClamp": 600
"tcpMptcp": false,
"tcpNoDelay": false
}
@ -511,6 +512,7 @@ OCSP 装订更新,与证书热重载的时间间隔。 单位:秒。默认
"tcpcongestion": "bbr",
"interface": "wg0",
"V6Only": false,
"tcpWindowClamp": 600
"tcpMptcp": false,
"tcpNoDelay": false
}
@ -686,6 +688,10 @@ iOS / Mac OS 需要 Xray-core v1.8.6 或更高版本。
填写 `true` 时,监听 `::` 地址仅接受 IPv6 连接。仅支持 Linux。
> `tcpWindowClamp`: number
绑定通告的 windows 大小为该值。内核会在它与 SOCK_MIN_RCVBUF/2 之间选一个最大值。
> `tcpMptcp`: true | false
Xray-core v1.8.6 新增参数。<br>

View File

@ -50,6 +50,11 @@ gRPCHTTP/2内置多路复用不建议使用 gRPC 与 HTTP/2 时启用 m
一个字符串,指定服务名称,**类似于** HTTP/2 中的 Path。
客户端会使用此名称进行通信,服务端会验证服务名称是否匹配。
::: tip
`serviceName` 起始为斜杠时可以自定义 path。<br>
例如在服务端填写 `"serviceName": "/my/sample/path1|path2"`,客户端可填写 `"serviceName": "/my/sample/path1"``"/my/sample/path2"`
:::
> `user_agent`: string
::: tip