mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-09-27 09:27:58 +03:00
Add: config (wip)
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# API接口
|
||||
|
||||
API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供远程调用。
|
||||
|
||||
可以通过api配置模块开启接口. 当api配置开启时,Xray 会自建一个出站代理, 须手动将所有的 API 入站连接通过 [路由规则配置](../routing) 指向这一出站代理。
|
||||
|
||||
请参考本节中的[相关配置](#相关配置)
|
||||
|
||||
::: warning
|
||||
大多数用户并不会用到此 API,新手可以直接忽略这一项。
|
||||
:::
|
||||
|
||||
## ApiObject
|
||||
|
||||
`ApiObject` 对应配置文件的 `api` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"api": {
|
||||
"tag": "api",
|
||||
"services": [
|
||||
"HandlerService",
|
||||
"LoggerService",
|
||||
"StatsService"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `tag`: string
|
||||
|
||||
出站代理标识。
|
||||
|
||||
> `services`: \[string\]
|
||||
|
||||
开启的 API 列表,可选的值见 [API 列表](#支持的-api-列表)。
|
||||
|
||||
|
||||
## 相关配置
|
||||
|
||||
可以在 inbounds 配置中增加一个 api 的 inbound
|
||||
|
||||
```json
|
||||
"inbounds": [
|
||||
{
|
||||
"listen": "127.0.0.1",
|
||||
"port": 10085,
|
||||
"protocol": "dokodemo-door",
|
||||
"settings": {
|
||||
"address": "127.0.0.1"
|
||||
},
|
||||
"tag": "api"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
在路由配置中增加针对api inbound的路由规则
|
||||
|
||||
```json
|
||||
"routing": {
|
||||
"settings": {
|
||||
"rules": [
|
||||
{
|
||||
"inboundTag": [
|
||||
"api"
|
||||
],
|
||||
"outboundTag": "api",
|
||||
"type": "field"
|
||||
}
|
||||
]
|
||||
},
|
||||
"strategy": "rules"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 支持的 API 列表
|
||||
|
||||
### HandlerService
|
||||
|
||||
一些对于入站出站代理进行修改的 API,可用的功能如下:
|
||||
|
||||
- 添加一个新的入站代理;
|
||||
- 添加一个新的出站代理;
|
||||
- 删除一个现有的入站代理;
|
||||
- 删除一个现有的出站代理;
|
||||
- 在一个入站代理中添加一个用户(仅支持 VMess、VLESS、Trojan、Shadowsocks(v1.3.0+));
|
||||
- 在一个入站代理中删除一个用户(仅支持 VMess、VLESS、Trojan、Shadowsocks(v1.3.0+));
|
||||
|
||||
### LoggerService
|
||||
|
||||
支持对内置 Logger 的重启,可配合 logrotate 进行一些对日志文件的操作。
|
||||
|
||||
### StatsService
|
||||
|
||||
内置的数据统计服务,详见 [统计信息](./stats)。
|
||||
@@ -0,0 +1,150 @@
|
||||
# 内置DNS服务器
|
||||
|
||||
## DNS 服务器
|
||||
|
||||
|
||||
如果为 Xray 配置了 DNS 服务器模块,主要有两大用途:
|
||||
|
||||
- 在路由阶段, 解析域名为 IP, 并且根据域名解析得到的 IP 进行规则匹配以分流. 是否解析域名及分流和路由配置模块中"domainStrategy"的值有关, 只有在设置以下两种值时,才会使用内置 DNS 服务器进行 DNS 查询:
|
||||
|
||||
- "IPIfNonMatch", 请求一个域名时,进行路由里面的 domain 进行匹配,若无法匹配到结果,则对这个域名使用内置 DNS 服务器进行 DNS 查询,并且使用查询返回的 IP 地址再重新进行 IP 路由匹配。
|
||||
- "IPOnDemand", 当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配。
|
||||
|
||||
- 解析目标地址进行连接。
|
||||
- 如 在 `freedom` 协议的 `outbound` 中,将`domainStrategy` 设置为 `UseIP`, 由此 outbound 发出的请求, 会先将域名通过内置服务器解析成 IP, 然后进行连接
|
||||
|
||||
::: tip TIP 1
|
||||
内置 DNS 服务器所发出的 DNS 查询请求,会自动根据路由配置进行转发。
|
||||
:::
|
||||
|
||||
::: tip TIP 2
|
||||
只支持最基本的 IP 查询(A 和 AAAA 记录)。
|
||||
:::
|
||||
|
||||
|
||||
## DNS 处理流程
|
||||
DNS 服务器配置模块可以配置多个DNS服务器, 并且指定优先匹配列表.
|
||||
|
||||
1. 查询的域名与某个 DNS 服务器指定的域名列表匹配时,Xray 会优先使用这个 DNS 服务器进行查询
|
||||
2. 无匹配时, 按从上往下的顺序进行查询
|
||||
3. 只返回匹配 expectIPs 的 IP 列表。
|
||||
|
||||
DNS 服务器的处理流程示意图如下:
|
||||
|
||||

|
||||
|
||||
|
||||
## DnsObject
|
||||
`DnsObject` 对应配置文件的 `dns` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"dns": {
|
||||
"hosts": {
|
||||
"baidu.com": "127.0.0.1"
|
||||
},
|
||||
"servers": [
|
||||
"8.8.8.8",
|
||||
"8.8.4.4",
|
||||
{
|
||||
"address": "1.2.3.4",
|
||||
"port": 5353,
|
||||
"domains": ["domain:xray.com"],
|
||||
"expectIPs": ["geoip:cn"]
|
||||
},
|
||||
"localhost"
|
||||
],
|
||||
"clientIp": "1.2.3.4",
|
||||
"tag": "dns_inbound"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
>`hosts`: map{string: address}
|
||||
|
||||
静态 IP 列表,其值为一系列的 "域名": "地址"。其中地址可以是 IP 或者域名。在解析域名时,如果域名匹配这个列表中的某一项:
|
||||
|
||||
- 当该项的地址为 IP 时,则解析结果为该项的 IP
|
||||
- 当该项的地址为域名时,会使用此域名进行 IP 解析,而不使用原始域名。
|
||||
|
||||
域名的格式有以下几种形式:
|
||||
|
||||
- 纯字符串:当此字符串完整匹配目标域名时,该规则生效。例如 "xray.com" 匹配"xray.com" 但不匹配"www.xray.com"。
|
||||
- 正则表达式:由 `"regexp:"` 开始,余下部分是一个正则表达式。当此正则表达式匹配目标域名时,该规则生效。例如 "regexp:\\\\.goo.\*\\\\.com$" 匹配"www.google.com"或 "fonts.googleapis.com",但不匹配 "google.com"。
|
||||
- 子域名 (推荐):由 `"domain:"` 开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如 “domain:xray.com” 匹配"www.xray.com"、“xray.com”,但不匹配 “wxray.com”。
|
||||
- 子串:由 `"keyword:"` 开始,余下部分是一个字符串。当此字符串匹配目标域名中任意部分,该规则生效。比如 "keyword:sina.com" 可以匹配"sina.com"、"sina.com.cn" 和"www.sina.com",但不匹配 "sina.cn"。
|
||||
- 预定义域名列表:由 `"geosite:"` 开头,余下部分是一个名称,如 `geosite:google` 或者 `geosite:cn`。名称及域名列表参考 [预定义域名列表](../routing/#预定义域名列表)。
|
||||
|
||||
>`servers`: \[string | [ServerObject](#serverobject) \]
|
||||
|
||||
一个 DNS 服务器列表,支持的类型有两种:DNS 地址(字符串形式)和 [ServerObject](#serverobject) 。
|
||||
|
||||
当它的值是一个 DNS IP 地址时,如 `"8.8.8.8"`,Xray 会使用此地址的 53 端口进行 DNS 查询。
|
||||
|
||||
当值为 `"localhost"` 时,表示使用本机预设的 DNS 配置。
|
||||
|
||||
当值是 `"https://host:port/dns-query"` 的形式,如 `"https://dns.google/dns-query"`,Xray 会使用 `DNS over HTTPS` (RFC8484, 简称 DOH) 进行查询。有些服务商拥有 IP 别名的证书,可以直接写 IP 形式,比如 `https://1.1.1.1/dns-query`。也可使用非标准端口和路径,如 `"https://a.b.c.d:8443/my-dns-query"`
|
||||
|
||||
当值是 `"https+local://host:port/dns-query"` 的形式,如 `"https+local://dns.google/dns-query"`,Xray 会使用 `DOH本地模式` 进行查询,即 DOH 请求不会经过 Routing/Outbound 等组件,直接对外请求,以降低耗时。一般适合在服务端使用。也可使用非标端口和路径。
|
||||
|
||||
当值是 `fakedns` 时,将使用 FakeDNS 功能进行查询。
|
||||
|
||||
::: tip TIP 1
|
||||
当使用 `localhost` 时,本机的 DNS 请求不受 Xray 控制,需要额外的配置才可以使 DNS 请求由 Xray 转发。
|
||||
:::
|
||||
|
||||
::: tip TIP 2
|
||||
不同规则初始化得到的 DNS 客户端会在 Xray 启动日志中以 `info` 级别体现,比如 `local DOH`、`remote DOH` 和 `udp` 等模式。
|
||||
:::
|
||||
|
||||
>`clientIp`: string
|
||||
|
||||
用于 DNS 查询时通知服务器以指定IP位置。不能是私有地址。
|
||||
|
||||
>`tag`: string
|
||||
|
||||
由内置 DNS 发出的查询流量,除 `localhost` 和 `DOHL_` 模式外,都可以用此标识在路由使用 `inboundTag` 进行匹配。
|
||||
|
||||
|
||||
### ServerObject
|
||||
```json
|
||||
{
|
||||
"address": "1.2.3.4",
|
||||
"port": 5353,
|
||||
"domains": [
|
||||
"domain:xray.com"
|
||||
],
|
||||
"expectIPs": [
|
||||
"geoip:cn"
|
||||
]
|
||||
}
|
||||
```
|
||||
>`address`: address
|
||||
|
||||
一个 DNS 服务器列表,支持的类型有两种:DNS 地址(字符串形式)和 ServerObject 。
|
||||
|
||||
当它的值是一个 DNS IP 地址时,如 "8.8.8.8",Xray 会使用此地址的 53 端口进行 DNS 查询。
|
||||
|
||||
当值为 "localhost" 时,表示使用本机预设的 DNS 配置。
|
||||
|
||||
当值是 "https://host:port/dns-query" 的形式,如 "https://dns.google/dns-query",Xray 会使用 DNS over HTTPS (RFC8484, 简称 DOH) 进行查询。有些服务商拥有 IP 别名的证书,可以直接写 IP 形式,比如 https://1.1.1.1/dns-query。也可使用非标准端口和路径,如 "https://a.b.c.d:8443/my-dns-query"
|
||||
|
||||
当值是 "https+local://host:port/dns-query" 的形式,如 "https+local://dns.google/dns-query",Xray 会使用 DOH本地模式 进行查询,即 DOH 请求不会经过 Routing/Outbound 等组件,直接对外请求,以降低耗时。一般适合在服务端使用。也可使用非标端口和路径。
|
||||
|
||||
当值是 `fakedns` 时,将使用 FakeDNS 功能进行查询。
|
||||
|
||||
>`port`: number
|
||||
|
||||
DNS 服务器端口,如 `53`。此项缺省时默认为 `53`。当使用 DOH 模式该项无效,非标端口应在 URL 中指定。
|
||||
|
||||
>`domains`: \[string\]
|
||||
|
||||
一个域名列表,此列表包含的域名,将优先使用此服务器进行查询。域名格式和 [路由配置](../routing#ruleobject) 中相同。
|
||||
|
||||
>`expectIPs`:\[string\]
|
||||
|
||||
一个 IP 范围列表,格式和 [路由配置](../routing#ruleobject) 中相同。
|
||||
|
||||
当配置此项时,Xray DNS 会对返回的 IP 的进行校验,只返回包含 expectIPs 列表中的地址。
|
||||
|
||||
如果未配置此项,会原样返回 IP 地址。
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 659 KiB |
@@ -0,0 +1,133 @@
|
||||
# 入站代理
|
||||
|
||||
入站连接用于接收发来的数据,可用的协议请见[inbound 可用协议列表](../../inbound-protocols)。
|
||||
|
||||
## InboundObject
|
||||
|
||||
`InboundObject` 对应配置文件中 `inbounds` 项的一个子元素。
|
||||
|
||||
```json
|
||||
{
|
||||
"inbounds": [
|
||||
{
|
||||
"listen": "127.0.0.1",
|
||||
"port": 1080,
|
||||
"protocol": "协议名称",
|
||||
"settings": {},
|
||||
"streamSettings": {},
|
||||
"tag": "标识",
|
||||
"sniffing": {
|
||||
"enabled": true,
|
||||
"destOverride": ["http", "tls"]
|
||||
},
|
||||
"allocate": {
|
||||
"strategy": "always",
|
||||
"refresh": 5,
|
||||
"concurrency": 3
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
>`listen`: address
|
||||
|
||||
监听地址,IP 地址或 Unix domain socket,默认值为 `"0.0.0.0"`,表示接收所有网卡上的连接.
|
||||
|
||||
可以指定一个系统可用的 IP 地址。
|
||||
|
||||
支持填写 Unix domain socket,格式为绝对路径,形如 `"/dev/shm/domain.socket"`,可在开头加 `"@"` 代表 [abstract](https://www.man7.org/linux/man-pages/man7/unix.7.html),`"@@"` 则代表带 padding 的 abstract。
|
||||
|
||||
填写 Unix domain socket 时,`port` 和 `allocate` 将被忽略,协议目前可选 VLESS、VMess、Trojan,传输方式可选 TCP、WebSocket、HTTP/2。
|
||||
|
||||
>`port`: number | "env:variable" | string
|
||||
|
||||
端口。接受的格式如下:
|
||||
|
||||
- 整型数值:实际的端口号。
|
||||
- 环境变量:以 `"env:"` 开头,后面是一个环境变量的名称,如 `"env:PORT"`。Xray 会以字符串形式解析这个环境变量。
|
||||
- 字符串:可以是一个数值类型的字符串,如 `"1234"`;或者一个数值范围,如 `"5-10"` 表示端口 5 到端口 10,这 6 个端口。
|
||||
|
||||
当只有一个端口时,Xray 会在此端口监听入站连接。当指定了一个端口范围时,取决于 `allocate` 设置。
|
||||
|
||||
>`protocol`: string
|
||||
|
||||
连接协议名称,可选的协议类型见[inbound 可用协议列表](../../inbound-protocols)。
|
||||
|
||||
>`settings`: InboundConfigurationObject
|
||||
|
||||
具体的配置内容,视协议不同而不同。详见每个协议中的 `InboundConfigurationObject`。
|
||||
|
||||
>`streamSettings`: [StreamSettingsObject](../transport#streamsettingsobject)
|
||||
|
||||
底层传输方式(transport)是当前 Xray 节点和其它节点对接的方式
|
||||
|
||||
>`tag`: string
|
||||
此入站连接的标识,用于在其它的配置中定位此连接。
|
||||
|
||||
::: danger
|
||||
当其不为空时,其值必须在所有 `tag` 中 **唯一**。
|
||||
:::
|
||||
|
||||
>`sniffing`: [SniffingObject](#sniffingobject)
|
||||
|
||||
流量探测主要作用于在透明代理等用途.
|
||||
比如一个典型流程如下:
|
||||
1. 如有一个设备上网,去访问abc.com,首先设备通过DNS查询得到abc.com的IP是1.2.3.4,然后设备会向1.2.3.4去发起连接.
|
||||
2. 如果不设置嗅探,Xray收到的连接请求是1.2.3.4,并不能用于域名规则的路由分流.
|
||||
3. 当设置了sniffing中的enable为true,Xray处理此连接的流量时,会从流量的数据中,嗅探出域名,即abc.com
|
||||
4. Xray会把1.2.3.4重置为abc.com.路由就可以根据域名去进行路由的域名规则的分流
|
||||
|
||||
因为变成了一个向abc.com请求的连接, 就可以做更多的事情, 除了路由域名规则分流, 还能重新做DNS解析等其他工作.
|
||||
|
||||
当设置了sniffing中的enable为true, 还能嗅探出bittorrent类型的流量, 然后可以在路由中配置"protocol"项来设置规则处理BT流量, 比如服务端用来拦截BT流量, 或客户端固定转发BT流量到某个VPS去等.
|
||||
|
||||
>`allocate`: [AllocateObject](#allocateobject)
|
||||
|
||||
当设置了多个port时, 端口分配的具体设置
|
||||
|
||||
### SniffingObject
|
||||
|
||||
```json
|
||||
{
|
||||
"enabled": true,
|
||||
"destOverride": ["http", "tls", "fakedns"],
|
||||
"metadataOnly": false
|
||||
}
|
||||
```
|
||||
|
||||
>`enabled`: true | false
|
||||
|
||||
是否开启流量探测。
|
||||
|
||||
>`destOverride`: \["http" | "tls" | "fakedns" \]
|
||||
|
||||
当流量为指定类型时,按其中包括的目标地址重置当前连接的目标。
|
||||
|
||||
>`metadataOnly`: true | false
|
||||
|
||||
当启用时,将仅使用连接的元数据嗅探目标地址。此时,`http` 与 `tls` 将不能使用。
|
||||
|
||||
### AllocateObject
|
||||
|
||||
```json
|
||||
{
|
||||
"strategy": "always",
|
||||
"refresh": 5,
|
||||
"concurrency": 3
|
||||
}
|
||||
```
|
||||
|
||||
>`strategy`: "always" | "random"
|
||||
|
||||
端口分配策略。
|
||||
- `"always"` 表示总是分配所有已指定的端口,`port` 中指定了多少个端口,Xray 就会监听这些端口。
|
||||
- `"random"` 表示随机开放端口,每隔 `refresh` 分钟在 `port` 范围中随机选取 `concurrency` 个端口来监听。
|
||||
|
||||
>`refresh`: number
|
||||
|
||||
随机端口刷新间隔,单位为分钟。最小值为 `2`,建议值为 `5`。这个属性仅当 `strategy` 设置为 `"random"` 时有效。
|
||||
|
||||
>`concurrency`: number
|
||||
|
||||
随机端口数量。最小值为 `1`,最大值为 `port` 范围的三分之一。建议值为 `3`。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 日志配置
|
||||
|
||||
日志配置,控制 Xray输出日志的方式.
|
||||
|
||||
Xray 有两种日志, 访问日志和错误日志, 你可以分别配置两种日志的输出方式.
|
||||
|
||||
## LogObject
|
||||
|
||||
LogObject 对应配置文件的 `log` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"log": {
|
||||
"access": "文件地址",
|
||||
"error": "文件地址",
|
||||
"loglevel": "warning",
|
||||
"dnsLog": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `access`: string
|
||||
|
||||
访问日志的文件地址,其值是一个合法的文件地址,如`"/var/log/Xray/access.log"`(Linux)或者`"C:\\Temp\\Xray\\_access.log"`(Windows)。当此项不指定或为空值时,表示将日志输出至 stdout。
|
||||
|
||||
- 特殊值`none`,即关闭 access log。
|
||||
|
||||
> `error`: string
|
||||
|
||||
错误日志的文件地址,其值是一个合法的文件地址,如`"/var/log/Xray/error.log"`(Linux)或者`"C:\\Temp\\Xray\\_error.log"`(Windows)。当此项不指定或为空值时,表示将日志输出至 stdout。
|
||||
|
||||
- 特殊值`none`,即关闭 error log。
|
||||
|
||||
> `loglevel`: "debug" | "info" | "warning" | "error" | "none"
|
||||
|
||||
error 日志的级别, 指示 error 日志需要记录的信息.
|
||||
默认值为 `"warning"`。
|
||||
|
||||
- `"debug"`:调试程序时用到的输出信息。同时包含所有 `"info"` 内容。
|
||||
- `"info"`:运行时的状态信息等,不影响正常使用。同时包含所有 `"warning"` 内容。
|
||||
- `"warning"`:发生了一些并不影响正常运行的问题时输出的信息,但有可能影响用户的体验。同时包含所有 `"error"` 内容。
|
||||
- `"error"`:Xray 遇到了无法正常运行的问题,需要立即解决。
|
||||
- `"none"`:不记录任何内容。
|
||||
|
||||
> `dnsLog`: bool
|
||||
|
||||
是否启用 DNS 查询日志,例如:
|
||||
`DOH//doh.server got answer: domain.com -> [ip1, ip2] 2.333ms`
|
||||
@@ -0,0 +1,108 @@
|
||||
# 出站代理
|
||||
|
||||
出站连接用于发送数据,可用的协议请见[outbound 可用协议列表](../../outbound-protocols)。
|
||||
|
||||
## OutboundObject
|
||||
|
||||
`OutboundObject` 对应配置文件中 `outbounds` 项的一个子元素。
|
||||
|
||||
::: tip
|
||||
列表中的第一个元素作为主outbound。当路由匹配不存在或没有匹配成功时,流量由主outbound发出。
|
||||
:::
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"outbounds": [
|
||||
{
|
||||
"sendThrough": "0.0.0.0",
|
||||
"protocol": "协议名称",
|
||||
"settings": {},
|
||||
"tag": "标识",
|
||||
"streamSettings": {},
|
||||
"proxySettings": {
|
||||
"tag": "another-outbound-tag"
|
||||
},
|
||||
"mux": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
>`sendThrough`: address
|
||||
|
||||
用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 `"0.0.0.0"`。
|
||||
>`protocol`: string
|
||||
|
||||
连接协议名称,可选的协议类型见[outbound 可用协议列表](../../outbound-protocols)。
|
||||
>`settings`: OutboundConfigurationObject
|
||||
|
||||
具体的配置内容,视协议不同而不同。详见每个协议中的 `OutboundConfigurationObject`。
|
||||
>`tag`: string
|
||||
|
||||
此出站连接的标识,用于在其它的配置中定位此连接。
|
||||
|
||||
::: danger
|
||||
当其不为空时,其值必须在所有 `tag` 中 **唯一**。
|
||||
:::
|
||||
|
||||
>`streamSettings`: [StreamSettingsObject](../../base/transport#streamsettingsobject)
|
||||
|
||||
底层传输方式(transport)是当前 Xray 节点和其它节点对接的方式
|
||||
|
||||
>`proxySettings`: [ProxySettingsObject](#proxysettingsobject)
|
||||
|
||||
出站代理配置。当出站代理生效时,此outbound的 `streamSettings` 将不起作用。
|
||||
|
||||
>`mux`: [MuxObject](#muxobject)
|
||||
|
||||
Mux 相关的具体配置。
|
||||
|
||||
|
||||
### ProxySettingsObject
|
||||
```json
|
||||
{
|
||||
"tag": "another-outbound-tag"
|
||||
}
|
||||
```
|
||||
|
||||
>`tag`: string
|
||||
|
||||
当指定另一个outbound的标识时,此outbound发出的数据,将被转发至所指定的outbound发出。
|
||||
|
||||
::: danger
|
||||
这种转发方式**不经过**底层传输方式。如果需要使用支持底层传输方式的转发,请使用 [SockOpt.dialerProxy](../transport/#sockoptobject)。
|
||||
:::
|
||||
|
||||
::: danger
|
||||
此选项与 SockOpt.dialerProxy 不兼容
|
||||
:::
|
||||
|
||||
::: tip
|
||||
兼容 v2fly/v2ray-core 的配置 [transportLayer](https://www.v2fly.org/config/outbounds.html#proxysettingsobject)
|
||||
:::
|
||||
|
||||
### MuxObject
|
||||
Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../../../develop/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
|
||||
|
||||
`MuxObject` 对应 `OutboundObject` 中的 `mux` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"enabled": false,
|
||||
"concurrency": 8
|
||||
}
|
||||
```
|
||||
|
||||
>`enabled`: true | false
|
||||
|
||||
是否启用 Mux 转发请求,默认值 `false`。
|
||||
>`concurrency`: number
|
||||
|
||||
最大并发连接数。最小值 `1`,最大值 `1024`,默认值 `8`。
|
||||
|
||||
这个数值表示了一个 TCP 连接上最多承载的 Mux 连接数量。比如设置 `concurrency=8` 时,当客户端发出了 8 个 TCP 请求,Xray 只会发出一条实际的 TCP 连接,客户端的 8 个请求全部由这个 TCP 连接传输。
|
||||
|
||||
::: tip
|
||||
填负数时,如 `-1`,不加载 mux 模块。
|
||||
:::
|
||||
@@ -0,0 +1,125 @@
|
||||
# 本地策略
|
||||
|
||||
本地策略,可以设置不同的用户等级和对应的策略设置,比如连接超时设置。Xray 处理的每一个连接都对应一个用户,按照用户的等级(level)应用不同的策略。
|
||||
|
||||
## PolicyObject
|
||||
|
||||
`PolicyObject` 对应配置文件的 `policy` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"policy": {
|
||||
"levels": {
|
||||
"0": {
|
||||
"handshake": 4,
|
||||
"connIdle": 300,
|
||||
"uplinkOnly": 2,
|
||||
"downlinkOnly": 5,
|
||||
"statsUserUplink": false,
|
||||
"statsUserDownlink": false,
|
||||
"bufferSize": 4
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"statsInboundUplink": false,
|
||||
"statsInboundDownlink": false,
|
||||
"statsOutboundUplink": false,
|
||||
"statsOutboundDownlink": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
>`level`: map{string: [LevelPolicyObject](#levelpolicyobject)}
|
||||
|
||||
一组键值对,每个键是一个字符串形式的数字(JSON 的要求),比如 `"0"`、`"1"` 等,双引号不能省略,此数字对应用户等级。每一个值是一个 [LevelPolicyObject](#levelpolicyobject).
|
||||
|
||||
::: tip
|
||||
每个入站出站代理现在都可以设置用户等级,Xray 会根据实际的用户等级应用不同的本地策略。
|
||||
:::
|
||||
|
||||
>`system`: [SystemPolicyObject](#systempolicyobject)
|
||||
|
||||
Xray系统级别的策略
|
||||
|
||||
|
||||
### LevelPolicyObject
|
||||
|
||||
```json
|
||||
{
|
||||
"handshake": 4,
|
||||
"connIdle": 300,
|
||||
"uplinkOnly": 2,
|
||||
"downlinkOnly": 5,
|
||||
"statsUserUplink": false,
|
||||
"statsUserDownlink": false,
|
||||
"bufferSize": 10240
|
||||
}
|
||||
```
|
||||
>`handshake`: number
|
||||
|
||||
连接建立时的握手时间限制。单位为秒。默认值为 `4`。在入站代理处理一个新连接时,在握手阶段如果使用的时间超过这个时间,则中断该连接。
|
||||
|
||||
>`connIdle`: number
|
||||
|
||||
连接空闲的时间限制。单位为秒。默认值为 `300`。inbound/outbound处理一个连接时,如果在 `connIdle` 时间内,没有任何数据被传输(包括上行和下行数据),则中断该连接。
|
||||
|
||||
>`uplinkOnly`: number
|
||||
|
||||
当连接下行线路关闭后的时间限制。单位为秒。默认值为 `2`。当服务器(如远端网站)关闭下行连接时,出站代理会在等待 `uplinkOnly` 时间后中断连接。
|
||||
|
||||
>`downlinkOnly`: number
|
||||
|
||||
当连接上行线路关闭后的时间限制。单位为秒。默认值为 `5`。当客户端(如浏览器)关闭上行连接时,入站代理会在等待 `downlinkOnly` 时间后中断连接。
|
||||
|
||||
::: tip
|
||||
在 HTTP 浏览的场景中,可以将 `uplinkOnly` 和 `downlinkOnly` 设为 `0`,以提高连接关闭的效率。
|
||||
:::
|
||||
|
||||
>`statsUserUplink`: true | false
|
||||
|
||||
当值为 `true` 时,开启当前等级的所有用户的上行流量统计。
|
||||
|
||||
>`statsUserDownlink`: true | false
|
||||
|
||||
当值为 `true` 时,开启当前等级的所有用户的下行流量统计。
|
||||
|
||||
>`bufferSize`: number
|
||||
|
||||
每个连接的内部缓存大小。单位为 kB。当值为 `0` 时,内部缓存被禁用。
|
||||
|
||||
默认值:
|
||||
* 在 ARM、MIPS、MIPSLE 平台上,默认值为 `0`。
|
||||
* 在 ARM64、MIPS64、MIPS64LE 平台上,默认值为 `4`。
|
||||
* 在其它平台上,默认值为 `512`。
|
||||
|
||||
::: tip
|
||||
`bufferSize` 选项会覆盖 [环境变量](env.md#每个连接的缓存大小)中 `Xray.ray.buffer.size` 的设定。
|
||||
:::
|
||||
|
||||
|
||||
### SystemPolicyObject
|
||||
|
||||
```json
|
||||
{
|
||||
"statsInboundUplink": false,
|
||||
"statsInboundDownlink": false,
|
||||
"statsOutboundUplink": false,
|
||||
"statsOutboundDownlink": false
|
||||
}
|
||||
```
|
||||
|
||||
>`statsInboundUplink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有入站代理的上行流量统计。
|
||||
|
||||
>`statsInboundDownlink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有入站代理的下行流量统计。
|
||||
|
||||
>`statsOutboundUplink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有出站代理的上行流量统计。
|
||||
|
||||
>`statsOutboundDownlink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有出站代理的下行流量统计。
|
||||
@@ -0,0 +1,246 @@
|
||||
# 反向代理
|
||||
|
||||
反向代理可以把服务器端的流量向客户端转发,即逆向流量转发。
|
||||
|
||||
反向代理的大致工作原理如下:
|
||||
|
||||
* 假设在主机 A 中有一个网页服务器,这台主机没有公网 IP,无法在公网上直接访问。另有一台主机 B,它可以由公网访问。现在我们需要把 B 作为入口,把流量从 B 转发到 A。
|
||||
* 在主机 A 中配置 Xray,称为`bridge`,在 B 中也配置 Xray,称为 `portal`。
|
||||
* `bridge` 会向 `portal` 主动建立连接,此连接的目标地址可以自行设定。`portal` 会收到两种连接,一是由 `bridge` 发来的连接,二是公网用户发来的连接。`portal` 会自动将两类连接合并。于是 `bridge` 就可以收到公网流量了。
|
||||
* `bridge` 在收到公网流量之后,会将其原封不动地发给主机 A 中的网页服务器。当然,这一步需要路由的协作。
|
||||
* `bridge` 会根据流量的大小进行动态的负载均衡。
|
||||
|
||||
::: tip
|
||||
反向代理默认已开启 [Mux](/develop/protocols/muxcool/),请不要在其用到的outbound上再次开启 Mux。
|
||||
:::
|
||||
|
||||
::: warning
|
||||
反向代理功能尚处于测试阶段,可能会有一些问题。
|
||||
:::
|
||||
|
||||
|
||||
## ReverseObject
|
||||
|
||||
`ReverseObject` 对应配置文件的 `reverse` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"reverse": {
|
||||
"bridges": [
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
],
|
||||
"portals": [
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `bridges`: \[[BridgeObject](#bridgeobject)\]
|
||||
|
||||
|
||||
数组,每一项表示一个 `bridge`。每个 `bridge` 的配置是一个 [BridgeObject](#bridgeobject)。
|
||||
|
||||
> `portals`: \[[PortalObject](#portalobject)\]
|
||||
|
||||
|
||||
数组,每一项表示一个 `portal`。每个 `portal` 的配置是一个 [PortalObject](#bridgeobject)。
|
||||
|
||||
|
||||
### BridgeObject
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
```
|
||||
|
||||
> `tag`: string
|
||||
|
||||
|
||||
所有由 `bridge` 发出的连接,都会带有这个标识。可以在 [路由配置](../routing) 中使用 `inboundTag` 进行识别。
|
||||
|
||||
> `domain`: string
|
||||
|
||||
|
||||
指定一个域名,`bridge` 向 `portal` 建立的连接,都会使用这个域名进行发送。
|
||||
这个域名只作为 `bridge` 和 `portal` 的通信用途,不必真实存在。
|
||||
|
||||
|
||||
### PortalObject
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
```
|
||||
|
||||
> `tag`: string
|
||||
|
||||
|
||||
`portal` 的标识。在 [路由配置](../routing) 中使用 `outboundTag` 将流量转发到这个 `portal`。
|
||||
|
||||
> `domain`: string
|
||||
|
||||
|
||||
一个域名。当 `portal` 接收到流量时,如果流量的目标域名是此域名,则 `portal` 认为当前连接上 `bridge` 发来的通信连接。而其它流量则会被当成需要转发的流量。`portal` 所做的工作就是把这两类连接进行识别并拼接。
|
||||
|
||||
::: tip
|
||||
一个 Xray 既可以作为 `bridge`,也可以作为 `portal`,也可以同时两者,以适用于不同的场景需要。
|
||||
:::
|
||||
|
||||
## 完整配置样例
|
||||
|
||||
|
||||
::: tip
|
||||
在运行过程中,建议先启用 `bridge`,再启用 `portal`。
|
||||
:::
|
||||
|
||||
### bridge配置
|
||||
|
||||
`bridge` 通常需要两个outbound,一个用于连接 `portal`,另一个用于发送实际的流量。也就是说,你需要用路由区分两种流量。
|
||||
|
||||
反向代理配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"bridges": [
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
outbound:
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "out",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"redirect": "127.0.0.1:80" // 将所有流量转发到网页服务器
|
||||
}
|
||||
},
|
||||
{
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "portal 的 IP 地址",
|
||||
"port": 1024,
|
||||
"users": [
|
||||
{
|
||||
"id": "5783a3e7-e373-51cd-8642-c83782b807c5"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"tag": "interconn"
|
||||
}
|
||||
```
|
||||
|
||||
路由配置:
|
||||
|
||||
```json
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"bridge"
|
||||
],
|
||||
"domain": [
|
||||
"full:test.xray.com"
|
||||
],
|
||||
"outboundTag": "interconn"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"bridge"
|
||||
],
|
||||
"outboundTag": "out"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### portal配置
|
||||
|
||||
`portal` 通常需要两个inbound,一个用于接收 `bridge` 的连接,另一个用于接收实际的流量。同时你也需要用路由区分两种流量。
|
||||
|
||||
反向代理配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"portals": [
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "test.xray.com" // 必须和 bridge 的配置一样
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
inbound:
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "external",
|
||||
"port": 80, // 开放 80 端口,用于接收外部的 HTTP 访问
|
||||
"protocol": "dokodemo-door",
|
||||
"settings": {
|
||||
"address": "127.0.0.1",
|
||||
"port": 80,
|
||||
"network": "tcp"
|
||||
}
|
||||
},
|
||||
{
|
||||
"port": 1024, // 用于接收 bridge 的连接
|
||||
"tag": "interconn",
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "5783a3e7-e373-51cd-8642-c83782b807c5"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
路由配置:
|
||||
|
||||
```json
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"external"
|
||||
],
|
||||
"outboundTag": "portal"
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"inboundTag": [
|
||||
"interconn"
|
||||
],
|
||||
"outboundTag": "portal"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
# 路由
|
||||
|
||||
路由功能模块可以将入站数据按不同规则由不同的出站连接发出,以达到按需代理的目的。
|
||||
|
||||
如常见用法是分流国内外流量,Xray 可以通过内部机制判断不同地区的流量,然后将它们发送到不同的出站代理。
|
||||
|
||||
## RoutingObject
|
||||
|
||||
`RoutingObject` 对应配置文件的 `routing` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"routing": {
|
||||
"domainStrategy": "AsIs",
|
||||
"rules": [],
|
||||
"balancers": []
|
||||
}
|
||||
}
|
||||
```
|
||||
>`domainStrategy`: "AsIs" | "IPIfNonMatch" | "IPOnDemand"
|
||||
|
||||
域名解析策略,根据不同的设置使用不同的策略。
|
||||
|
||||
* `"AsIs"`:只使用域名进行路由选择。默认值。
|
||||
* `"IPIfNonMatch"`:当域名没有匹配任何规则时,将域名解析成 IP(A 记录或 AAAA 记录)再次进行匹配;
|
||||
* 当一个域名有多个 A 记录时,会尝试匹配所有的 A 记录,直到其中一个与某个规则匹配为止;
|
||||
* 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名;
|
||||
* `"IPOnDemand"`:当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
|
||||
|
||||
>`rules`: \[[RuleObject](#ruleobject)\]
|
||||
|
||||
对应一个数组,数组中每一项是一个规则。
|
||||
|
||||
对于每一个连接,路由将根据这些规则依次进行判断,当一个规则生效时,即将这个连接转发至它所指定的 `outboundTag`或 `balancerTag`。
|
||||
|
||||
::: tip
|
||||
当没有匹配到任何规则时,流量默认由第一个outbound发出。
|
||||
:::
|
||||
|
||||
>`balancers`: \[ [BalancerObject](#balancerobject) \]
|
||||
|
||||
一个数组,数组中每一项是一个负载均衡器的配置。
|
||||
|
||||
当一个规则指向一个负载均衡器时,Xray 会通过此负载均衡器选出一个outbound, 然后由它转发流量。
|
||||
|
||||
|
||||
### RuleObject
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "field",
|
||||
"domain": [
|
||||
"baidu.com",
|
||||
"qq.com",
|
||||
"geosite:cn"
|
||||
],
|
||||
"ip": [
|
||||
"0.0.0.0/8",
|
||||
"10.0.0.0/8",
|
||||
"fc00::/7",
|
||||
"fe80::/10",
|
||||
"geoip:cn"
|
||||
],
|
||||
"port": "53,443,1000-2000",
|
||||
"sourcePort": "53,443,1000-2000",
|
||||
"network": "tcp",
|
||||
"source": [
|
||||
"10.0.0.1"
|
||||
],
|
||||
"user": [
|
||||
"love@xray.com"
|
||||
],
|
||||
"inboundTag": [
|
||||
"tag-vmess"
|
||||
],
|
||||
"protocol": [
|
||||
"http",
|
||||
"tls",
|
||||
"bittorrent"
|
||||
],
|
||||
"attrs": "attrs[':method'] == 'GET'",
|
||||
"outboundTag": "direct",
|
||||
"balancerTag": "balancer"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
::: danger
|
||||
当多个属性同时指定时,这些属性需要 **同时** 满足,才可以使当前规则生效。
|
||||
:::
|
||||
|
||||
|
||||
>`type`: "field"
|
||||
|
||||
目前只支持`"field"`这一个选项。
|
||||
|
||||
>`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:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](../../env#资源文件路径) 中,文件格式与 `geosite.dat` 相同,标签必须在文件中存在。
|
||||
|
||||
::: tip
|
||||
`"ext:geoip.dat:cn"` 等价于 `"geoip:cn"`
|
||||
:::
|
||||
|
||||
>`ip`: \[string\]
|
||||
|
||||
一个数组,数组内每一项代表一个 IP 范围。当某一项匹配目标 IP 时,此规则生效。有以下几种形式:
|
||||
|
||||
* IP:形如 `"127.0.0.1"`。
|
||||
* [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`。
|
||||
* 从文件中加载 IP:形如 `"ext:file:tag"`,必须以 `ext:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](../../env#资源文件路径) 中,文件格式与 `geoip.dat` 相同标签必须在文件中存在。
|
||||
|
||||
>`port`:number | string
|
||||
|
||||
目标端口范围,有三种形式:
|
||||
|
||||
* `"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"`。
|
||||
|
||||
>`network`: "tcp" | "udp" | "tcp,udp"
|
||||
|
||||
可选的值有 "tcp"、"udp" 或 "tcp,udp",当连接方式是指定的方式时,此规则生效。
|
||||
|
||||
>`source`: \[string\]
|
||||
|
||||
一个数组,数组内每一项代表一个 IP 范围,形式有 IP、CIDR、GeoIP 和从文件中加载 IP。当某一项匹配来源 IP 时,此规则生效。
|
||||
|
||||
>`user`: \[string\]
|
||||
|
||||
一个数组,数组内每一项是一个邮箱地址。当某一项匹配来源用户时,此规则生效。
|
||||
|
||||
>`inboundTag`: \[string\]
|
||||
|
||||
一个数组,数组内每一项是一个标识。当某一项匹配入站协议的标识时,此规则生效。
|
||||
|
||||
>`protocol`: \[ "http" | "tls" | "bittorrent" \]
|
||||
|
||||
一个数组,数组内每一项表示一种协议。当某一个协议匹配当前连接的协议类型时,此规则生效。
|
||||
|
||||
::: tip
|
||||
必须开启入站代理中的 `sniffing` 选项, 才能嗅探出连接所使用的协议类型.
|
||||
:::
|
||||
|
||||
>`attrs`: string
|
||||
|
||||
一段脚本,用于检测流量的属性值。当此脚本返回真值时,此规则生效。
|
||||
|
||||
脚本语言为 [Starlark](https://github.com/bazelbuild/starlark),它的语法是 Python 的子集。脚本接受一个全局变量 `attrs`,其中包含了流量相关的属性。
|
||||
|
||||
目前只有 http 入站代理会设置这一属性。
|
||||
|
||||
示例:
|
||||
|
||||
* 检测 HTTP GET:`"attrs[':method'] == 'GET'"`
|
||||
* 检测 HTTP Path:`"attrs[':path'].startswith('/test')"`
|
||||
* 检测 Content Type:`"attrs['accept'].index('text/html') >= 0"`
|
||||
|
||||
>`outboundTag`: string
|
||||
|
||||
对应一个outbound的标识。
|
||||
|
||||
>`balancerTag`: string
|
||||
|
||||
对应一个Balancer的标识。
|
||||
|
||||
::: tip
|
||||
`balancerTag` 和 `outboundTag` 须二选一。当同时指定时,`outboundTag` 生效。
|
||||
:::
|
||||
|
||||
### BalancerObject
|
||||
|
||||
负载均衡器配置。当一个负载均衡器生效时,它会从指定的outbound中,按配置选出一个最合适的outbound,进行流量转发。
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "balancer",
|
||||
"selector": []
|
||||
}
|
||||
```
|
||||
|
||||
>`tag`: string
|
||||
|
||||
此负载均衡器的标识,用于匹配 `RuleObject` 中的 `balancerTag`。
|
||||
|
||||
>`selector`: \[ string \]
|
||||
|
||||
|
||||
一个字符串数组,其中每一个字符串将用于和outbound标识的前缀匹配。在以下几个outbound标识中:`[ "a", "ab", "c", "ba" ]`,`"selector": ["a"]` 将匹配到 `[ "a", "ab" ]`。
|
||||
|
||||
如果匹配到多个outbound,负载均衡器目前会从中随机选出一个作为最终的outbound。
|
||||
|
||||
|
||||
### 预定义域名列表
|
||||
|
||||
此列表预置于每一个 Xray 的安装包中,文件名为 `geosite.dat`。这个文件包含了一些常见的域名,使用方式:`geosite:filename`,如 `geosite:google` 表示对文件内符合 `google` 内包含的域名,进行路由筛选或 DNS 筛选。
|
||||
|
||||
常见的域名有:
|
||||
|
||||
* `category-ads`:包含了常见的广告域名。
|
||||
* `category-ads-all`:包含了常见的广告域名,以及广告提供商的域名。
|
||||
* `cn`:相当于 `geolocation-cn` 和 `tld-cn` 的合集。
|
||||
* `apple`:包含了 Apple 旗下绝大部分域名。
|
||||
* `google`:包含了 Google 旗下绝大部分域名。
|
||||
* `microsoft`:包含了 Microsoft 旗下绝大部分域名。
|
||||
* `facebook`:包含了 Facebook 旗下绝大部分域名。
|
||||
* `twitter`:包含了 Twitter 旗下绝大部分域名。
|
||||
* `telegram`:包含了 Telegram 旗下绝大部分域名。
|
||||
* `geolocation-cn`:包含了常见的大陆站点域名。
|
||||
* `geolocation-!cn`:包含了常见的非大陆站点域名,同时包含了 `tld-!cn`。
|
||||
* `tld-cn`:包含了 CNNIC 管理的用于中国大陆的顶级域名,如以 `.cn`、`.中国` 结尾的域名。
|
||||
* `tld-!cn`:包含了非中国大陆使用的顶级域名,如以 `.hk`(香港)、`.tw`(台湾)、`.jp`(日本)、`.sg`(新加坡)、`.us`(美国)`.ca`(加拿大)等结尾的域名。
|
||||
@@ -0,0 +1,57 @@
|
||||
# 统计信息
|
||||
|
||||
用于配置 Xray 流量数据的统计。
|
||||
|
||||
## StatsObject
|
||||
|
||||
`StatsObject` 对应配置文件的 `stats` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"stats": {}
|
||||
}
|
||||
```
|
||||
|
||||
目前统计信息不需要任何参数,只要 `StatsObject` 项存在,内部的统计即会开启。
|
||||
|
||||
开启了统计以后, 只需在 [Policy](../../base/policy) 中开启对应的项,就可以统计对应的数据。
|
||||
|
||||
|
||||
## 获取统计信息
|
||||
|
||||
可以用 `xray api` 的相关命令获取统计信息.
|
||||
|
||||
目前已有的统计信息如下:
|
||||
|
||||
- 用户数据
|
||||
|
||||
- `user>>>[email]>>>traffic>>>uplink`
|
||||
|
||||
特定用户的上行流量,单位字节。
|
||||
|
||||
- `user>>>[email]>>>traffic>>>downlink`
|
||||
|
||||
特定用户的下行流量,单位字节。
|
||||
|
||||
::: tip
|
||||
如果对应用户没有指定 Email,则不会开启统计。
|
||||
:::
|
||||
|
||||
|
||||
- 全局数据
|
||||
|
||||
- `inbound>>>[tag]>>>traffic>>>uplink`
|
||||
|
||||
特定inbound的上行流量,单位字节。
|
||||
|
||||
- `inbound>>>[tag]>>>traffic>>>downlink`
|
||||
|
||||
特定inbound的下行流量,单位字节。
|
||||
|
||||
- `outbound>>>[tag]>>>traffic>>>uplink`
|
||||
|
||||
特定outbound的上行流量,单位字节。
|
||||
|
||||
- `outbound>>>[tag]>>>traffic>>>downlink`
|
||||
|
||||
特定outbound的下行流量,单位字节。
|
||||
@@ -0,0 +1,414 @@
|
||||
# 传输方式
|
||||
|
||||
传输方式(transport)是当前 Xray 节点和其它节点对接的方式。
|
||||
|
||||
传输方式指定了稳定的数据传输的方式。通常来说,一个网络连接的两端需要有对称的传输方式。比如一端用了 WebSocket,那么另一个端也必须使用 WebSocket,否则无法建立连接。
|
||||
|
||||
传输方式(transport)配置有两部分:
|
||||
1. 全局设置([TransportObject](#transportobject))
|
||||
2. 指定inbound/outbound配置([StreamSettingsObject](#streamsettingsobject))。
|
||||
|
||||
指定inbound/outbound配置时,可以指定每个单独的inbound/outbound用怎样的方式传输。
|
||||
|
||||
通常来说客户端和服务器对应的inbound和outbound需要使用同样的传输方式。当inbound/outbound配置指定了一种传输方式,但没有填写其具体设置时,此传输方式会使用全局配置中的设置。
|
||||
|
||||
|
||||
## TransportObject
|
||||
|
||||
`TransportObject` 对应配置文件的 `transport` 项。
|
||||
|
||||
```json
|
||||
{
|
||||
"transport": {
|
||||
"tcpSettings": {},
|
||||
"kcpSettings": {},
|
||||
"wsSettings": {},
|
||||
"httpSettings": {},
|
||||
"quicSettings": {},
|
||||
"dsSettings": {},
|
||||
"grpcSettings": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `tcpSettings`: [TcpObject](../../transports/tcp)
|
||||
|
||||
针对 TCP 连接的配置。
|
||||
|
||||
> `kcpSettings`: [KcpObject](../../transports/mkcp)
|
||||
|
||||
针对 mKCP 连接的配置。
|
||||
|
||||
> `wsSettings`: [WebSocketObject](../../transports/websocket)
|
||||
|
||||
针对 WebSocket 连接的配置。
|
||||
|
||||
> `httpSettings`: [HttpObject](../../transports/h2)
|
||||
|
||||
针对 HTTP/2 连接的配置。
|
||||
|
||||
> `quicSettings`: [QuicObject](../../transports/quic)
|
||||
|
||||
针对 QUIC 连接的配置。
|
||||
|
||||
> `grpcSettings`: [GRPCObject](../../transports/grpc)
|
||||
|
||||
针对 gRPC 连接的配置。
|
||||
|
||||
> `dsSettings`: [DomainSocketObject](../../transports/domainsocket)
|
||||
|
||||
针对 Domain Socket 连接的配置。
|
||||
|
||||
|
||||
## StreamSettingsObject
|
||||
|
||||
`StreamSettingsObject` 对应inbound/outbound中的 `streamSettings` 项。每一个 inbound/outbound 都可以分别配置不同的传输配置,都可以设置 `streamSettings` 来进行一些传输的配置。
|
||||
|
||||
```json
|
||||
{
|
||||
"network": "tcp",
|
||||
"security": "none",
|
||||
"tlsSettings": {},
|
||||
"xtlsSettings": {},
|
||||
"tcpSettings": {},
|
||||
"kcpSettings": {},
|
||||
"wsSettings": {},
|
||||
"httpSettings": {},
|
||||
"quicSettings": {},
|
||||
"dsSettings": {},
|
||||
"grpcSettings": {},
|
||||
"sockopt": {
|
||||
"mark": 0,
|
||||
"tcpFastOpen": false,
|
||||
"tproxy": "off",
|
||||
"domainStrategy": "AsIs",
|
||||
"dialerProxy": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `network`: "tcp" | "kcp" | "ws" | "http" | "domainsocket" | "quic"
|
||||
|
||||
连接的数据流所使用的传输方式类型,默认值为 `"tcp"`
|
||||
|
||||
> `security`: "none" | "tls" | "xtls"
|
||||
|
||||
是否启用传输层加密,支持的选项有
|
||||
- `"none"` 表示不加密(默认值)
|
||||
- `"tls"` 表示使用 [TLS](https://en.wikipedia.org/wiki/base/transport_Layer_Security)。
|
||||
- `"xtls"` 表示使用 [XTLS](../../xtls)。
|
||||
|
||||
> `tlsSettings`: [TLSObject](#tlsobject)
|
||||
|
||||
TLS 配置。TLS 由 Golang 提供,通常情况下TLS协商的结果为使用 TLS 1.3,不支持 DTLS。
|
||||
|
||||
> `xtlsSettings`: [XTLSObject](#tlsobject)
|
||||
|
||||
XTLS 配置。XTLS 是 Xray 的原创黑科技, 也是使 Xray 性能一骑绝尘的核心动力.<br>
|
||||
XTLS 与 TLS 有相同的安全性, 配置方式也和TLS一致. 点击此处查看[XTLS的技术细节剖析](../../xtls)
|
||||
|
||||
::: danger
|
||||
TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型和正常上网具有一致性.<br>
|
||||
启用 XTLS 并且配置合适的XTLS流控模式, 可以在保持和 TLS 相同的安全性的前提下, 性能达到数倍甚至十几倍的提升.<br>
|
||||
当 `security` 的值从'tls'改为'xtls'时, 只需将`tlsSettings` 修改成为 `xtlsSettings`
|
||||
:::
|
||||
|
||||
> `tcpSettings`: [TcpObject](../../transports/tcp)
|
||||
|
||||
当前连接的 TCP 配置,仅当此连接使用 TCP 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `kcpSettings`: [KcpObject](../../transports/mkcp)
|
||||
|
||||
当前连接的 mKCP 配置,仅当此连接使用 mKCP 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `wsSettings`: [WebSocketObject](../../transports/websocket)
|
||||
|
||||
当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `httpSettings`: [HttpObject](../../transports/h2)
|
||||
|
||||
当前连接的 HTTP/2 配置,仅当此连接使用 HTTP/2 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `quicSettings`: [QUICObject](../../transports/quic)
|
||||
|
||||
当前连接的 QUIC 配置,仅当此连接使用 QUIC 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `grpcSettings`: [GRPCObject](../../transports/grpc)
|
||||
|
||||
当前连接的 gRPC 配置,仅当此连接使用 gRPC 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `dsSettings`: [DomainSocketObject](../../transports/domainsocket)
|
||||
|
||||
当前连接的 Domain socket 配置,仅当此连接使用 Domain socket 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `sockopt`: [SockoptObject](#sockoptobject)
|
||||
|
||||
透明代理相关的具体配置。
|
||||
|
||||
|
||||
### TLSObject
|
||||
|
||||
```json
|
||||
{
|
||||
"serverName": "xray.com",
|
||||
"allowInsecure": false,
|
||||
"alpn": [
|
||||
"h2",
|
||||
"http/1.1"
|
||||
],
|
||||
"minVersion": "1.2",
|
||||
"maxVersion": "1.3",
|
||||
"preferServerCipherSuites": true,
|
||||
"cipherSuites": "此处填写你需要的加密套件名称,每个套件名称之间用:进行分隔",
|
||||
"certificates": [],
|
||||
"disableSystemRoot": false,
|
||||
"enableSessionResumption": false
|
||||
}
|
||||
```
|
||||
|
||||
> `serverName`: string
|
||||
|
||||
指定服务器端证书的域名,在连接由 IP 建立时有用。
|
||||
|
||||
当目标连接由域名指定时,比如在 Socks inbound接收到了域名,或者由 Sniffing 功能探测出了域名,这个域名会自动用于 `serverName`,无须手动配置。
|
||||
|
||||
> `alpn`: \[ string \]
|
||||
|
||||
一个字符串数组,指定了 TLS 握手时指定的 ALPN 数值。默认值为 `["h2", "http/1.1"]`。
|
||||
|
||||
> `minVersion`: \[ string \]
|
||||
|
||||
minVersion为可接受的最小SSL/TLS版本。
|
||||
|
||||
> `maxVersion`: \[ string \]
|
||||
|
||||
maxVersion为可接受的最大SSL/TLS版本。
|
||||
|
||||
> `preferServerCipherSuites`: true | false
|
||||
|
||||
指示服务器选择客户端最喜欢的密码套件 或 服务器最优选的密码套件。
|
||||
|
||||
如果为true则为使用服务器的最优选的密码套件
|
||||
|
||||
> `cipherSuites`: \[ string \]
|
||||
|
||||
CipherSuites用于配置受支持的密码套件列表, 每个套件名称之间用:进行分隔.
|
||||
|
||||
你可以在[这里](https://golang.org/src/crypto/tls/cipher_suites.go#L500)或[这里](https://golang.org/src/crypto/tls/cipher_suites.go#L44)找到golang加密套件的名词和说明
|
||||
|
||||
::: danger
|
||||
以上两项配置为非必要选项,正常情况下不影响安全性
|
||||
在未配置的情况下golang根据设备自动选择.
|
||||
若不熟悉, 请勿配置此选项, 填写不当引起的问题自行负责
|
||||
:::
|
||||
|
||||
> `allowInsecure`: true | false
|
||||
|
||||
是否允许不安全连接(仅用于客户端)。默认值为 `false`。
|
||||
|
||||
当值为 `true` 时,Xray 不会检查远端主机所提供的 TLS 证书的有效性。
|
||||
|
||||
::: danger
|
||||
出于安全性考虑,这个选项不应该在实际场景中选择true,否则可能遭受中间人攻击。
|
||||
:::
|
||||
|
||||
> `disableSystemRoot`: true | false
|
||||
|
||||
是否禁用操作系统自带的 CA 证书。默认值为 `false`。
|
||||
|
||||
当值为 `true` 时,Xray 只会使用 `certificates` 中指定的证书进行 TLS 握手。当值为 `false` 时,Xray 只会使用操作系统自带的 CA 证书进行 TLS 握手。
|
||||
|
||||
> `enableSessionResumption`: true | false
|
||||
|
||||
此参数的设置为false时, ClientHello 里没有 session_ticket 这个扩展。
|
||||
通常来讲 go 语言程序的 ClientHello 里并没有用到这个扩展, 因此建议保持默认值。
|
||||
默认值为 `false`。
|
||||
|
||||
> `certificates`: \[ [CertificateObject](#certificateobject) \]
|
||||
|
||||
证书列表,其中每一项表示一个证书(建议 fullchain)。
|
||||
|
||||
::: tip
|
||||
如果要在 ssllibs 或者 myssl 获得 A/A+ 等级的评价, 请参考[这里](https://github.com/XTLS/Xray-core/discussions/56#discussioncomment-215600).
|
||||
:::
|
||||
|
||||
|
||||
#### CertificateObject
|
||||
|
||||
```json
|
||||
{
|
||||
"ocspStapling": 3600,
|
||||
"usage": "encipherment",
|
||||
"certificateFile": "/path/to/certificate.crt",
|
||||
"keyFile": "/path/to/key.key",
|
||||
"certificate": [
|
||||
"--BEGIN CERTIFICATE--",
|
||||
"MIICwDCCAaigAwIBAgIRAO16JMdESAuHidFYJAR/7kAwDQYJKoZIhvcNAQELBQAw",
|
||||
"ADAeFw0xODA0MTAxMzU1MTdaFw0xODA0MTAxNTU1MTdaMAAwggEiMA0GCSqGSIb3",
|
||||
"DQEBAQUAA4IBDwAwggEKAoIBAQCs2PX0fFSCjOemmdm9UbOvcLctF94Ox4BpSfJ+",
|
||||
"3lJHwZbvnOFuo56WhQJWrclKoImp/c9veL1J4Bbtam3sW3APkZVEK9UxRQ57HQuw",
|
||||
"OzhV0FD20/0YELou85TwnkTw5l9GVCXT02NG+pGlYsFrxesUHpojdl8tIcn113M5",
|
||||
"pypgDPVmPeeORRf7nseMC6GhvXYM4txJPyenohwegl8DZ6OE5FkSVR5wFQtAhbON",
|
||||
"OAkIVVmw002K2J6pitPuJGOka9PxcCVWhko/W+JCGapcC7O74palwBUuXE1iH+Jp",
|
||||
"noPjGp4qE2ognW3WH/sgQ+rvo20eXb9Um1steaYY8xlxgBsXAgMBAAGjNTAzMA4G",
|
||||
"A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA",
|
||||
"MA0GCSqGSIb3DQEBCwUAA4IBAQBUd9sGKYemzwPnxtw/vzkV8Q32NILEMlPVqeJU",
|
||||
"7UxVgIODBV6A1b3tOUoktuhmgSSaQxjhYbFAVTD+LUglMUCxNbj56luBRlLLQWo+",
|
||||
"9BUhC/ow393tLmqKcB59qNcwbZER6XT5POYwcaKM75QVqhCJVHJNb1zSEE7Co7iO",
|
||||
"6wIan3lFyjBfYlBEz5vyRWQNIwKfdh5cK1yAu13xGENwmtlSTHiwbjBLXfk+0A/8",
|
||||
"r/2s+sCYUkGZHhj8xY7bJ1zg0FRalP5LrqY+r6BckT1QPDIQKYy615j1LpOtwZe/",
|
||||
"d4q7MD/dkzRDsch7t2cIjM/PYeMuzh87admSyL6hdtK0Nm/Q",
|
||||
"--END CERTIFICATE--"
|
||||
],
|
||||
"key": [
|
||||
"--BEGIN RSA PRIVATE KEY--",
|
||||
"MIIEowIBAAKCAQEArNj19HxUgoznppnZvVGzr3C3LRfeDseAaUnyft5SR8GW75zh",
|
||||
"bqOeloUCVq3JSqCJqf3Pb3i9SeAW7Wpt7FtwD5GVRCvVMUUOex0LsDs4VdBQ9tP9",
|
||||
"GBC6LvOU8J5E8OZfRlQl09NjRvqRpWLBa8XrFB6aI3ZfLSHJ9ddzOacqYAz1Zj3n",
|
||||
"jkUX+57HjAuhob12DOLcST8np6IcHoJfA2ejhORZElUecBULQIWzjTgJCFVZsNNN",
|
||||
"itieqYrT7iRjpGvT8XAlVoZKP1viQhmqXAuzu+KWpcAVLlxNYh/iaZ6D4xqeKhNq",
|
||||
"IJ1t1h/7IEPq76NtHl2/VJtbLXmmGPMZcYAbFwIDAQABAoIBAFCgG4phfGIxK9Uw",
|
||||
"qrp+o9xQLYGhQnmOYb27OpwnRCYojSlT+mvLcqwvevnHsr9WxyA+PkZ3AYS2PLue",
|
||||
"C4xW0pzQgdn8wENtPOX8lHkuBocw1rNsCwDwvIguIuliSjI8o3CAy+xVDFgNhWap",
|
||||
"/CMzfQYziB7GlnrM6hH838iiy0dlv4I/HKk+3/YlSYQEvnFokTf7HxbDDmznkJTM",
|
||||
"aPKZ5qbnV+4AcQfcLYJ8QE0ViJ8dVZ7RLwIf7+SG0b0bqloti4+oQXqGtiESUwEW",
|
||||
"/Wzi7oyCbFJoPsFWp1P5+wD7jAGpAd9lPIwPahdr1wl6VwIx9W0XYjoZn71AEaw4",
|
||||
"bK4xUXECgYEA3g2o9WqyrhYSax3pGEdvV2qN0VQhw7Xe+jyy98CELOO2DNbB9QNJ",
|
||||
"8cSSU/PjkxQlgbOJc8DEprdMldN5xI/srlsbQWCj72wXxXnVnh991bI2clwt7oYi",
|
||||
"pcGZwzCrJyFL+QaZmYzLxkxYl1tCiiuqLm+EkjxCWKTX/kKEFb6rtnMCgYEAx0WR",
|
||||
"L8Uue3lXxhXRdBS5QRTBNklkSxtU+2yyXRpvFa7Qam+GghJs5RKfJ9lTvjfM/PxG",
|
||||
"3vhuBliWQOKQbm1ZGLbgGBM505EOP7DikUmH/kzKxIeRo4l64mioKdDwK/4CZtS7",
|
||||
"az0Lq3eS6bq11qL4mEdE6Gn/Y+sqB83GHZYju80CgYABFm4KbbBcW+1RKv9WSBtK",
|
||||
"gVIagV/89moWLa/uuLmtApyEqZSfn5mAHqdc0+f8c2/Pl9KHh50u99zfKv8AsHfH",
|
||||
"TtjuVAvZg10GcZdTQ/I41ruficYL0gpfZ3haVWWxNl+J47di4iapXPxeGWtVA+u8",
|
||||
"eH1cvgDRMFWCgE7nUFzE8wKBgGndUomfZtdgGrp4ouLZk6W4ogD2MpsYNSixkXyW",
|
||||
"64cIbV7uSvZVVZbJMtaXxb6bpIKOgBQ6xTEH5SMpenPAEgJoPVts816rhHdfwK5Q",
|
||||
"8zetklegckYAZtFbqmM0xjOI6bu5rqwFLWr1xo33jF0wDYPQ8RHMJkruB1FIB8V2",
|
||||
"GxvNAoGBAM4g2z8NTPMqX+8IBGkGgqmcYuRQxd3cs7LOSEjF9hPy1it2ZFe/yUKq",
|
||||
"ePa2E8osffK5LBkFzhyQb0WrGC9ijM9E6rv10gyuNjlwXdFJcdqVamxwPUBtxRJR",
|
||||
"cYTY2HRkJXDdtT0Bkc3josE6UUDvwMpO0CfAETQPto1tjNEDhQhT",
|
||||
"--END RSA PRIVATE KEY--"
|
||||
]
|
||||
}
|
||||
```
|
||||
> `ocspStapling`: number
|
||||
|
||||
ocspStapling 检查更新时间间隔。 单位:秒
|
||||
|
||||
> `usage`: "encipherment" | "verify" | "issue"
|
||||
|
||||
证书用途,默认值为 `"encipherment"`。
|
||||
|
||||
* `"encipherment"`:证书用于 TLS 认证和加密。
|
||||
* `"verify"`:证书用于验证远端 TLS 的证书。当使用此项时,当前证书必须为 CA 证书。
|
||||
* `"issue"`:证书用于签发其它证书。当使用此项时,当前证书必须为 CA 证书。
|
||||
|
||||
::: tip TIP 1
|
||||
在 Windows 平台上可以将自签名的 CA 证书安装到系统中,即可验证远端 TLS 的证书。
|
||||
:::
|
||||
|
||||
::: tip TIP 2
|
||||
当有新的客户端请求时,假设所指定的 `serverName` 为 `"xray.com"`,Xray 会先从证书列表中寻找可用于 `"xray.com"` 的证书,如果没有找到,则使用任一 `usage` 为 `"issue"` 的证书签发一个适用于 `"xray.com"` 的证书,有效期为一小时。并将新的证书加入证书列表,以供后续使用。
|
||||
:::
|
||||
|
||||
::: tip TIP 3
|
||||
当 `certificateFile` 和 `certificate` 同时指定时,Xray 优先使用 `certificateFile`。`keyFile` 和 `key` 也一样。
|
||||
:::
|
||||
|
||||
::: tip TIP 4
|
||||
当 `usage` 为 `"verify"` 时,`keyFile` 和 `key` 可均为空。
|
||||
:::
|
||||
|
||||
::: tip TIP 5
|
||||
使用 `xray tls cert` 可以生成自签名的 CA 证书。
|
||||
:::
|
||||
|
||||
::: tip TIP 6
|
||||
如已经拥有一个域名, 可以使用工具便捷的获取免费第三方证书,如[acme.sh](https://github.com/acmesh-official/acme.sh)
|
||||
:::
|
||||
|
||||
> `certificateFile`: string
|
||||
|
||||
证书文件路径,如使用 OpenSSL 生成,后缀名为 .crt。
|
||||
|
||||
> `certificate`: \[ string \]
|
||||
|
||||
一个字符串数组,表示证书内容,格式如样例所示。`certificate` 和 `certificateFile` 二者选一。
|
||||
|
||||
> `keyFile`: string
|
||||
|
||||
密钥文件路径,如使用 OpenSSL 生成,后缀名为 .key。目前暂不支持需要密码的 key 文件。
|
||||
|
||||
> `key`: \[ string \]
|
||||
|
||||
一个字符串数组,表示密钥内容,格式如样例如示。`key` 和 `keyFile` 二者选一。
|
||||
|
||||
|
||||
### SockoptObject
|
||||
|
||||
```json
|
||||
{
|
||||
"mark": 0,
|
||||
"tcpFastOpen": false,
|
||||
"tproxy": "off",
|
||||
"domainStrategy": "AsIs",
|
||||
"dialerProxy": ""
|
||||
}
|
||||
```
|
||||
|
||||
> `mark`: number
|
||||
|
||||
一个整数。当其值非零时,在ountbound连接以此数值上标记 SO_MARK。
|
||||
|
||||
* 仅适用于 Linux 系统。
|
||||
* 需要 CAP_NET_ADMIN 权限。
|
||||
|
||||
> `tcpFastOpen`: true | false
|
||||
|
||||
是否启用 [TCP Fast Open](https://zh.wikipedia.org/wiki/TCP%E5%BF%AB%E9%80%9F%E6%89%93%E5%BC%80)。
|
||||
|
||||
当其值为 `true` 时,强制开启 TFO;当其值为 `false` 时,强制关闭 TFO;当此项不存在时,使用系统默认设置。
|
||||
可用于inbound/ountbound。
|
||||
|
||||
* 仅在以下版本(或更新版本)的操作系统中可用:
|
||||
* Windows 10 (1604)
|
||||
* Mac OS 10.11 / iOS 9
|
||||
* Linux 3.16:系统已默认开启,无需配置。
|
||||
|
||||
> `tproxy`: "redirect" | "tproxy" | "off"
|
||||
|
||||
是否开启透明代理(仅适用于 Linux)。
|
||||
|
||||
* `"redirect"`:使用 Redirect 模式的透明代理。支持所有基于 IPv4/6 的 TCP 和 UDP 连接。
|
||||
* `"tproxy"`:使用 TProxy 模式的透明代理。支持所有基于 IPv4/6 的 TCP 和 UDP 连接。
|
||||
* `"off"`:关闭透明代理。
|
||||
|
||||
透明代理需要 Root 或 CAP\_NET\_ADMIN 权限。
|
||||
|
||||
::: danger
|
||||
当 [Dokodemo-door](../../inbound-protocols/dokodemo) 中指定了 `followRedirect`为`true`,且 Sockopt设置中的`tproxy` 为空时,Sockopt设置中的`tproxy` 的值会被设为 `"redirect"`。
|
||||
:::
|
||||
|
||||
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
|
||||
|
||||
在之前的版本中,当 Xray 尝试使用域名建立系统连接时,域名的解析由系统完成,不受 Xray 控制。这导致了在 [非标准Linux环境中无法解析域名](https://github.com/v2ray/v2ray-core/issues/1909) 等问题。为此,Xray 1.3.1 为 Sockopt 引入了 Freedom 中的 domainStrategy,解决了此问题。
|
||||
|
||||
在目标地址为域名时, 配置相应的值, SysteDailer 的行为模式如下:
|
||||
- `"AsIs"`: 通过系统DNS服务器解析获取IP, 向此域名发出连接。
|
||||
- `"UseIP"`、`"UseIPv4"` 和 `"UseIPv6"`: Xray 使用[内置 DNS 服务器](../dns)解析获取IP, 向此域名发出连接。
|
||||
|
||||
默认值为 `"AsIs"`。
|
||||
|
||||
::: danger
|
||||
如果启用了此功能,将有可能导致通过 `代理服务器` 代理 `解析代理服务器IP的查询` 的死循环。因此,**不建议** 经验不足的用户擅自使用此功能。
|
||||
:::
|
||||
|
||||
> `dialerProxy`: ""
|
||||
|
||||
一个出站代理的标识。当值不为空时,将使用指定的outbound发出连接。
|
||||
此选项可用于支持底层传输方式的链式转发。
|
||||
|
||||
::: danger
|
||||
此选项与 PorxySettingsObject.Tag 不兼容
|
||||
:::
|
||||
|
||||
Reference in New Issue
Block a user