mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-04 12:58:19 +03:00
Fix: format
This commit is contained in:
@@ -22,7 +22,7 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
|
||||
"transport": {},
|
||||
"stats": {},
|
||||
"reverse": {},
|
||||
"fakedns":{}
|
||||
"fakedns": {}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -34,11 +34,11 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
|
||||
|
||||
> log:[LogObject](./log.md)
|
||||
|
||||
日志配置,控制 Xray输出日志的方式.
|
||||
日志配置,控制 Xray 输出日志的方式.
|
||||
|
||||
> api:[ApiObject](./api.md)
|
||||
> api:[ApiObject](./api.md)
|
||||
|
||||
提供了一些API接口供远程调用。
|
||||
提供了一些 API 接口供远程调用。
|
||||
|
||||
> dns: [DnsObject](./dns.md)
|
||||
|
||||
@@ -46,7 +46,7 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
|
||||
|
||||
> routing: [RoutingObject](./routing.md)
|
||||
|
||||
路由功能。可以设置规则分流数据从不同的outbound发出.
|
||||
路由功能。可以设置规则分流数据从不同的 outbound 发出.
|
||||
|
||||
> policy: [PolicyObject](./policy.md)
|
||||
|
||||
|
||||
+5
-11
@@ -1,8 +1,8 @@
|
||||
# API接口
|
||||
# API 接口
|
||||
|
||||
API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供远程调用。
|
||||
API 接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供远程调用。
|
||||
|
||||
可以通过api配置模块开启接口. 当api配置开启时,Xray 会自建一个出站代理,须手动将所有的 API 入站连接通过 [路由规则配置](./routing.md) 指向这一出站代理。
|
||||
可以通过 api 配置模块开启接口. 当 api 配置开启时,Xray 会自建一个出站代理,须手动将所有的 API 入站连接通过 [路由规则配置](./routing.md) 指向这一出站代理。
|
||||
|
||||
请参考本节中的 [相关配置](#相关配置)
|
||||
|
||||
@@ -18,11 +18,7 @@ API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供
|
||||
{
|
||||
"api": {
|
||||
"tag": "api",
|
||||
"services": [
|
||||
"HandlerService",
|
||||
"LoggerService",
|
||||
"StatsService"
|
||||
]
|
||||
"services": ["HandlerService", "LoggerService", "StatsService"]
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -35,7 +31,6 @@ API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供
|
||||
|
||||
开启的 API 列表,可选的值见 [API 列表](#支持的-api-列表)。
|
||||
|
||||
|
||||
## 相关配置
|
||||
|
||||
可以在 inbounds 配置中增加一个 api 的 inbound
|
||||
@@ -54,7 +49,7 @@ API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供
|
||||
]
|
||||
```
|
||||
|
||||
在路由配置中增加针对api inbound的路由规则
|
||||
在路由配置中增加针对 api inbound 的路由规则
|
||||
|
||||
```json
|
||||
"routing": {
|
||||
@@ -73,7 +68,6 @@ API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 支持的 API 列表
|
||||
|
||||
### HandlerService
|
||||
|
||||
+22
-25
@@ -1,4 +1,4 @@
|
||||
# 内置DNS服务器
|
||||
# 内置 DNS 服务器
|
||||
|
||||
## DNS 服务器
|
||||
|
||||
@@ -21,9 +21,9 @@ Xray 内置的 DNS 模块,主要有两大用途:
|
||||
只支持最基本的 IP 查询(A 和 AAAA 记录)。其他查询不会进入内置 DNS 服务器。
|
||||
:::
|
||||
|
||||
|
||||
## DNS 处理流程
|
||||
DNS 服务器配置模块可以配置多个DNS服务器, 并且指定优先匹配列表.
|
||||
|
||||
DNS 服务器配置模块可以配置多个 DNS 服务器, 并且指定优先匹配列表.
|
||||
|
||||
1. 查询的域名与某个 DNS 服务器指定的域名列表匹配时,Xray 会优先使用这个 DNS 服务器进行查询。
|
||||
2. 无匹配时, 按从上往下的顺序进行查询,并且会跳过 1 步骤中使用的最后一个服务器。
|
||||
@@ -33,8 +33,8 @@ DNS 服务器的处理流程示意图如下:
|
||||
|
||||

|
||||
|
||||
|
||||
## DnsObject
|
||||
|
||||
`DnsObject` 对应配置文件的 `dns` 项。
|
||||
|
||||
```json
|
||||
@@ -60,7 +60,7 @@ DNS 服务器的处理流程示意图如下:
|
||||
}
|
||||
```
|
||||
|
||||
>`hosts`: map{string: address}
|
||||
> `hosts`: map{string: address}
|
||||
|
||||
静态 IP 列表,其值为一系列的 "域名": "地址"。其中地址可以是 IP 或者域名。在解析域名时,如果域名匹配这个列表中的某一项:
|
||||
|
||||
@@ -70,12 +70,12 @@ DNS 服务器的处理流程示意图如下:
|
||||
域名的格式有以下几种形式:
|
||||
|
||||
- 纯字符串:当此字符串完整匹配目标域名时,该规则生效。例如 "xray.com" 匹配 "xray.com",但不匹配 "www.xray.com"。
|
||||
- 正则表达式:由 `"regexp:"` 开始,余下部分是一个正则表达式。当此正则表达式匹配目标域名时,该规则生效。例如 "regexp:\\\\.goo.\*\\\\.com$" 匹配 "www.google.com"、"fonts.googleapis.com",但不匹配 "google.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.md#预定义域名列表)。
|
||||
|
||||
>`servers`: \[string | [ServerObject](#serverobject) \]
|
||||
> `servers`: \[string | [ServerObject](#serverobject) \]
|
||||
|
||||
一个 DNS 服务器列表,支持的类型有两种:DNS 地址(字符串形式)和 [ServerObject](#serverobject) 。
|
||||
|
||||
@@ -83,7 +83,7 @@ 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://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 等组件,直接对外请求,以降低耗时。一般适合在服务端使用。也可使用非标端口和路径。
|
||||
|
||||
@@ -101,29 +101,26 @@ DNS 服务器的处理流程示意图如下:
|
||||
(v1.4.0+) 可以在 [日志](./log.md) 中打开 DNS 查询日志。
|
||||
:::
|
||||
|
||||
>`clientIp`: string
|
||||
> `clientIp`: string
|
||||
|
||||
用于 DNS 查询时通知服务器以指定IP位置。不能是私有地址。
|
||||
用于 DNS 查询时通知服务器以指定 IP 位置。不能是私有地址。
|
||||
|
||||
>`tag`: string
|
||||
> `tag`: string
|
||||
|
||||
由内置 DNS 发出的查询流量,除 `localhost` 和 `DOHL_` 模式外,都可以用此标识在路由使用 `inboundTag` 进行匹配。
|
||||
|
||||
|
||||
### ServerObject
|
||||
|
||||
```json
|
||||
{
|
||||
"address": "1.2.3.4",
|
||||
"port": 5353,
|
||||
"domains": [
|
||||
"domain:xray.com"
|
||||
],
|
||||
"expectIPs": [
|
||||
"geoip:cn"
|
||||
]
|
||||
"address": "1.2.3.4",
|
||||
"port": 5353,
|
||||
"domains": ["domain:xray.com"],
|
||||
"expectIPs": ["geoip:cn"]
|
||||
}
|
||||
```
|
||||
>`address`: address
|
||||
|
||||
> `address`: address
|
||||
|
||||
一个 DNS 服务器列表,支持的类型有两种:DNS 地址(字符串形式)和 ServerObject 。
|
||||
|
||||
@@ -133,19 +130,19 @@ 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 等组件,直接对外请求,以降低耗时。一般适合在服务端使用。也可使用非标端口和路径。
|
||||
当值是 "https+local://host:port/dns-query" 的形式,如 "https+local://dns.google/dns-query",Xray 会使用 DOH 本地模式 进行查询,即 DOH 请求不会经过 Routing/Outbound 等组件,直接对外请求,以降低耗时。一般适合在服务端使用。也可使用非标端口和路径。
|
||||
|
||||
当值是 `fakedns` 时,将使用 FakeDNS 功能进行查询。
|
||||
|
||||
>`port`: number
|
||||
> `port`: number
|
||||
|
||||
DNS 服务器端口,如 `53`。此项缺省时默认为 `53`。当使用 DOH 模式该项无效,非标端口应在 URL 中指定。
|
||||
|
||||
>`domains`: \[string\]
|
||||
> `domains`: \[string\]
|
||||
|
||||
一个域名列表,此列表包含的域名,将优先使用此服务器进行查询。域名格式和 [路由配置](./routing.md#ruleobject) 中相同。
|
||||
|
||||
>`expectIPs`:\[string\]
|
||||
> `expectIPs`:\[string\]
|
||||
|
||||
一个 IP 范围列表,格式和 [路由配置](./routing.md#ruleobject) 中相同。
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@ FakeDNS 有可能会污染本地 DNS,导致 Xray 关闭后“无法访问网
|
||||
|
||||
```json
|
||||
{
|
||||
"ipPool": "198.18.0.0/16",
|
||||
"poolSize": 65535
|
||||
"ipPool": "198.18.0.0/16",
|
||||
"poolSize": 65535
|
||||
}
|
||||
```
|
||||
|
||||
> `ipPool`: CIDR
|
||||
> `ipPool`: CIDR
|
||||
|
||||
FakeDNS 将使用此选项指定的 IP 块分配地址。
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ Xray 提供以下环境变量以供修改 Xray 的一些底层配置。
|
||||
可打开此环境变量并根据是否有输出 XTLS 相关信息, 来确定 XTLS 是否成功被应用.
|
||||
:::
|
||||
|
||||
|
||||
## 资源文件路径
|
||||
|
||||
- 名称:`xray.location.asset` 或 `XRAY_LOCATION_ASSET`。
|
||||
|
||||
@@ -6,8 +6,7 @@ fallback 为 Xray 提供了高强度的防主动探测性, 并且具有独创的
|
||||
|
||||
fallback 也可以将不同类型的流量根据 path 进行分流, 从而实现一个端口, 多种服务共享.
|
||||
|
||||
目前您可以在使用 VLESS 或者 trojan 协议时, 通过配置 fallbacks 来使用回落这一特性, 并且创造出非常丰富的组合玩法.
|
||||
|
||||
目前您可以在使用 VLESS 或者 trojan 协议时, 通过配置 fallbacks 来使用回落这一特性, 并且创造出非常丰富的组合玩法.
|
||||
|
||||
## fallbacks 配置
|
||||
|
||||
@@ -48,6 +47,7 @@ VLESS 会把 TLS 解密后首包长度 < 18 或协议版本无效、身份认证
|
||||
其它传输组合必须删掉 `fallbacks` 项或所有子元素,此时也不会开启 Fallback,VLESS 会等待读够所需长度,协议版本无效或身份认证失败时,将直接断开连接。
|
||||
|
||||
> `name`: string
|
||||
|
||||
尝试匹配 TLS SNI(Server Name Indication),空为任意,默认为 ""
|
||||
|
||||
> `alpn`: string
|
||||
@@ -86,12 +86,10 @@ Fallback 内设置的 `alpn` 是匹配实际协商出的 ALPN,而 Inbound TLS
|
||||
|
||||
目前填 1 或 2,功能完全相同,只是结构不同,且前者可打印,后者为二进制。Xray 的 TCP 和 WS 入站均已支持接收 PROXY protocol。
|
||||
|
||||
|
||||
::: warning
|
||||
若你正在 [配置 Nginx 接收 PROXY protocol](https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/#configuring-nginx-to-accept-the-proxy-protocol),除了设置 proxy_protocol 外,还需设置 set_real_ip_from,否则可能会出问题。
|
||||
:::
|
||||
|
||||
|
||||
### 补充说明
|
||||
|
||||
- 将匹配到最精确的子元素,与子元素的排列顺序无关。若配置了几个 alpn 和 path 均相同的子元素,则会以最后的为准。
|
||||
@@ -99,6 +97,4 @@ Fallback 内设置的 `alpn` 是匹配实际协商出的 ALPN,而 Inbound TLS
|
||||
- 您可以查看更多的关于 Fallbacks 的使用技巧和心得
|
||||
- [Fallbacks 功能简析](../documents/level-1/fallbacks-lv1)
|
||||
|
||||
|
||||
## Fallbacks 设计理论 <Badge text="WIP" type="warning"/>
|
||||
|
||||
|
||||
@@ -28,26 +28,26 @@ $ xray run -confdir /etc/xray/confs
|
||||
|
||||
比如:
|
||||
|
||||
* base.json
|
||||
- base.json
|
||||
|
||||
```json
|
||||
{
|
||||
"log": {},
|
||||
"api": {},
|
||||
"dns": {},
|
||||
"stats": {},
|
||||
"policy": {},
|
||||
"transport": {},
|
||||
"routing": {},
|
||||
"inbounds": []
|
||||
"log": {},
|
||||
"api": {},
|
||||
"dns": {},
|
||||
"stats": {},
|
||||
"policy": {},
|
||||
"transport": {},
|
||||
"routing": {},
|
||||
"inbounds": []
|
||||
}
|
||||
```
|
||||
|
||||
* outbounds.json
|
||||
- outbounds.json
|
||||
|
||||
```json
|
||||
{
|
||||
"outbounds": []
|
||||
"outbounds": []
|
||||
}
|
||||
```
|
||||
|
||||
@@ -61,13 +61,13 @@ $ xray run -confdir /etc/xray/confs
|
||||
|
||||
如果需要改编日志 log 的级别,也不需要改 `base.json`,只需后续增加一个配置:
|
||||
|
||||
* debuglog.json
|
||||
- debuglog.json
|
||||
|
||||
```json
|
||||
{
|
||||
"log": {
|
||||
"loglevel": "debug"
|
||||
}
|
||||
"log": {
|
||||
"loglevel": "debug"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -77,8 +77,8 @@ $ xray run -confdir /etc/xray/confs
|
||||
|
||||
在 json 配置中的`inbounds`和`outbounds`是数组结构,他们有特殊的规则:
|
||||
|
||||
* 当配置中的数组元素有 2 或以上,覆盖前者的 inbounds/oubounds;
|
||||
* 当配置中的数组元素只有 1 个时,查找原有`tag`相同的元素进行覆盖;若无法找到:
|
||||
- 当配置中的数组元素有 2 或以上,覆盖前者的 inbounds/oubounds;
|
||||
- 当配置中的数组元素只有 1 个时,查找原有`tag`相同的元素进行覆盖;若无法找到:
|
||||
- 对于 inbounds,添加至最后(inbounds 内元素顺序无关)
|
||||
- 对于 outbounds,添加至最前(outbounds 默认首选出口);但如果文件名含有 tail(大小写均可),添加至最后。
|
||||
|
||||
@@ -86,44 +86,44 @@ $ xray run -confdir /etc/xray/confs
|
||||
|
||||
以下例子不是有效配置,只为展示上述规则。
|
||||
|
||||
* 000.json
|
||||
- 000.json
|
||||
|
||||
```json
|
||||
{
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "socks",
|
||||
"tag":"socks",
|
||||
"port": 1234
|
||||
}
|
||||
]
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "socks",
|
||||
"tag": "socks",
|
||||
"port": 1234
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
* 001.json
|
||||
- 001.json
|
||||
|
||||
```json
|
||||
{
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "http",
|
||||
"tag":"http"
|
||||
}
|
||||
]
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "http",
|
||||
"tag": "http"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
* 002.json
|
||||
- 002.json
|
||||
|
||||
```json
|
||||
{
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "socks",
|
||||
"tag":"socks",
|
||||
"port": 4321
|
||||
}
|
||||
]
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "socks",
|
||||
"tag": "socks",
|
||||
"port": 4321
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -131,22 +131,20 @@ $ xray run -confdir /etc/xray/confs
|
||||
|
||||
```json
|
||||
{
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "socks",
|
||||
"tag":"socks",
|
||||
"port": 4321 // < 002顺序在000后,因此覆盖tag为socks的inbound端口为4321
|
||||
},
|
||||
{
|
||||
"protocol": "http",
|
||||
"tag":"http"
|
||||
}
|
||||
]
|
||||
"inbounds": [
|
||||
{
|
||||
"protocol": "socks",
|
||||
"tag": "socks",
|
||||
"port": 4321 // < 002顺序在000后,因此覆盖tag为socks的inbound端口为4321
|
||||
},
|
||||
{
|
||||
"protocol": "http",
|
||||
"tag": "http"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 推荐的多文件列表
|
||||
|
||||
执行:
|
||||
|
||||
@@ -29,18 +29,18 @@
|
||||
- iOS / Mac
|
||||
- [Shadowrocket](https://apps.apple.com/app/shadowrocket/id932747118)
|
||||
|
||||
|
||||
## Fallbacks
|
||||
|
||||
Fallbacks 是 Xray 独创的新型协议回落模式解析, 可有效防止主动探测, 自由配置常用端口多服务共享.
|
||||
|
||||
目前 Xray 中的 VLESS 和 trojan 协议支持Fallbacks.
|
||||
目前 Xray 中的 VLESS 和 trojan 协议支持 Fallbacks.
|
||||
|
||||
- [Fallbacks 配置说明](../fallback/#fallbacks-配置)
|
||||
- [Fallbacks 功能简析]()
|
||||
- [Fallbacks 设计理论](../fallback/#fallbacks-设计理论)
|
||||
|
||||
|
||||
## VLESS 分享链接标准
|
||||
|
||||
感谢 <img src="https://avatars2.githubusercontent.com/u/7822648?s=32" width="32px" height="32px" alt="a"/> [@DuckSoft](https://github.com/DuckSoft) 的提案!
|
||||
|
||||
目前为初步提案, 详情请见 [VMessAEAD / VLESS 分享链接标准提案](https://github.com/XTLS/Xray-core/issues/91)
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
> **XTLS 是 Xray 的原创黑科技, 也是使 Xray 性能一骑绝尘的核心动力**
|
||||
|
||||
<Badge text="WIP" type="warning"/>
|
||||
<Badge text="WIP" type="warning"/>
|
||||
|
||||
+25
-23
@@ -30,7 +30,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
>`listen`: address
|
||||
> `listen`: address
|
||||
|
||||
监听地址,IP 地址或 Unix domain socket,默认值为 `"0.0.0.0"`,表示接收所有网卡上的连接.
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
填写 Unix domain socket 时,`port` 和 `allocate` 将被忽略,协议目前可选 VLESS、VMess、Trojan,传输方式可选 TCP、WebSocket、HTTP/2。
|
||||
|
||||
>`port`: number | "env:variable" | string
|
||||
> `port`: number | "env:variable" | string
|
||||
|
||||
端口。接受的格式如下:
|
||||
|
||||
@@ -50,41 +50,42 @@
|
||||
|
||||
当只有一个端口时,Xray 会在此端口监听入站连接。当指定了一个端口范围时,取决于 `allocate` 设置。
|
||||
|
||||
>`protocol`: string
|
||||
> `protocol`: string
|
||||
|
||||
连接协议名称,可选的协议类型见 [inbound 可用协议列表](./inbounds/)。
|
||||
|
||||
>`settings`: InboundConfigurationObject
|
||||
> `settings`: InboundConfigurationObject
|
||||
|
||||
具体的配置内容,视协议不同而不同。详见每个协议中的 `InboundConfigurationObject`。
|
||||
|
||||
>`streamSettings`: [StreamSettingsObject](./transport.md#streamsettingsobject)
|
||||
> `streamSettings`: [StreamSettingsObject](./transport.md#streamsettingsobject)
|
||||
|
||||
底层传输方式(transport)是当前 Xray 节点和其它节点对接的方式
|
||||
|
||||
>`tag`: string
|
||||
此入站连接的标识,用于在其它的配置中定位此连接。
|
||||
> `tag`: string
|
||||
> 此入站连接的标识,用于在其它的配置中定位此连接。
|
||||
|
||||
::: danger
|
||||
当其不为空时,其值必须在所有 `tag` 中**唯一**。
|
||||
:::
|
||||
|
||||
>`sniffing`: [SniffingObject](#sniffingobject)
|
||||
> `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解析等其他工作.
|
||||
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.路由就可以根据域名去进行路由的域名规则的分流
|
||||
|
||||
当设置了sniffing中的enable为true, 还能嗅探出bittorrent类型的流量, 然后可以在路由中配置"protocol"项来设置规则处理BT流量, 比如服务端用来拦截BT流量, 或客户端固定转发BT流量到某个VPS去等.
|
||||
因为变成了一个向 abc.com 请求的连接, 就可以做更多的事情, 除了路由域名规则分流, 还能重新做 DNS 解析等其他工作.
|
||||
|
||||
>`allocate`: [AllocateObject](#allocateobject)
|
||||
当设置了 sniffing 中的 enable 为 true, 还能嗅探出 bittorrent 类型的流量, 然后可以在路由中配置"protocol"项来设置规则处理 BT 流量, 比如服务端用来拦截 BT 流量, 或客户端固定转发 BT 流量到某个 VPS 去等.
|
||||
|
||||
当设置了多个port时, 端口分配的具体设置
|
||||
> `allocate`: [AllocateObject](#allocateobject)
|
||||
|
||||
当设置了多个 port 时, 端口分配的具体设置
|
||||
|
||||
### SniffingObject
|
||||
|
||||
@@ -96,15 +97,15 @@
|
||||
}
|
||||
```
|
||||
|
||||
>`enabled`: true | false
|
||||
> `enabled`: true | false
|
||||
|
||||
是否开启流量探测。
|
||||
|
||||
>`destOverride`: \["http" | "tls" | "fakedns" \]
|
||||
> `destOverride`: \["http" | "tls" | "fakedns" \]
|
||||
|
||||
当流量为指定类型时,按其中包括的目标地址重置当前连接的目标。
|
||||
|
||||
>`metadataOnly`: true | false
|
||||
> `metadataOnly`: true | false
|
||||
|
||||
当启用时,将仅使用连接的元数据嗅探目标地址。此时,`http` 与 `tls` 将不能使用。
|
||||
|
||||
@@ -118,16 +119,17 @@
|
||||
}
|
||||
```
|
||||
|
||||
>`strategy`: "always" | "random"
|
||||
> `strategy`: "always" | "random"
|
||||
|
||||
端口分配策略。
|
||||
|
||||
端口分配策略。
|
||||
- `"always"` 表示总是分配所有已指定的端口,`port` 中指定了多少个端口,Xray 就会监听这些端口。
|
||||
- `"random"` 表示随机开放端口,每隔 `refresh` 分钟在 `port` 范围中随机选取 `concurrency` 个端口来监听。
|
||||
|
||||
>`refresh`: number
|
||||
> `refresh`: number
|
||||
|
||||
随机端口刷新间隔,单位为分钟。最小值为 `2`,建议值为 `5`。这个属性仅当 `strategy` 设置为 `"random"` 时有效。
|
||||
|
||||
>`concurrency`: number
|
||||
> `concurrency`: number
|
||||
|
||||
随机端口数量。最小值为 `1`,最大值为 `port` 范围的三分之一。建议值为 `3`。
|
||||
|
||||
@@ -4,31 +4,30 @@
|
||||
|
||||
## 协议列表
|
||||
|
||||
>[Dokodemo-door](./dokodemo.md)
|
||||
> [Dokodemo-door](./dokodemo.md)
|
||||
|
||||
Dokodemo door(任意门)可以监听一个本地端口,并把所有进入此端口的数据发送至指定服务器的一个端口,从而达到端口映射的效果。
|
||||
|
||||
>[HTTP](./http.md)
|
||||
> [HTTP](./http.md)
|
||||
|
||||
HTTP 协议
|
||||
|
||||
>[Socks](./socks.md)
|
||||
> [Socks](./socks.md)
|
||||
|
||||
标准 Socks 协议实现,兼容 [Socks 4](http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol)、Socks 4a 和 [Socks 5](http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol)。
|
||||
|
||||
>[VLESS](./vless.md)
|
||||
> [VLESS](./vless.md)
|
||||
|
||||
VLESS 是一个无状态的轻量传输协议,可以作为 Xray 客户端和服务器之间的桥梁。
|
||||
|
||||
>[VMess](./vmess.md)
|
||||
> [VMess](./vmess.md)
|
||||
|
||||
[VMess](../development/protocols/vmess.md) 是一个加密传输协议,,可以作为 Xray 客户端和服务器之间的桥梁。
|
||||
|
||||
>[Trojan](./trojan.md)
|
||||
> [Trojan](./trojan.md)
|
||||
|
||||
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议
|
||||
|
||||
>[Shadowsocks](./shadowsocks.md)
|
||||
> [Shadowsocks](./shadowsocks.md)
|
||||
|
||||
[Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议。
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# HTTP
|
||||
|
||||
HTTP 协议。
|
||||
|
||||
::: warning
|
||||
@@ -7,9 +8,8 @@ HTTP 协议。
|
||||
|
||||
`http` 入站更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
|
||||
|
||||
|
||||
::: tip TIP 1
|
||||
`http proxy` 只能代理 tcp 协议,udp 系的协议均不能通过。
|
||||
`http proxy` 只能代理 tcp 协议,udp 系的协议均不能通过。
|
||||
:::
|
||||
|
||||
::: tip TIP 2
|
||||
@@ -17,7 +17,7 @@ HTTP 协议。
|
||||
|
||||
- `export http_proxy=http://127.0.0.1:8080/` (地址须改成你配置的 HTTP 入站代理地址)
|
||||
- `export https_proxy=$http_proxy`
|
||||
:::
|
||||
:::
|
||||
|
||||
## InboundConfigurationObject
|
||||
|
||||
@@ -77,4 +77,3 @@ userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值
|
||||
> `pass`: string
|
||||
|
||||
密码,字符串类型。必填。
|
||||
|
||||
|
||||
@@ -4,18 +4,20 @@
|
||||
|
||||
目前兼容性如下:
|
||||
|
||||
* 支持 TCP 和 UDP 数据包转发,其中 UDP 可选择性关闭;
|
||||
* 推荐的加密方式:
|
||||
* AES-256-GCM
|
||||
* AES-128-GCM
|
||||
* ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
|
||||
* none 或 plain
|
||||
|
||||
- 支持 TCP 和 UDP 数据包转发,其中 UDP 可选择性关闭;
|
||||
- 推荐的加密方式:
|
||||
|
||||
- AES-256-GCM
|
||||
- AES-128-GCM
|
||||
- ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
|
||||
- none 或 plain
|
||||
|
||||
不推荐的加密方式:
|
||||
* AES-256-CFB
|
||||
* AES-128-CFB
|
||||
* ChaCha20
|
||||
* ChaCha20-IETF
|
||||
|
||||
- AES-256-CFB
|
||||
- AES-128-CFB
|
||||
- ChaCha20
|
||||
- ChaCha20-IETF
|
||||
|
||||
::: danger
|
||||
"none" 不加密方式下,服务器端不会验证 "password" 中的密码。为确保安全性, 一般需要加上 TLS 并在传输层使用安全配置,例如 WebSocket 配置较长的 path
|
||||
@@ -25,11 +27,11 @@
|
||||
|
||||
```json
|
||||
{
|
||||
"email": "love@xray.com",
|
||||
"method": "aes-256-gcm",
|
||||
"password": "密码",
|
||||
"level": 0,
|
||||
"network": "tcp"
|
||||
"email": "love@xray.com",
|
||||
"method": "aes-256-gcm",
|
||||
"password": "密码",
|
||||
"level": 0,
|
||||
"network": "tcp"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -40,11 +42,12 @@
|
||||
> `method`: string
|
||||
|
||||
必填。
|
||||
* 推荐的加密方式:
|
||||
* AES-256-GCM
|
||||
* AES-128-GCM
|
||||
* ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
|
||||
* none 或 plain
|
||||
|
||||
- 推荐的加密方式:
|
||||
- AES-256-GCM
|
||||
- AES-128-GCM
|
||||
- ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
|
||||
- none 或 plain
|
||||
|
||||
> `password`: string
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
`socks` 入站更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
|
||||
|
||||
|
||||
## InboundConfigurationObject
|
||||
|
||||
```json
|
||||
@@ -58,7 +57,6 @@ Socks 协议的认证方式,支持 `"noauth"` 匿名方式和 `"password"` 用
|
||||
|
||||
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
|
||||
|
||||
### AccountObject
|
||||
|
||||
```json
|
||||
|
||||
@@ -39,7 +39,7 @@ fallbacks 的具体配置请点击[FallbackObject](../examples/fallback.md#fallb
|
||||
|
||||
::: tip
|
||||
Xray 的 Trojan 有完整的 fallbacks 支持,配置方式完全一致。
|
||||
触发回落的条件也与VLESS类似:首包长度 < 58 或第 57 个字节不为 `\r`(因为 Trojan 没有协议版本)或身份认证失败。
|
||||
触发回落的条件也与 VLESS 类似:首包长度 < 58 或第 57 个字节不为 `\r`(因为 Trojan 没有协议版本)或身份认证失败。
|
||||
:::
|
||||
|
||||
### ClientObject
|
||||
|
||||
@@ -62,16 +62,17 @@ fallbacks 的具体配置请点击 [FallbackObject](../examples/fallback.md#fall
|
||||
|
||||
> `id`: string
|
||||
|
||||
VLESS 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的UUID.
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此UUID是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
|
||||
VLESS 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
|
||||
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
|
||||
其映射标准在 [VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158)
|
||||
|
||||
你可以使用命令 `xray uuid -i "自定义字符串"` 生成自定义字符串所映射的的 UUID。
|
||||
|
||||
>也可以使用命令 `xray uuid` 生成随机的UUID.
|
||||
> 也可以使用命令 `xray uuid` 生成随机的 UUID.
|
||||
|
||||
> `level`: number
|
||||
|
||||
|
||||
@@ -48,12 +48,12 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
|
||||
> `disableInsecureEncryption`: true | false
|
||||
|
||||
是否禁止客户端使用不安全的加密方式,如果设置为 true 当客户端指定下列加密方式时,服务器会主动断开连接。
|
||||
|
||||
- `"none"`
|
||||
- `"aes-128-cfb"`
|
||||
|
||||
默认值为`false`。
|
||||
|
||||
|
||||
### ClientObject
|
||||
|
||||
```json
|
||||
@@ -67,19 +67,20 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
|
||||
|
||||
> `id`: string
|
||||
|
||||
Vmess 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的UUID.
|
||||
Vmess 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
|
||||
|
||||
::: tip
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此UUID是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
:::
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
|
||||
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
:::
|
||||
|
||||
其映射标准在 [VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158)
|
||||
|
||||
你可以使用命令 `xray uuid -i "自定义字符串"` 生成自定义字符串所映射的的 UUID。
|
||||
|
||||
> 也可以使用命令 `xray uuid` 生成随机的UUID.
|
||||
|
||||
> 也可以使用命令 `xray uuid` 生成随机的 UUID.
|
||||
|
||||
> `level`: number
|
||||
|
||||
@@ -113,7 +114,7 @@ level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。
|
||||
|
||||
> `to`: string
|
||||
|
||||
一个 inbound 的`tag`, 指定的 inbound 的必须是使用 VMess 协议的 inbound.
|
||||
一个 inbound 的`tag`, 指定的 inbound 的必须是使用 VMess 协议的 inbound.
|
||||
|
||||
### DefaultObject
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# 日志配置
|
||||
|
||||
日志配置,控制 Xray输出日志的方式.
|
||||
日志配置,控制 Xray 输出日志的方式.
|
||||
|
||||
Xray 有两种日志, 访问日志和错误日志, 你可以分别配置两种日志的输出方式.
|
||||
|
||||
@@ -42,6 +42,6 @@ error 日志的级别, 指示 error 日志需要记录的信息.
|
||||
- `"error"`:Xray 遇到了无法正常运行的问题,需要立即解决。
|
||||
- `"none"`:不记录任何内容。
|
||||
|
||||
> `dnsLog`: bool
|
||||
> `dnsLog`: bool
|
||||
|
||||
是否启用 DNS 查询日志,例如:`DOH//doh.server got answer: domain.com -> [ip1, ip2] 2.333ms`
|
||||
|
||||
+19
-15
@@ -7,10 +7,9 @@
|
||||
`OutboundObject` 对应配置文件中 `outbounds` 项的一个子元素。
|
||||
|
||||
::: tip
|
||||
列表中的第一个元素作为主outbound。当路由匹配不存在或没有匹配成功时,流量由主outbound发出。
|
||||
列表中的第一个元素作为主 outbound。当路由匹配不存在或没有匹配成功时,流量由主 outbound 发出。
|
||||
:::
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"outbounds": [
|
||||
@@ -29,16 +28,19 @@
|
||||
}
|
||||
```
|
||||
|
||||
>`sendThrough`: address
|
||||
> `sendThrough`: address
|
||||
|
||||
用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 `"0.0.0.0"`。
|
||||
>`protocol`: string
|
||||
|
||||
> `protocol`: string
|
||||
|
||||
连接协议名称,可选的协议类型见 [outbound 可用协议列表](./outbounds/)。
|
||||
>`settings`: OutboundConfigurationObject
|
||||
|
||||
> `settings`: OutboundConfigurationObject
|
||||
|
||||
具体的配置内容,视协议不同而不同。详见每个协议中的 `OutboundConfigurationObject`。
|
||||
>`tag`: string
|
||||
|
||||
> `tag`: string
|
||||
|
||||
此出站连接的标识,用于在其它的配置中定位此连接。
|
||||
|
||||
@@ -46,29 +48,29 @@
|
||||
当其不为空时,其值必须在所有 `tag` 中 **唯一**。
|
||||
:::
|
||||
|
||||
>`streamSettings`: [StreamSettingsObject](./transport.md#streamsettingsobject)
|
||||
> `streamSettings`: [StreamSettingsObject](./transport.md#streamsettingsobject)
|
||||
|
||||
底层传输方式(transport)是当前 Xray 节点和其它节点对接的方式
|
||||
|
||||
>`proxySettings`: [ProxySettingsObject](#proxysettingsobject)
|
||||
> `proxySettings`: [ProxySettingsObject](#proxysettingsobject)
|
||||
|
||||
出站代理配置。当出站代理生效时,此outbound的 `streamSettings` 将不起作用。
|
||||
出站代理配置。当出站代理生效时,此 outbound 的 `streamSettings` 将不起作用。
|
||||
|
||||
>`mux`: [MuxObject](#muxobject)
|
||||
> `mux`: [MuxObject](#muxobject)
|
||||
|
||||
Mux 相关的具体配置。
|
||||
|
||||
|
||||
### ProxySettingsObject
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "another-outbound-tag"
|
||||
}
|
||||
```
|
||||
|
||||
>`tag`: string
|
||||
> `tag`: string
|
||||
|
||||
当指定另一个outbound的标识时,此outbound发出的数据,将被转发至所指定的outbound发出。
|
||||
当指定另一个 outbound 的标识时,此 outbound 发出的数据,将被转发至所指定的 outbound 发出。
|
||||
|
||||
::: danger
|
||||
这种转发方式**不经过**底层传输方式。如果需要使用支持底层传输方式的转发,请使用 [SockOpt.dialerProxy](./transport.md#sockoptobject)。
|
||||
@@ -83,6 +85,7 @@ Mux 相关的具体配置。
|
||||
:::
|
||||
|
||||
### MuxObject
|
||||
|
||||
Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../../development/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
|
||||
|
||||
`MuxObject` 对应 `OutboundObject` 中的 `mux` 项。
|
||||
@@ -94,10 +97,11 @@ Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细
|
||||
}
|
||||
```
|
||||
|
||||
>`enabled`: true | false
|
||||
> `enabled`: true | false
|
||||
|
||||
是否启用 Mux 转发请求,默认值 `false`。
|
||||
>`concurrency`: number
|
||||
|
||||
> `concurrency`: number
|
||||
|
||||
最大并发连接数。最小值 `1`,最大值 `1024`,默认值 `8`。
|
||||
|
||||
|
||||
@@ -4,38 +4,38 @@
|
||||
|
||||
## 协议列表
|
||||
|
||||
>[Blackhole](./blackhole.md)
|
||||
> [Blackhole](./blackhole.md)
|
||||
|
||||
Blackhole(黑洞)是一个出站数据协议,它会阻碍所有数据的出站,配合 [路由(Routing)](../routing.md) 一起使用,可以达到禁止访问某些网站的效果。
|
||||
|
||||
>[DNS](./dns.md)
|
||||
> [DNS](./dns.md)
|
||||
|
||||
DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。此出站协议只能接收 DNS 流量(包含基于 UDP 和 TCP 协议的查询),其它类型的流量会导致错误。
|
||||
|
||||
>[Freedom](./freedom.md)
|
||||
> [Freedom](./freedom.md)
|
||||
|
||||
Freedom 是一个出站协议,可以用来向任意网络发送(正常的) TCP 或 UDP 数据。
|
||||
|
||||
>[HTTP](./http.md)
|
||||
> [HTTP](./http.md)
|
||||
|
||||
HTTP 协议
|
||||
|
||||
>[Socks](./socks.md)
|
||||
> [Socks](./socks.md)
|
||||
|
||||
标准 Socks 协议实现,兼容 [Socks 4](http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol)、Socks 4a 和 [Socks 5](http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol)。
|
||||
|
||||
>[VLESS](./vless.md)
|
||||
> [VLESS](./vless.md)
|
||||
|
||||
VLESS 是一个无状态的轻量传输协议,可以作为 Xray 客户端和服务器之间的桥梁。
|
||||
|
||||
>[VMess](./vmess.md)
|
||||
> [VMess](./vmess.md)
|
||||
|
||||
[VMess](../development/protocols/vmess.md) 是一个加密传输协议,可以作为 Xray 客户端和服务器之间的桥梁。
|
||||
|
||||
>[Trojan](./trojan.md)
|
||||
> [Trojan](./trojan.md)
|
||||
|
||||
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议。
|
||||
|
||||
>[Shadowsocks](./shadowsocks.md)
|
||||
> [Shadowsocks](./shadowsocks.md)
|
||||
|
||||
[Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议。
|
||||
|
||||
@@ -28,4 +28,4 @@ DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。
|
||||
|
||||
修改 DNS 服务器端口。当不指定时,保持来源中指定的端口不变。
|
||||
|
||||
## DNS配置实例 <Badge text="WIP" type="warning"/>
|
||||
## DNS 配置实例 <Badge text="WIP" type="warning"/>
|
||||
|
||||
@@ -15,9 +15,10 @@ Freedom 是一个出站协议,可以用来向任意网络发送(正常的)
|
||||
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
|
||||
|
||||
在目标地址为域名时, 配置相应的值, Freedom 的行为模式如下:
|
||||
- `"AsIs"`: Freedom 通过系统DNS服务器解析获取IP, 向此域名发出连接.
|
||||
- `"UseIP"`、`"UseIPv4"` 和 `"UseIPv6"`: Xray 使用 [内置 DNS 服务器](../dns.md) 解析获取IP, 向此域名发出连接.
|
||||
默认值为 `"AsIs"`。
|
||||
|
||||
- `"AsIs"`: Freedom 通过系统 DNS 服务器解析获取 IP, 向此域名发出连接.
|
||||
- `"UseIP"`、`"UseIPv4"` 和 `"UseIPv6"`: Xray 使用 [内置 DNS 服务器](../dns.md) 解析获取 IP, 向此域名发出连接.
|
||||
默认值为 `"AsIs"`。
|
||||
|
||||
::: tip TIP 1
|
||||
当使用 `"UseIP"` 模式,并且 [出站连接配置](../outbound.md#outboundobject) 中指定了 `sendThrough` 时,Freedom 会根据 `sendThrough` 的值自动判断所需的 IP 类型,IPv4 或 IPv6。
|
||||
|
||||
@@ -7,7 +7,7 @@ HTTP 协议。
|
||||
:::
|
||||
|
||||
::: tip
|
||||
`http` 只能代理 tcp 协议,udp 系的协议均不能通过。
|
||||
`http` 只能代理 tcp 协议,udp 系的协议均不能通过。
|
||||
:::
|
||||
|
||||
## OutboundConfigurationObject
|
||||
|
||||
@@ -72,11 +72,12 @@ Shadowsocks 服务端端口。必填。
|
||||
> `method`: string
|
||||
|
||||
必填。
|
||||
* 推荐的加密方式:
|
||||
* AES-256-GCM
|
||||
* AES-128-GCM
|
||||
* ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
|
||||
* none 或 plain
|
||||
|
||||
- 推荐的加密方式:
|
||||
- AES-256-GCM
|
||||
- AES-128-GCM
|
||||
- ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
|
||||
- none 或 plain
|
||||
|
||||
> `password`: string
|
||||
|
||||
@@ -88,4 +89,4 @@ Shadowsocks 协议不限制密码长度,但短密码会更可能被破解,
|
||||
|
||||
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。
|
||||
|
||||
`level` 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
`level` 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
|
||||
@@ -88,4 +88,4 @@ Socks 服务器列表,其中每一项是一个服务器配置。
|
||||
|
||||
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。
|
||||
|
||||
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
|
||||
@@ -70,13 +70,15 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道
|
||||
- `xtls-rprx-splice-udp443`:同 `xtls-rprx-splice`, 但是放行了目标为 443 端口的 UDP 流量
|
||||
|
||||
::: warning 注意
|
||||
当 `flow` 被指定时,还需要将该出站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../transport.md#streamsettingsobject)。
|
||||
当 `flow` 被指定时,还需要将该出站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../transport.md#streamsettingsobject)。
|
||||
:::
|
||||
|
||||
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
::: tip 关于 xtls-rprx-\*-udp443 流控模式
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
::: tip 关于 xtls-rprx-*-udp443 流控模式
|
||||
启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC),这样应用就不会使用 QUIC 而会使用 TLS,XTLS 才会真正生效。实际上,QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能, 它作为 UDP 流量在通过 Trojan 协议传输时,底层协议为 TCP,就相当于两层 TCP 了。
|
||||
|
||||
若不需要拦截,请在客户端填写 `xtls-rprx-*-udp443`,服务端不变。
|
||||
|
||||
@@ -76,14 +76,15 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
|
||||
|
||||
> `id`: string
|
||||
|
||||
VLESS 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的UUID.
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此UUID是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
|
||||
VLESS 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
|
||||
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
|
||||
其映射标准在 [VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158)
|
||||
|
||||
你可以使用命令 `xray uuid -i "自定义字符串"` 生成自定义字符串所映射的的 UUID,也可以使用命令 `xray uuid` 生成随机的UUID。
|
||||
你可以使用命令 `xray uuid -i "自定义字符串"` 生成自定义字符串所映射的的 UUID,也可以使用命令 `xray uuid` 生成随机的 UUID。
|
||||
|
||||
> `encryption`: "none"
|
||||
|
||||
@@ -107,12 +108,15 @@ VLESS 的用户 ID,可以是任意小于30字节的字符串, 也可以是一
|
||||
- `xtls-rprx-splice-udp443`:同 `xtls-rprx-splice`, 但是放行了目标为 443 端口的 UDP 流量
|
||||
|
||||
::: warning 注意
|
||||
当 `flow` 被指定时,还需要将该出站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../transport.md#streamsettingsobject)。
|
||||
当 `flow` 被指定时,还需要将该出站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../transport.md#streamsettingsobject)。
|
||||
|
||||
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。
|
||||
:::
|
||||
|
||||
::: tip 关于 xtls-rprx-*-udp443 流控模式
|
||||
<!-- prettier-ignore-start -->
|
||||
::: tip 关于 xtls-rprx-*-udp443 流控模式
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC),这样应用就不会使用 QUIC 而会使用 TLS,XTLS 才会真正生效。实际上,QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能,它作为 UDP 流量在通过 VLESS 协议传输时,底层协议为 TCP,就相当于两层 TCP 了。
|
||||
|
||||
若不需要拦截,请在客户端填写 `xtls-rprx-*-udp443`,服务端不变。
|
||||
@@ -132,11 +136,8 @@ Splice 模式的的使用限制:
|
||||
|
||||
需要注意的是,使用 mKCP 协议时不会使用 Splice(是的,虽然没有报错,但实际上根本没用到)。
|
||||
|
||||
|
||||
> `level`: number
|
||||
|
||||
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。
|
||||
|
||||
level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
|
||||
|
||||
> `vnext`:\[ [ServerObject](#serverobject) \]
|
||||
|
||||
一个数组,包含一组的服务端配置.
|
||||
一个数组,包含一组的服务端配置.
|
||||
|
||||
其中每一项是一个服务端配置[ServerObject](#serverobject)。
|
||||
|
||||
@@ -57,8 +57,6 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
|
||||
|
||||
其中每一项是一个用户[UserObject](#userobject)。
|
||||
|
||||
|
||||
|
||||
#### UserObject
|
||||
|
||||
```json
|
||||
@@ -72,15 +70,16 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
|
||||
|
||||
> `id`:string
|
||||
|
||||
Vmess 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的UUID.
|
||||
Vmess 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
|
||||
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
|
||||
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
|
||||
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即
|
||||
- 写 `"id": "我爱🍉老师1314"`,
|
||||
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此UUID是 `我爱🍉老师1314` 的 UUID 映射)
|
||||
|
||||
其映射标准在 [VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158)
|
||||
|
||||
你可以使用命令 `xray uuid -i "自定义字符串"` 生成自定义字符串所映射的的 UUID, 也可以使用命令 `xray uuid` 生成随机的UUID。
|
||||
你可以使用命令 `xray uuid -i "自定义字符串"` 生成自定义字符串所映射的的 UUID, 也可以使用命令 `xray uuid` 生成随机的 UUID。
|
||||
|
||||
> `alterId`:number
|
||||
|
||||
@@ -100,7 +99,7 @@ Vmess 的用户 ID,可以是任意小于30字节的字符串, 也可以是一
|
||||
|
||||
level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
|
||||
|
||||
> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
|
||||
> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
|
||||
|
||||
加密方式,客户端将使用配置的加密方式发送数据,服务器端自动识别,无需配置。
|
||||
|
||||
@@ -108,6 +107,7 @@ level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。
|
||||
- `"chacha20-poly1305"`:推荐在手机端使用
|
||||
- `"auto"`:默认值,自动选择(运行框架为 AMD64、ARM64 或 s390x 时为 aes-128-gcm 加密方式,其他情况则为 Chacha20-Poly1305 加密方式)
|
||||
- `"none"`:不加密
|
||||
|
||||
* `"zero"`:不加密,也不进行消息认证 (v1.4.0+)
|
||||
|
||||
::: tip
|
||||
@@ -121,4 +121,4 @@ level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。
|
||||
如果使用 CDN 或其他会解密 TLS 的中转平台或网络环境建立连接,不建议使用 `"none"` `"zero"` 伪加密方式。
|
||||
|
||||
无论使用哪种加密方式, VMess 的包头都会受到加密和认证的保护。
|
||||
:::
|
||||
:::
|
||||
|
||||
+33
-31
@@ -29,7 +29,8 @@
|
||||
}
|
||||
}
|
||||
```
|
||||
>`level`: map{string: [LevelPolicyObject](#levelpolicyobject)}
|
||||
|
||||
> `level`: map{string: [LevelPolicyObject](#levelpolicyobject)}
|
||||
|
||||
一组键值对,每个键是一个字符串形式的数字(JSON 的要求),比如 `"0"`、`"1"` 等,双引号不能省略,此数字对应用户等级。每一个值是一个 [LevelPolicyObject](#levelpolicyobject).
|
||||
|
||||
@@ -37,37 +38,37 @@
|
||||
每个入站出站代理现在都可以设置用户等级,Xray 会根据实际的用户等级应用不同的本地策略。
|
||||
:::
|
||||
|
||||
>`system`: [SystemPolicyObject](#systempolicyobject)
|
||||
|
||||
Xray系统级别的策略
|
||||
> `system`: [SystemPolicyObject](#systempolicyobject)
|
||||
|
||||
Xray 系统级别的策略
|
||||
|
||||
### LevelPolicyObject
|
||||
|
||||
```json
|
||||
{
|
||||
"handshake": 4,
|
||||
"connIdle": 300,
|
||||
"uplinkOnly": 2,
|
||||
"downlinkOnly": 5,
|
||||
"statsUserUplink": false,
|
||||
"statsUserDownlink": false,
|
||||
"bufferSize": 10240
|
||||
"handshake": 4,
|
||||
"connIdle": 300,
|
||||
"uplinkOnly": 2,
|
||||
"downlinkOnly": 5,
|
||||
"statsUserUplink": false,
|
||||
"statsUserDownlink": false,
|
||||
"bufferSize": 10240
|
||||
}
|
||||
```
|
||||
>`handshake`: number
|
||||
|
||||
> `handshake`: number
|
||||
|
||||
连接建立时的握手时间限制。单位为秒。默认值为 `4`。在入站代理处理一个新连接时,在握手阶段如果使用的时间超过这个时间,则中断该连接。
|
||||
|
||||
>`connIdle`: number
|
||||
> `connIdle`: number
|
||||
|
||||
连接空闲的时间限制。单位为秒。默认值为 `300`。inbound/outbound处理一个连接时,如果在 `connIdle` 时间内,没有任何数据被传输(包括上行和下行数据),则中断该连接。
|
||||
连接空闲的时间限制。单位为秒。默认值为 `300`。inbound/outbound 处理一个连接时,如果在 `connIdle` 时间内,没有任何数据被传输(包括上行和下行数据),则中断该连接。
|
||||
|
||||
>`uplinkOnly`: number
|
||||
> `uplinkOnly`: number
|
||||
|
||||
当连接下行线路关闭后的时间限制。单位为秒。默认值为 `2`。当服务器(如远端网站)关闭下行连接时,出站代理会在等待 `uplinkOnly` 时间后中断连接。
|
||||
|
||||
>`downlinkOnly`: number
|
||||
> `downlinkOnly`: number
|
||||
|
||||
当连接上行线路关闭后的时间限制。单位为秒。默认值为 `5`。当客户端(如浏览器)关闭上行连接时,入站代理会在等待 `downlinkOnly` 时间后中断连接。
|
||||
|
||||
@@ -75,46 +76,47 @@ Xray系统级别的策略
|
||||
在 HTTP 浏览的场景中,可以将 `uplinkOnly` 和 `downlinkOnly` 设为 `0`,以提高连接关闭的效率。
|
||||
:::
|
||||
|
||||
>`statsUserUplink`: true | false
|
||||
> `statsUserUplink`: true | false
|
||||
|
||||
当值为 `true` 时,开启当前等级的所有用户的上行流量统计。
|
||||
|
||||
>`statsUserDownlink`: true | false
|
||||
> `statsUserDownlink`: true | false
|
||||
|
||||
当值为 `true` 时,开启当前等级的所有用户的下行流量统计。
|
||||
|
||||
>`bufferSize`: number
|
||||
> `bufferSize`: number
|
||||
|
||||
每个连接的内部缓存大小。单位为 kB。当值为 `0` 时,内部缓存被禁用。
|
||||
|
||||
默认值:
|
||||
* 在 ARM、MIPS、MIPSLE 平台上,默认值为 `0`。
|
||||
* 在 ARM64、MIPS64、MIPS64LE 平台上,默认值为 `4`。
|
||||
* 在其它平台上,默认值为 `512`。
|
||||
默认值:
|
||||
|
||||
- 在 ARM、MIPS、MIPSLE 平台上,默认值为 `0`。
|
||||
- 在 ARM64、MIPS64、MIPS64LE 平台上,默认值为 `4`。
|
||||
- 在其它平台上,默认值为 `512`。
|
||||
|
||||
### SystemPolicyObject
|
||||
|
||||
```json
|
||||
{
|
||||
"statsInboundUplink": false,
|
||||
"statsInboundDownlink": false,
|
||||
"statsOutboundUplink": false,
|
||||
"statsOutboundDownlink": false
|
||||
"statsInboundUplink": false,
|
||||
"statsInboundDownlink": false,
|
||||
"statsOutboundUplink": false,
|
||||
"statsOutboundDownlink": false
|
||||
}
|
||||
```
|
||||
|
||||
>`statsInboundUplink`: true | false
|
||||
> `statsInboundUplink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有入站代理的上行流量统计。
|
||||
|
||||
>`statsInboundDownlink`: true | false
|
||||
> `statsInboundDownlink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有入站代理的下行流量统计。
|
||||
|
||||
>`statsOutboundUplink`: true | false
|
||||
> `statsOutboundUplink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有出站代理的上行流量统计。
|
||||
|
||||
>`statsOutboundDownlink`: true | false
|
||||
> `statsOutboundDownlink`: true | false
|
||||
|
||||
当值为 `true` 时,开启所有出站代理的下行流量统计。
|
||||
|
||||
+66
-78
@@ -4,21 +4,20 @@
|
||||
|
||||
反向代理的大致工作原理如下:
|
||||
|
||||
* 假设在主机 A 中有一个网页服务器,这台主机没有公网 IP,无法在公网上直接访问。另有一台主机 B,它可以由公网访问。现在我们需要把 B 作为入口,把流量从 B 转发到 A。
|
||||
* 在主机 A 中配置 Xray,称为`bridge`,在 B 中也配置 Xray,称为 `portal`。
|
||||
* `bridge` 会向 `portal` 主动建立连接,此连接的目标地址可以自行设定。`portal` 会收到两种连接,一是由 `bridge` 发来的连接,二是公网用户发来的连接。`portal` 会自动将两类连接合并。于是 `bridge` 就可以收到公网流量了。
|
||||
* `bridge` 在收到公网流量之后,会将其原封不动地发给主机 A 中的网页服务器。当然,这一步需要路由的协作。
|
||||
* `bridge` 会根据流量的大小进行动态的负载均衡。
|
||||
- 假设在主机 A 中有一个网页服务器,这台主机没有公网 IP,无法在公网上直接访问。另有一台主机 B,它可以由公网访问。现在我们需要把 B 作为入口,把流量从 B 转发到 A。
|
||||
- 在主机 A 中配置 Xray,称为`bridge`,在 B 中也配置 Xray,称为 `portal`。
|
||||
- `bridge` 会向 `portal` 主动建立连接,此连接的目标地址可以自行设定。`portal` 会收到两种连接,一是由 `bridge` 发来的连接,二是公网用户发来的连接。`portal` 会自动将两类连接合并。于是 `bridge` 就可以收到公网流量了。
|
||||
- `bridge` 在收到公网流量之后,会将其原封不动地发给主机 A 中的网页服务器。当然,这一步需要路由的协作。
|
||||
- `bridge` 会根据流量的大小进行动态的负载均衡。
|
||||
|
||||
::: tip
|
||||
反向代理默认已开启 [Mux](../../development/protocols/muxcool/),请不要在其用到的outbound上再次开启 Mux。
|
||||
反向代理默认已开启 [Mux](../../development/protocols/muxcool/),请不要在其用到的 outbound 上再次开启 Mux。
|
||||
:::
|
||||
|
||||
::: warning
|
||||
反向代理功能尚处于测试阶段,可能会有一些问题。
|
||||
:::
|
||||
|
||||
|
||||
## ReverseObject
|
||||
|
||||
`ReverseObject` 对应配置文件的 `reverse` 项。
|
||||
@@ -44,53 +43,45 @@
|
||||
|
||||
> `bridges`: \[[BridgeObject](#bridgeobject)\]
|
||||
|
||||
|
||||
数组,每一项表示一个 `bridge`。每个 `bridge` 的配置是一个 [BridgeObject](#bridgeobject)。
|
||||
|
||||
> `portals`: \[[PortalObject](#portalobject)\]
|
||||
|
||||
|
||||
数组,每一项表示一个 `portal`。每个 `portal` 的配置是一个 [PortalObject](#bridgeobject)。
|
||||
|
||||
|
||||
### BridgeObject
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
```
|
||||
|
||||
> `tag`: string
|
||||
|
||||
|
||||
所有由 `bridge` 发出的连接,都会带有这个标识。可以在 [路由配置](./routing.md) 中使用 `inboundTag` 进行识别。
|
||||
|
||||
> `domain`: string
|
||||
|
||||
|
||||
指定一个域名,`bridge` 向 `portal` 建立的连接,都会使用这个域名进行发送。
|
||||
这个域名只作为 `bridge` 和 `portal` 的通信用途,不必真实存在。
|
||||
|
||||
|
||||
### PortalObject
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "test.xray.com"
|
||||
"tag": "portal",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
```
|
||||
|
||||
> `tag`: string
|
||||
|
||||
|
||||
`portal` 的标识。在 [路由配置](./routing.md) 中使用 `outboundTag` 将流量转发到这个 `portal`。
|
||||
`portal` 的标识。在 [路由配置](./routing.md) 中使用 `outboundTag` 将流量转发到这个 `portal`。
|
||||
|
||||
> `domain`: string
|
||||
|
||||
|
||||
一个域名。当 `portal` 接收到流量时,如果流量的目标域名是此域名,则 `portal` 认为当前连接上 `bridge` 发来的通信连接。而其它流量则会被当成需要转发的流量。`portal` 所做的工作就是把这两类连接进行识别并拼接。
|
||||
|
||||
::: tip
|
||||
@@ -99,12 +90,11 @@
|
||||
|
||||
## 完整配置样例
|
||||
|
||||
|
||||
::: tip
|
||||
在运行过程中,建议先启用 `bridge`,再启用 `portal`。
|
||||
:::
|
||||
|
||||
### bridge配置
|
||||
### bridge 配置
|
||||
|
||||
`bridge` 通常需要两个 outbound,一个用于连接 `portal`,另一个用于发送实际的流量。也就是说,你需要用路由区分两种流量。
|
||||
|
||||
@@ -112,42 +102,42 @@
|
||||
|
||||
```json
|
||||
{
|
||||
"bridges": [
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
]
|
||||
"bridges": [
|
||||
{
|
||||
"tag": "bridge",
|
||||
"domain": "test.xray.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
outbound:
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "out",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"redirect": "127.0.0.1:80" // 将所有流量转发到网页服务器
|
||||
}
|
||||
({
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"vnext": [
|
||||
{
|
||||
"address": "portal 的 IP 地址",
|
||||
"port": 1024,
|
||||
"users": [
|
||||
{
|
||||
"id": "5783a3e7-e373-51cd-8642-c83782b807c5"
|
||||
}
|
||||
]
|
||||
},
|
||||
"tag": "interconn"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tag": "interconn"
|
||||
})
|
||||
```
|
||||
|
||||
路由配置:
|
||||
@@ -176,8 +166,7 @@ outbound:
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### portal配置
|
||||
### portal 配置
|
||||
|
||||
`portal` 通常需要两个 inbound,一个用于接收 `bridge` 的连接,另一个用于接收实际的流量。同时你也需要用路由区分两种流量。
|
||||
|
||||
@@ -185,40 +174,40 @@ outbound:
|
||||
|
||||
```json
|
||||
{
|
||||
"portals": [
|
||||
{
|
||||
"tag": "portal",
|
||||
"domain": "test.xray.com" // 必须和 bridge 的配置一样
|
||||
}
|
||||
]
|
||||
"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"
|
||||
}
|
||||
({
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
"port": 1024, // 用于接收 bridge 的连接
|
||||
"tag": "interconn",
|
||||
"protocol": "vmess",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "5783a3e7-e373-51cd-8642-c83782b807c5"
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
路由配置:
|
||||
@@ -243,4 +232,3 @@ inbound:
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+80
-104
@@ -17,149 +17,127 @@
|
||||
}
|
||||
}
|
||||
```
|
||||
>`domainStrategy`: "AsIs" | "IPIfNonMatch" | "IPOnDemand"
|
||||
|
||||
> `domainStrategy`: "AsIs" | "IPIfNonMatch" | "IPOnDemand"
|
||||
|
||||
域名解析策略,根据不同的设置使用不同的策略。
|
||||
|
||||
* `"AsIs"`:只使用域名进行路由选择。默认值。
|
||||
* `"IPIfNonMatch"`:当域名没有匹配任何规则时,将域名解析成 IP(A 记录或 AAAA 记录)再次进行匹配;
|
||||
* 当一个域名有多个 A 记录时,会尝试匹配所有的 A 记录,直到其中一个与某个规则匹配为止;
|
||||
* 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名;
|
||||
* `"IPOnDemand"`:当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
|
||||
- `"AsIs"`:只使用域名进行路由选择。默认值。
|
||||
- `"IPIfNonMatch"`:当域名没有匹配任何规则时,将域名解析成 IP(A 记录或 AAAA 记录)再次进行匹配;
|
||||
- 当一个域名有多个 A 记录时,会尝试匹配所有的 A 记录,直到其中一个与某个规则匹配为止;
|
||||
- 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名;
|
||||
- `"IPOnDemand"`:当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
|
||||
|
||||
>`rules`: \[[RuleObject](#ruleobject)\]
|
||||
> `rules`: \[[RuleObject](#ruleobject)\]
|
||||
|
||||
对应一个数组,数组中每一项是一个规则。
|
||||
|
||||
对于每一个连接,路由将根据这些规则依次进行判断,当一个规则生效时,即将这个连接转发至它所指定的 `outboundTag`或 `balancerTag`。
|
||||
|
||||
::: tip
|
||||
当没有匹配到任何规则时,流量默认由第一个outbound发出。
|
||||
当没有匹配到任何规则时,流量默认由第一个 outbound 发出。
|
||||
:::
|
||||
|
||||
>`balancers`: \[ [BalancerObject](#balancerobject) \]
|
||||
|
||||
> `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"
|
||||
"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"
|
||||
> `type`: "field"
|
||||
|
||||
目前只支持`"field"`这一个选项。
|
||||
|
||||
>`domain`: \[string\]
|
||||
> `domain`: \[string\]
|
||||
|
||||
一个数组,数组每一项是一个域名的匹配。有以下几种形式:
|
||||
|
||||
* 纯字符串:当此字符串匹配目标域名中任意部分,该规则生效。比如 "sina.com" 可以匹配 "sina.com"、"sina.com.cn" 和 "www.sina.com",但不匹配 "sina.cn"。
|
||||
* 正则表达式:由 `"regexp:"` 开始,余下部分是一个正则表达式。当此正则表达式匹配目标域名时,该规则生效。例如 "regexp:\\\\.goo.*\\\\.com$" 匹配 "www.google.com" 或 "fonts.googleapis.com",但不匹配 "google.com"。
|
||||
* 子域名(推荐):由 `"domain:"` 开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如 "domain:xray.com" 匹配 "www.xray.com"、"xray.com",但不匹配 "wxray.com"。
|
||||
* 完整匹配:由 `"full:"` 开始,余下部分是一个域名。当此域名完整匹配目标域名时,该规则生效。例如 "full:xray.com" 匹配 "xray.com" 但不匹配 "www.xray.com"。
|
||||
* 预定义域名列表:由 `"geosite:"` 开头,余下部分是一个名称,如 `geosite:google` 或者 `geosite:cn`。名称及域名列表参考 [预定义域名列表](#预定义域名列表)。
|
||||
* 从文件中加载域名:形如 `"ext:file:tag"`,必须以 `ext:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](./features/env.md#资源文件路径) 中,文件格式与 `geosite.dat` 相同,标签必须在文件中存在。
|
||||
- 纯字符串:当此字符串匹配目标域名中任意部分,该规则生效。比如 "sina.com" 可以匹配 "sina.com"、"sina.com.cn" 和 "www.sina.com",但不匹配 "sina.cn"。
|
||||
- 正则表达式:由 `"regexp:"` 开始,余下部分是一个正则表达式。当此正则表达式匹配目标域名时,该规则生效。例如 "regexp:\\\\.goo.\*\\\\.com\$" 匹配 "www.google.com" 或 "fonts.googleapis.com",但不匹配 "google.com"。
|
||||
- 子域名(推荐):由 `"domain:"` 开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如 "domain:xray.com" 匹配 "www.xray.com"、"xray.com",但不匹配 "wxray.com"。
|
||||
- 完整匹配:由 `"full:"` 开始,余下部分是一个域名。当此域名完整匹配目标域名时,该规则生效。例如 "full:xray.com" 匹配 "xray.com" 但不匹配 "www.xray.com"。
|
||||
- 预定义域名列表:由 `"geosite:"` 开头,余下部分是一个名称,如 `geosite:google` 或者 `geosite:cn`。名称及域名列表参考 [预定义域名列表](#预定义域名列表)。
|
||||
- 从文件中加载域名:形如 `"ext:file:tag"`,必须以 `ext:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](./features/env.md#资源文件路径) 中,文件格式与 `geosite.dat` 相同,标签必须在文件中存在。
|
||||
|
||||
::: tip
|
||||
`"ext:geoip.dat:cn"` 等价于 `"geoip:cn"`
|
||||
:::
|
||||
|
||||
>`ip`: \[string\]
|
||||
> `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:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](./features/env.md#资源文件路径) 中,文件格式与 `geoip.dat` 相同标签必须在文件中存在。
|
||||
- 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:`(小写)开头,后面跟文件名和标签,文件存放在 [资源目录](./features/env.md#资源文件路径) 中,文件格式与 `geoip.dat` 相同标签必须在文件中存在。
|
||||
|
||||
>`port`:number | string
|
||||
> `port`:number | string
|
||||
|
||||
目标端口范围,有三种形式:
|
||||
|
||||
* `"a-b"`:a 和 b 均为正整数,且小于 65536。这个范围是一个前后闭合区间,当目标端口落在此范围内时,此规则生效。
|
||||
* `a`:a 为正整数,且小于 65536。当目标端口为 a 时,此规则生效。
|
||||
* 以上两种形式的混合,以逗号 "," 分隔。形如:`"53,443,1000-2000"`。
|
||||
- `"a-b"`:a 和 b 均为正整数,且小于 65536。这个范围是一个前后闭合区间,当目标端口落在此范围内时,此规则生效。
|
||||
- `a`:a 为正整数,且小于 65536。当目标端口为 a 时,此规则生效。
|
||||
- 以上两种形式的混合,以逗号 "," 分隔。形如:`"53,443,1000-2000"`。
|
||||
|
||||
>`sourcePort`:number | string
|
||||
> `sourcePort`:number | string
|
||||
|
||||
来源端口,有三种形式:
|
||||
|
||||
* `"a-b"`:a 和 b 均为正整数,且小于 65536。这个范围是一个前后闭合区间,当目标端口落在此范围内时,此规则生效。
|
||||
* `a`:a 为正整数,且小于 65536。当目标端口为 a 时,此规则生效。
|
||||
* 以上两种形式的混合,以逗号 "," 分隔。形如:`"53,443,1000-2000"`。
|
||||
- `"a-b"`:a 和 b 均为正整数,且小于 65536。这个范围是一个前后闭合区间,当目标端口落在此范围内时,此规则生效。
|
||||
- `a`:a 为正整数,且小于 65536。当目标端口为 a 时,此规则生效。
|
||||
- 以上两种形式的混合,以逗号 "," 分隔。形如:`"53,443,1000-2000"`。
|
||||
|
||||
>`network`: "tcp" | "udp" | "tcp,udp"
|
||||
> `network`: "tcp" | "udp" | "tcp,udp"
|
||||
|
||||
可选的值有 "tcp"、"udp" 或 "tcp,udp",当连接方式是指定的方式时,此规则生效。
|
||||
|
||||
>`source`: \[string\]
|
||||
> `source`: \[string\]
|
||||
|
||||
一个数组,数组内每一项代表一个 IP 范围,形式有 IP、CIDR、GeoIP 和从文件中加载 IP。当某一项匹配来源 IP 时,此规则生效。
|
||||
|
||||
>`user`: \[string\]
|
||||
> `user`: \[string\]
|
||||
|
||||
一个数组,数组内每一项是一个邮箱地址。当某一项匹配来源用户时,此规则生效。
|
||||
|
||||
>`inboundTag`: \[string\]
|
||||
> `inboundTag`: \[string\]
|
||||
|
||||
一个数组,数组内每一项是一个标识。当某一项匹配入站协议的标识时,此规则生效。
|
||||
|
||||
>`protocol`: \[ "http" | "tls" | "bittorrent" \]
|
||||
> `protocol`: \[ "http" | "tls" | "bittorrent" \]
|
||||
|
||||
一个数组,数组内每一项表示一种协议。当某一个协议匹配当前连接的协议类型时,此规则生效。
|
||||
|
||||
::: tip
|
||||
必须开启入站代理中的 `sniffing` 选项, 才能嗅探出连接所使用的协议类型.
|
||||
必须开启入站代理中的 `sniffing` 选项, 才能嗅探出连接所使用的协议类型.
|
||||
:::
|
||||
|
||||
>`attrs`: string
|
||||
> `attrs`: string
|
||||
|
||||
一段脚本,用于检测流量的属性值。当此脚本返回真值时,此规则生效。
|
||||
|
||||
@@ -169,17 +147,17 @@
|
||||
|
||||
示例:
|
||||
|
||||
* 检测 HTTP GET:`"attrs[':method'] == 'GET'"`
|
||||
* 检测 HTTP Path:`"attrs[':path'].startswith('/test')"`
|
||||
* 检测 Content Type:`"attrs['accept'].index('text/html') >= 0"`
|
||||
- 检测 HTTP GET:`"attrs[':method'] == 'GET'"`
|
||||
- 检测 HTTP Path:`"attrs[':path'].startswith('/test')"`
|
||||
- 检测 Content Type:`"attrs['accept'].index('text/html') >= 0"`
|
||||
|
||||
>`outboundTag`: string
|
||||
> `outboundTag`: string
|
||||
|
||||
对应一个outbound的标识。
|
||||
对应一个 outbound 的标识。
|
||||
|
||||
>`balancerTag`: string
|
||||
> `balancerTag`: string
|
||||
|
||||
对应一个Balancer的标识。
|
||||
对应一个 Balancer 的标识。
|
||||
|
||||
::: tip
|
||||
`balancerTag` 和 `outboundTag` 须二选一。当同时指定时,`outboundTag` 生效。
|
||||
@@ -187,26 +165,24 @@
|
||||
|
||||
### BalancerObject
|
||||
|
||||
负载均衡器配置。当一个负载均衡器生效时,它会从指定的outbound中,按配置选出一个最合适的outbound,进行流量转发。
|
||||
负载均衡器配置。当一个负载均衡器生效时,它会从指定的 outbound 中,按配置选出一个最合适的 outbound,进行流量转发。
|
||||
|
||||
```json
|
||||
{
|
||||
"tag": "balancer",
|
||||
"selector": []
|
||||
"tag": "balancer",
|
||||
"selector": []
|
||||
}
|
||||
```
|
||||
|
||||
>`tag`: string
|
||||
> `tag`: string
|
||||
|
||||
此负载均衡器的标识,用于匹配 `RuleObject` 中的 `balancerTag`。
|
||||
|
||||
>`selector`: \[ string \]
|
||||
> `selector`: \[ string \]
|
||||
|
||||
一个字符串数组,其中每一个字符串将用于和 outbound 标识的前缀匹配。在以下几个 outbound 标识中:`[ "a", "ab", "c", "ba" ]`,`"selector": ["a"]` 将匹配到 `[ "a", "ab" ]`。
|
||||
|
||||
一个字符串数组,其中每一个字符串将用于和outbound标识的前缀匹配。在以下几个outbound标识中:`[ "a", "ab", "c", "ba" ]`,`"selector": ["a"]` 将匹配到 `[ "a", "ab" ]`。
|
||||
|
||||
如果匹配到多个outbound,负载均衡器目前会从中随机选出一个作为最终的outbound。
|
||||
|
||||
如果匹配到多个 outbound,负载均衡器目前会从中随机选出一个作为最终的 outbound。
|
||||
|
||||
### 预定义域名列表
|
||||
|
||||
@@ -214,16 +190,16 @@
|
||||
|
||||
常见的域名有:
|
||||
|
||||
* `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`(加拿大)等结尾的域名。
|
||||
- `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`(加拿大)等结尾的域名。
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
开启了统计以后, 只需在 [Policy](./policy.md) 中开启对应的项,就可以统计对应的数据。
|
||||
|
||||
|
||||
## 获取统计信息
|
||||
|
||||
可以用 `xray api` 的相关命令获取统计信息.
|
||||
@@ -29,7 +28,7 @@
|
||||
|
||||
特定用户的上行流量,单位字节。
|
||||
|
||||
- `user>>>[email]>>>traffic>>>downlink`
|
||||
- `user>>>[email]>>>traffic>>>downlink`
|
||||
|
||||
特定用户的下行流量,单位字节。
|
||||
|
||||
@@ -37,21 +36,20 @@
|
||||
如果对应用户没有指定 Email,则不会开启统计。
|
||||
:::
|
||||
|
||||
|
||||
- 全局数据
|
||||
|
||||
- `inbound>>>[tag]>>>traffic>>>uplink`
|
||||
|
||||
特定inbound的上行流量,单位字节。
|
||||
特定 inbound 的上行流量,单位字节。
|
||||
|
||||
- `inbound>>>[tag]>>>traffic>>>downlink`
|
||||
|
||||
特定inbound的下行流量,单位字节。
|
||||
特定 inbound 的下行流量,单位字节。
|
||||
|
||||
- `outbound>>>[tag]>>>traffic>>>uplink`
|
||||
|
||||
特定outbound的上行流量,单位字节。
|
||||
特定 outbound 的上行流量,单位字节。
|
||||
|
||||
- `outbound>>>[tag]>>>traffic>>>downlink`
|
||||
|
||||
特定outbound的下行流量,单位字节。
|
||||
特定 outbound 的下行流量,单位字节。
|
||||
|
||||
+156
-159
@@ -4,12 +4,13 @@
|
||||
|
||||
传输方式指定了稳定的数据传输的方式。通常来说,一个网络连接的两端需要有对称的传输方式。比如一端用了 WebSocket,那么另一个端也必须使用 WebSocket,否则无法建立连接。
|
||||
|
||||
传输方式(transport)配置有两部分:
|
||||
传输方式(transport)配置有两部分:
|
||||
|
||||
1. 全局配置([TransportObject](#transportobject))
|
||||
2. 局部配置([StreamSettingsObject](#streamsettingsobject))。
|
||||
- 局部配置时,可以指定每个单独的入站或出站用怎样的方式传输。
|
||||
- 通常来说客户端和服务器对应的入站和出站需要使用同样的传输方式。当其配置指定了一种传输方式,但没有填写具体设置时,此传输方式会使用全局配置中的设置。
|
||||
|
||||
- 局部配置时,可以指定每个单独的入站或出站用怎样的方式传输。
|
||||
- 通常来说客户端和服务器对应的入站和出站需要使用同样的传输方式。当其配置指定了一种传输方式,但没有填写具体设置时,此传输方式会使用全局配置中的设置。
|
||||
|
||||
## TransportObject
|
||||
|
||||
@@ -57,172 +58,168 @@
|
||||
|
||||
针对 Domain Socket 连接的配置。
|
||||
|
||||
|
||||
## StreamSettingsObject
|
||||
|
||||
`StreamSettingsObject` 对应入站或出站中的 `streamSettings` 项。每一个入站或出站都可以分别配置不同的传输配置,都可以设置 `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",
|
||||
"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"
|
||||
> `network`: "tcp" | "kcp" | "ws" | "http" | "domainsocket" | "quic"
|
||||
|
||||
连接的数据流所使用的传输方式类型,默认值为 `"tcp"`
|
||||
|
||||
> `security`: "none" | "tls" | "xtls"
|
||||
> `security`: "none" | "tls" | "xtls"
|
||||
|
||||
是否启用传输层加密,支持的选项有
|
||||
|
||||
是否启用传输层加密,支持的选项有
|
||||
- `"none"` 表示不加密(默认值)
|
||||
- `"tls"` 表示使用 [TLS](https://en.wikipedia.org/wiki/base/transport_Layer_Security)。
|
||||
- `"xtls"` 表示使用 [XTLS](../features/xtls.md)。
|
||||
|
||||
> `tlsSettings`: [TLSObject](#tlsobject)
|
||||
> `tlsSettings`: [TLSObject](#tlsobject)
|
||||
|
||||
TLS 配置。TLS 由 Golang 提供,通常情况下TLS协商的结果为使用 TLS 1.3,不支持 DTLS。
|
||||
TLS 配置。TLS 由 Golang 提供,通常情况下 TLS 协商的结果为使用 TLS 1.3,不支持 DTLS。
|
||||
|
||||
> `xtlsSettings`: [XTLSObject](#tlsobject)
|
||||
> `xtlsSettings`: [XTLSObject](#tlsobject)
|
||||
|
||||
XTLS 配置。XTLS 是 Xray 的原创黑科技, 也是使 Xray 性能一骑绝尘的核心动力。
|
||||
XTLS 与 TLS 有相同的安全性, 配置方式也和TLS一致. 点击此处查看 [XTLS的技术细节剖析](../features/xtls.md)
|
||||
XTLS 与 TLS 有相同的安全性, 配置方式也和 TLS 一致. 点击此处查看 [XTLS 的技术细节剖析](../features/xtls.md)
|
||||
|
||||
::: danger
|
||||
TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型和正常上网具有一致性。
|
||||
启用 XTLS 并且配置合适的XTLS流控模式, 可以在保持和 TLS 相同的安全性的前提下, 性能达到数倍甚至十几倍的提升。
|
||||
启用 XTLS 并且配置合适的 XTLS 流控模式, 可以在保持和 TLS 相同的安全性的前提下, 性能达到数倍甚至十几倍的提升。
|
||||
当 `security` 的值从 `tls` 改为 `xtls` 时, 只需将 `tlsSettings` 修改成为 `xtlsSettings`
|
||||
:::
|
||||
|
||||
> `tcpSettings`: [TcpObject](./transports/tcp.md)
|
||||
> `tcpSettings`: [TcpObject](./transports/tcp.md)
|
||||
|
||||
当前连接的 TCP 配置,仅当此连接使用 TCP 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
|
||||
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
|
||||
|
||||
当前连接的 mKCP 配置,仅当此连接使用 mKCP 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
|
||||
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
|
||||
|
||||
当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `httpSettings`: [HttpObject](./transports/h2.md)
|
||||
> `httpSettings`: [HttpObject](./transports/h2.md)
|
||||
|
||||
当前连接的 HTTP/2 配置,仅当此连接使用 HTTP/2 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `quicSettings`: [QUICObject](./transports/quic.md)
|
||||
> `quicSettings`: [QUICObject](./transports/quic.md)
|
||||
|
||||
当前连接的 QUIC 配置,仅当此连接使用 QUIC 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
|
||||
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
|
||||
|
||||
当前连接的 gRPC 配置,仅当此连接使用 gRPC 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `dsSettings`: [DomainSocketObject](./transports/domainsocket.md)
|
||||
> `dsSettings`: [DomainSocketObject](./transports/domainsocket.md)
|
||||
|
||||
当前连接的 Domain socket 配置,仅当此连接使用 Domain socket 时有效。配置内容与上面的全局配置相同。
|
||||
|
||||
> `sockopt`: [SockoptObject](#sockoptobject)
|
||||
> `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": "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
|
||||
> `serverName`: string
|
||||
|
||||
指定服务器端证书的域名,在连接由 IP 建立时有用。
|
||||
|
||||
当目标连接由域名指定时,比如在 Socks 入站接收到了域名,或者由 Sniffing 功能探测出了域名,这个域名会自动用于 `serverName`,无须手动配置。
|
||||
|
||||
> `alpn`: \[ string \]
|
||||
> `alpn`: \[ string \]
|
||||
|
||||
一个字符串数组,指定了 TLS 握手时指定的 ALPN 数值。默认值为 `["h2", "http/1.1"]`。
|
||||
|
||||
> `minVersion`: \[ string \]
|
||||
> `minVersion`: \[ string \]
|
||||
|
||||
minVersion为可接受的最小SSL/TLS版本。
|
||||
minVersion 为可接受的最小 SSL/TLS 版本。
|
||||
|
||||
> `maxVersion`: \[ string \]
|
||||
> `maxVersion`: \[ string \]
|
||||
|
||||
maxVersion为可接受的最大SSL/TLS版本。
|
||||
maxVersion 为可接受的最大 SSL/TLS 版本。
|
||||
|
||||
> `preferServerCipherSuites`: true | false
|
||||
> `preferServerCipherSuites`: true | false
|
||||
|
||||
指示服务器选择客户端最喜欢的密码套件 或 服务器最优选的密码套件。
|
||||
|
||||
如果为true则为使用服务器的最优选的密码套件
|
||||
如果为 true 则为使用服务器的最优选的密码套件
|
||||
|
||||
> `cipherSuites`: \[ string \]
|
||||
> `cipherSuites`: \[ string \]
|
||||
|
||||
CipherSuites用于配置受支持的密码套件列表, 每个套件名称之间用:进行分隔.
|
||||
CipherSuites 用于配置受支持的密码套件列表, 每个套件名称之间用:进行分隔.
|
||||
|
||||
你可以在 [这里](https://golang.org/src/crypto/tls/cipher_suites.go#L500 )或 [这里](https://golang.org/src/crypto/tls/cipher_suites.go#L44) 找到golang加密套件的名词和说明
|
||||
你可以在 [这里](https://golang.org/src/crypto/tls/cipher_suites.go#L500)或 [这里](https://golang.org/src/crypto/tls/cipher_suites.go#L44) 找到 golang 加密套件的名词和说明
|
||||
|
||||
::: danger
|
||||
以上两项配置为非必要选项,正常情况下不影响安全性
|
||||
在未配置的情况下golang根据设备自动选择.
|
||||
在未配置的情况下 golang 根据设备自动选择.
|
||||
若不熟悉, 请勿配置此选项, 填写不当引起的问题自行负责
|
||||
:::
|
||||
|
||||
> `allowInsecure`: true | false
|
||||
> `allowInsecure`: true | false
|
||||
|
||||
是否允许不安全连接(仅用于客户端)。默认值为 `false`。
|
||||
|
||||
当值为 `true` 时,Xray 不会检查远端主机所提供的 TLS 证书的有效性。
|
||||
|
||||
::: danger
|
||||
出于安全性考虑,这个选项不应该在实际场景中选择true,否则可能遭受中间人攻击。
|
||||
出于安全性考虑,这个选项不应该在实际场景中选择 true,否则可能遭受中间人攻击。
|
||||
:::
|
||||
|
||||
> `disableSystemRoot`: true | false
|
||||
> `disableSystemRoot`: true | false
|
||||
|
||||
是否禁用操作系统自带的 CA 证书。默认值为 `false`。
|
||||
|
||||
当值为 `true` 时,Xray 只会使用 `certificates` 中指定的证书进行 TLS 握手。当值为 `false` 时,Xray 只会使用操作系统自带的 CA 证书进行 TLS 握手。
|
||||
|
||||
> `enableSessionResumption`: true | false
|
||||
> `enableSessionResumption`: true | false
|
||||
|
||||
此参数的设置为false时, ClientHello 里没有 session_ticket 这个扩展。
|
||||
此参数的设置为 false 时, ClientHello 里没有 session_ticket 这个扩展。
|
||||
通常来讲 go 语言程序的 ClientHello 里并没有用到这个扩展, 因此建议保持默认值。
|
||||
默认值为 `false`。
|
||||
|
||||
> `certificates`: \[ [CertificateObject](#certificateobject) \]
|
||||
> `certificates`: \[ [CertificateObject](#certificateobject) \]
|
||||
|
||||
证书列表,其中每一项表示一个证书(建议 fullchain)。
|
||||
|
||||
@@ -230,76 +227,76 @@ CipherSuites用于配置受支持的密码套件列表, 每个套件名称之间
|
||||
如果要在 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": 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`: number
|
||||
|
||||
ocspStapling 检查更新时间间隔。 单位:秒
|
||||
|
||||
> `usage`: "encipherment" | "verify" | "issue"
|
||||
> `usage`: "encipherment" | "verify" | "issue"
|
||||
|
||||
证书用途,默认值为 `"encipherment"`。
|
||||
|
||||
* `"encipherment"`:证书用于 TLS 认证和加密。
|
||||
* `"verify"`:证书用于验证远端 TLS 的证书。当使用此项时,当前证书必须为 CA 证书。
|
||||
* `"issue"`:证书用于签发其它证书。当使用此项时,当前证书必须为 CA 证书。
|
||||
- `"encipherment"`:证书用于 TLS 认证和加密。
|
||||
- `"verify"`:证书用于验证远端 TLS 的证书。当使用此项时,当前证书必须为 CA 证书。
|
||||
- `"issue"`:证书用于签发其它证书。当使用此项时,当前证书必须为 CA 证书。
|
||||
|
||||
::: tip TIP 1
|
||||
在 Windows 平台上可以将自签名的 CA 证书安装到系统中,即可验证远端 TLS 的证书。
|
||||
@@ -325,75 +322,75 @@ ocspStapling 检查更新时间间隔。 单位:秒
|
||||
如已经拥有一个域名, 可以使用工具便捷的获取免费第三方证书,如[acme.sh](https://github.com/acmesh-official/acme.sh)
|
||||
:::
|
||||
|
||||
> `certificateFile`: string
|
||||
> `certificateFile`: string
|
||||
|
||||
证书文件路径,如使用 OpenSSL 生成,后缀名为 .crt。
|
||||
|
||||
> `certificate`: \[ string \]
|
||||
> `certificate`: \[ string \]
|
||||
|
||||
一个字符串数组,表示证书内容,格式如样例所示。`certificate` 和 `certificateFile` 二者选一。
|
||||
|
||||
> `keyFile`: string
|
||||
> `keyFile`: string
|
||||
|
||||
密钥文件路径,如使用 OpenSSL 生成,后缀名为 .key。目前暂不支持需要密码的 key 文件。
|
||||
|
||||
> `key`: \[ string \]
|
||||
> `key`: \[ string \]
|
||||
|
||||
一个字符串数组,表示密钥内容,格式如样例如示。`key` 和 `keyFile` 二者选一。
|
||||
|
||||
|
||||
### SockoptObject
|
||||
|
||||
```json
|
||||
{
|
||||
"mark": 0,
|
||||
"tcpFastOpen": false,
|
||||
"tproxy": "off",
|
||||
"domainStrategy": "AsIs",
|
||||
"dialerProxy": ""
|
||||
"mark": 0,
|
||||
"tcpFastOpen": false,
|
||||
"tproxy": "off",
|
||||
"domainStrategy": "AsIs",
|
||||
"dialerProxy": ""
|
||||
}
|
||||
```
|
||||
|
||||
> `mark`: number
|
||||
> `mark`: number
|
||||
|
||||
一个整数。当其值非零时,在ountbound连接以此数值上标记 SO_MARK。
|
||||
一个整数。当其值非零时,在 ountbound 连接以此数值上标记 SO_MARK。
|
||||
|
||||
* 仅适用于 Linux 系统。
|
||||
* 需要 CAP_NET_ADMIN 权限。
|
||||
- 仅适用于 Linux 系统。
|
||||
- 需要 CAP_NET_ADMIN 权限。
|
||||
|
||||
> `tcpFastOpen`: true | false
|
||||
> `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。
|
||||
可用于 inbound/ountbound。
|
||||
|
||||
* 仅在以下版本(或更新版本)的操作系统中可用:
|
||||
* Windows 10 (1604)
|
||||
* Mac OS 10.11 / iOS 9
|
||||
* Linux 3.16:系统已默认开启,无需配置。
|
||||
- 仅在以下版本(或更新版本)的操作系统中可用:
|
||||
- Windows 10 (1604)
|
||||
- Mac OS 10.11 / iOS 9
|
||||
- Linux 3.16:系统已默认开启,无需配置。
|
||||
|
||||
> `tproxy`: "redirect" | "tproxy" | "off"
|
||||
> `tproxy`: "redirect" | "tproxy" | "off"
|
||||
|
||||
是否开启透明代理(仅适用于 Linux)。
|
||||
|
||||
* `"redirect"`:使用 Redirect 模式的透明代理。支持所有基于 IPv4/6 的 TCP 和 UDP 连接。
|
||||
* `"tproxy"`:使用 TProxy 模式的透明代理。支持所有基于 IPv4/6 的 TCP 和 UDP 连接。
|
||||
* `"off"`:关闭透明代理。
|
||||
- `"redirect"`:使用 Redirect 模式的透明代理。支持所有基于 IPv4/6 的 TCP 和 UDP 连接。
|
||||
- `"tproxy"`:使用 TProxy 模式的透明代理。支持所有基于 IPv4/6 的 TCP 和 UDP 连接。
|
||||
- `"off"`:关闭透明代理。
|
||||
|
||||
透明代理需要 Root 或 `CAP\_NET\_ADMIN` 权限。
|
||||
|
||||
::: danger
|
||||
当 [Dokodemo-door](../inbounds/dokodemo.md) 中指定了 `followRedirect`为`true`,且 Sockopt设置中的`tproxy` 为空时,Sockopt设置中的`tproxy` 的值会被设为 `"redirect"`。
|
||||
当 [Dokodemo-door](../inbounds/dokodemo.md) 中指定了 `followRedirect`为`true`,且 Sockopt 设置中的`tproxy` 为空时,Sockopt 设置中的`tproxy` 的值会被设为 `"redirect"`。
|
||||
:::
|
||||
|
||||
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
|
||||
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
|
||||
|
||||
在之前的版本中,当 Xray 尝试使用域名建立系统连接时,域名的解析由系统完成,不受 Xray 控制。这导致了在 [非标准Linux环境中无法解析域名](https://github.com/v2ray/v2ray-core/issues/1909) 等问题。为此,Xray 1.3.1 为 Sockopt 引入了 Freedom 中的 domainStrategy,解决了此问题。
|
||||
在之前的版本中,当 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"`: 使用[内置 DNS 服务器](./dns.md)解析获取IP后, 直接向此IP发出连接。
|
||||
|
||||
- `"AsIs"`: 通过系统 DNS 服务器解析获取 IP, 向此域名发出连接。
|
||||
- `"UseIP"`、`"UseIPv4"` 和 `"UseIPv6"`: 使用[内置 DNS 服务器](./dns.md)解析获取 IP 后, 直接向此 IP 发出连接。
|
||||
|
||||
默认值为 `"AsIs"`。
|
||||
|
||||
@@ -405,6 +402,7 @@ ocspStapling 检查更新时间间隔。 单位:秒
|
||||
> Tony: 先有鸡还是先有蛋?
|
||||
|
||||
详细解释:
|
||||
|
||||
1. 触发条件:代理服务器(proxy.com)。内置 DNS 服务器,非 Local 模式。
|
||||
2. Xray 尝试向 proxy.com 建立 TCP 连接 **前** ,通过内置 DNS 服务器查询 proxy.com。
|
||||
3. 内置 DNS 服务器向 dns.com 建立连接,并发送查询,以获取 proxy.com 的 IP。
|
||||
@@ -424,7 +422,7 @@ ocspStapling 检查更新时间间隔。 单位:秒
|
||||
因此,**不建议** 经验不足的用户擅自使用此功能。
|
||||
:::
|
||||
|
||||
> `dialerProxy`: ""
|
||||
> `dialerProxy`: ""
|
||||
|
||||
一个出站代理的标识。当值不为空时,将使用指定的 outbound 发出连接。
|
||||
此选项可用于支持底层传输方式的链式转发。
|
||||
@@ -432,4 +430,3 @@ ocspStapling 检查更新时间间隔。 单位:秒
|
||||
::: danger
|
||||
此选项与 PorxySettingsObject.Tag 不兼容
|
||||
:::
|
||||
|
||||
|
||||
@@ -31,5 +31,3 @@
|
||||
> `grpcSettings`: [GRPCObject](./grpc)
|
||||
|
||||
针对 gRPC 连接的配置。
|
||||
|
||||
|
||||
|
||||
@@ -6,24 +6,27 @@
|
||||
gRPC(HTTP/2)内置多路复用,不建议使用 gRPC 与 HTTP/2 时启用 mux.cool。
|
||||
|
||||
::: warning ⚠⚠⚠
|
||||
|
||||
- 目前,gRPC 不支持指定 serverName (即 Websocket 与 HTTP/2 的 host).请在出站代理地址中填写 **正确的域名** ,或在 `(x)tlsSettings` 中填写 `ServerName` 否则无法连接。
|
||||
- gRPC 不支持回落到其他服务。
|
||||
- gRPC 服务有明显特征,无法抵抗主动探测。建议使用 Caddy 或 Nginx,通过 Path 前置分流。
|
||||
:::
|
||||
:::
|
||||
|
||||
::: tip
|
||||
如果您使用 Caddy 或 Nginx 等反向代理,请注意下列事项:
|
||||
|
||||
- 请确定反向代理服务器开启了 HTTP/2
|
||||
- 请使用 HTTP/2 或 h2c (Caddy),grpc_pass (Nginx) 连接到 Xray。
|
||||
- 普通模式的 Path 为 `/{serviceName}/Tun`, Multi 模式为 `/{serviceName}/TunMulti`
|
||||
:::
|
||||
:::
|
||||
|
||||
::: tip
|
||||
如果你正在使用回落,请注意下列事项:
|
||||
|
||||
- 请确认 (x)tlsSettings.alpn 中 h2 位于第一顺位,否则 gRPC(HTTP/2)可能无法完成 TLS 握手。
|
||||
- gRPC 无法通过进行 Path 分流。
|
||||
- 不建议回落到 gRPC,存在主动探测的风险。
|
||||
:::
|
||||
:::
|
||||
|
||||
## GRPCObject
|
||||
|
||||
@@ -36,7 +39,7 @@ gRPC(HTTP/2)内置多路复用,不建议使用 gRPC 与 HTTP/2 时启用 m
|
||||
}
|
||||
```
|
||||
|
||||
> `serviceName`: string
|
||||
> `serviceName`: string
|
||||
|
||||
一个字符串,指定服务路径,**类似于** HTTP/2 与 WebSocket 中的 Path。
|
||||
客户端会使用此名称进行通信,服务器会验证服务名称是否匹配。
|
||||
|
||||
@@ -15,9 +15,10 @@ HTTP/2 内置多路复用,不建议使用 HTTP/2 时启用 mux.cool。
|
||||
|
||||
::: warning
|
||||
⚠️ 如果你正在使用回落,请注意下列事项:
|
||||
|
||||
- 请确认 (x)tlsSettings.alpn 中包含 h2,否则 HTTP/2 无法完成 TLS 握手。
|
||||
- HTTP/2 无法通过进行 Path 分流,建议使用 SNI 分流。
|
||||
:::
|
||||
:::
|
||||
|
||||
## HttpObject
|
||||
|
||||
|
||||
@@ -14,15 +14,15 @@ Websocket 会识别 HTTP 请求的 X-Forwarded-For 头来覆写流量的源地
|
||||
|
||||
```json
|
||||
{
|
||||
"acceptProxyProtocol": false,
|
||||
"path": "/",
|
||||
"headers": {
|
||||
"Host": "xray.com"
|
||||
}
|
||||
"acceptProxyProtocol": false,
|
||||
"path": "/",
|
||||
"headers": {
|
||||
"Host": "xray.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `acceptProxyProtocol`: true | false
|
||||
> `acceptProxyProtocol`: true | false
|
||||
|
||||
仅用于 inbound,指示是否接收 PROXY protocol。
|
||||
|
||||
@@ -32,7 +32,7 @@ Websocket 会识别 HTTP 请求的 X-Forwarded-For 头来覆写流量的源地
|
||||
|
||||
填写 `true` 时,最底层 TCP 连接建立后,请求方必须先发送 PROXY protocol v1 或 v2,否则连接会被关闭。
|
||||
|
||||
> `path` string
|
||||
> `path` string
|
||||
|
||||
WebSocket 所使用的 HTTP 协议路径,默认值为 `"/"`。
|
||||
|
||||
@@ -42,7 +42,7 @@ WebSocket 所使用的 HTTP 协议路径,默认值为 `"/"`。
|
||||
`Early Data` 使用 `Sec-WebSocket-Protocol` 头承载数据。如果你遇到兼容性问题,可以尝试调低阈值。
|
||||
:::
|
||||
|
||||
> `headers`: map \{string: string\}
|
||||
> `headers`: map \{string: string\}
|
||||
|
||||
自定义 HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是字符串。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user