简化 outbound 设置;增补周边内容 (#754)

* Outbound simplification; Update compiling; Update commands; Update installation

* Unpretty caught

* Pretty?

* ...
This commit is contained in:
𐲓𐳛𐳪𐳂𐳐 𐲀𐳢𐳦𐳫𐳢 𐲥𐳔𐳛𐳪𐳌𐳑𐳖𐳇
2025-10-20 01:41:38 +00:00
committed by GitHub
parent 25cd499b6f
commit bc5d7231de
11 changed files with 133 additions and 313 deletions
+1 -35
View File
@@ -19,11 +19,6 @@
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"allocate": {
"strategy": "always",
"refresh": 5,
"concurrency": 3
}
}
]
@@ -55,7 +50,7 @@
- 环境变量:以 `"env:"` 开头,后面是一个环境变量的名称,如 `"env:PORT"`。Xray 会以字符串形式解析这个环境变量。
- 字符串:可以是一个数值类型的字符串,如 `"1234"`;或者一个数值范围,如 `"5-10"` 表示端口 5 到端口 10,这 6 个端口。可以使用逗号进行分段,如 `11,13,15-17` 表示端口 11、端口 13、端口 15 到端口 17 这 5 个端口。
当只有一个端口时,Xray 会在此端口监听入站连接。当指定了一个端口范围时,取决于 `allocate` 设置。
当只有一个端口时,Xray 会在此端口监听入站连接。当指定了一个端口范围时,范围内的端口都会由 Xray 监听。
注意,监听一个端口是相当昂贵的操作,监听端口范围太大可能造成占用显著提高甚至导致 Xray 无法正常工作,一般来说监听数量接近四位数时可能就会开始出现问题,要使用一个很大的范围请考虑使用 iptables 进行重定向而不是在这里设置。
@@ -92,10 +87,6 @@
当设置了 sniffing 中的 enable 为 true, 还能嗅探出 bittorrent 类型的流量, 然后可以在路由中配置"protocol"项来设置规则处理 BT 流量, 比如服务端用来拦截 BT 流量, 或客户端固定转发 BT 流量到某个 VPS 去等.
> `allocate`: [AllocateObject](#allocateobject)
当设置了多个 port 时, 端口分配的具体设置
### SniffingObject
```json
@@ -159,28 +150,3 @@ Xray只会嗅探 `destOverride` 中协议的域名用作路由,如果只想进
::: tip
在能保证 **被代理连接能得到正确的 DNS 解析** 时,使用 `routeOnly` 且开启 `destOverride` 的同时,将路由匹配策略 `domainStrategy` 设置为 `AsIs` 即可实现全程无 DNS 解析进行域名及 IP 分流。此时遇到 IP 规则匹配时使用的 IP 为域名原始 IP。
:::
### 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`。
-19
View File
@@ -19,9 +19,6 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
],
"default": {
"level": 0
},
"detour": {
"to": "tag_to_detour"
}
}
```
@@ -34,10 +31,6 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
当此配置用作动态端口时,Xray 会自动创建用户。
> `detour`: [DetourObject](#detourobject)
指示对应的出站协议使用另一个服务器。
> `default`: [DefaultObject](#defaultobject)
可选,clients 的默认配置。仅在配合`detour`时有效。
@@ -79,18 +72,6 @@ level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。
用户邮箱地址,用于区分不同用户的流量。
### DetourObject
```json
{
"to": "tag_to_detour"
}
```
> `to`: string
一个 inbound 的`tag`, 指定的 inbound 的必须是使用 VMess 协议的 inbound.
### DefaultObject
```json
+22 -50
View File
@@ -14,18 +14,12 @@ HTTP 协议。
```json
{
"servers": [
{
"address": "192.168.108.1",
"port": 3128,
"users": [
{
"user": "my-username",
"pass": "my-password"
}
]
}
],
"address": "192.168.108.1",
"port": 3128,
"user": "my-username",
"pass": "my-password",
"level": 0,
"email": "love@xray.com",
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"
@@ -37,29 +31,6 @@ HTTP 协议。
目前 HTTP 协议 outbound 中 `streamSettings` 设置 `security` 和 `tlsSettings` 是生效的。
:::
> `servers`: \[ [ServerObject](#serverobject) \]
HTTP 服务器列表,其中每一项是一个服务器配置,若配置多个,循环使用 (RoundRobin)。
> `headers`: map{ string, string }
HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,每次请求会附上所有的键值对
### ServerObject
```json
{
"address": "192.168.108.1",
"port": 3128,
"users": [
{
"user": "my-username",
"pass": "my-password"
}
]
}
```
> `address`: string
HTTP 代理服务器地址,必填。
@@ -68,23 +39,24 @@ HTTP 代理服务器地址,必填。
HTTP 代理服务器端口,必填。
> `user`: \[[AccountObject](#accountobject)\]
一个数组,数组中每个元素为一个用户帐号。默认值为空。
#### AccountObject
```json
{
"user": "my-username",
"pass": "my-password"
}
```
> `user`: string
用户名,字符串类型。必填。
用户名,字符串类型。如果对接服务端需要认证则必填,否则不要包含此项。
> `pass`: string
密码,字符串类型。必填。
密码,字符串类型。如果对接服务端需要认证则必填,否则不要包含此项。
> `level`: number
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。如果对接服务端需要认证则选填,否则不要包含此项。
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
> `email`: string
邮件地址,用于标识用户。如果对接服务端需要认证则选填,否则不要包含此项。
> `headers`: map{ string, string }
HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,每次请求会附上所有的键值对。
+2 -25
View File
@@ -29,29 +29,6 @@ Shadowsocks 2022 新协议格式提升了性能并带有完整的重放保护,
## OutboundConfigurationObject
```json
{
"servers": [
{
"email": "love@xray.com",
"address": "127.0.0.1",
"port": 1234,
"method": "加密方式",
"password": "密码",
"uot": true,
"UoTVersion": 2,
"level": 0
}
]
}
```
> `servers`: \[[ServerObject](#serverobject)\]
一个数组,代表一组 Shadowsocks 服务端设置, 其中每一项是一个 [ServerObject](#serverobject)。
### ServerObject
```json
{
"email": "love@xray.com",
@@ -79,11 +56,11 @@ Shadowsocks 服务端端口。必填。
> `method`: string
必填。
Shadowsocks 加密方式,必填。
> `password`: string
必填。
Shadowsocks 认证密码,必填。
> `uot`: bool
+12 -53
View File
@@ -8,41 +8,14 @@
## OutboundConfigurationObject
```json
{
"servers": [
{
"address": "127.0.0.1",
"port": 1234,
"users": [
{
"user": "test user",
"pass": "test pass",
"level": 0
}
]
}
]
}
```
> `servers`: \[ [ServerObject](#serverobject) \]
Socks 服务器列表,其中每一项是一个服务器配置。
### ServerObject
```json
{
"address": "127.0.0.1",
"port": 1234,
"users": [
{
"user": "test user",
"pass": "test pass",
"level": 0
}
]
"user": "test user",
"pass": "test pass",
"level": 0,
"email": "love@xray.com"
}
```
@@ -56,36 +29,22 @@ Socks 服务器列表,其中每一项是一个服务器配置。
> `port`: number
服务器端口, 必填
> `users`: \[ [UserObject](#userobject) \]
一个数组表示的用户列表,数组中每个元素为一个用户配置。
当列表不为空时,Socks 客户端会使用用户信息进行认证;如未指定,则不进行认证。
默认值为空。
#### UserObject
```json
{
"user": "test user",
"pass": "test pass",
"level": 0
}
```
服务器端口, 必填。
> `user`: string
用户名,字符串类型。必填。
用户名,字符串类型。如果对接服务端需要认证则必填,否则不要包含此项。
> `pass`: string
密码,字符串类型。必填。
密码,字符串类型。如果对接服务端需要认证则必填,否则不要包含此项。
> `level`: number
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。如果对接服务端需要认证则选填,否则不要包含此项。
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
> `email`: string
邮件地址,用于标识用户。如果对接服务端需要认证则选填,否则不要包含此项。
-20
View File
@@ -8,26 +8,6 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道
## OutboundConfigurationObject
```json
{
"servers": [
{
"address": "127.0.0.1",
"port": 1234,
"password": "password",
"email": "love@xray.com",
"level": 0
}
]
}
```
> `servers`: \[ [ServerObject](#serverobject) \]
一个数组,其中每一项是一个 [ServerObject](#serverobject)。
### ServerObject
```json
{
"address": "127.0.0.1",
+9 -54
View File
@@ -6,44 +6,15 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
## OutboundConfigurationObject
```json
{
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0
}
]
}
]
}
```
> `vnext`: \[ [ServerObject](#serverobject) \]
一个数组, 表示 VLESS 服务器列表,包含一组指向服务端的配置, 其中每一项是一个服务器配置。
### ServerObject
```json
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0,
"reverse": {}
}
]
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0,
"reverse": {}
}
```
@@ -55,22 +26,6 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
服务端端口,通常与服务端监听的端口相同。
> `users`: \[ [UserObject](#userobject) \]
数组, 一组服务端认可的用户列表, 其中每一项是一个用户配置
### UserObject
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0,
"reverse" {}
}
```
> `id`: string
VLESS 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
@@ -95,10 +50,10 @@ VLESS 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是
- 第2个块为加密方式,可选 `native`/`xorpub`/`random`, 分别对应: 原始格式数据包/原始格式+混淆公钥部分/全随机数(类似 VMESS/Shadows socks)。要求服务端与客户端一致
- 第3个块为是否会话恢复。选择 `0rtt` 将跟随服务端设置尝试使用先前生成的票据跳过握手快速连接(可被服务端手动禁用),选择 `1rtt` 将强制执行 1RTT 的握手过程。此处与服务端设置含义不同,详见 VLESS 入站 `decryption` 设置。
往后为 padding, 连接建立后客户端发送一些垃圾数据用以混淆长度特征,无需与服务端相同(入站的相同部分为服务端向客户端方向发送的 padding),属于可变长部分,格式为 `padding.delay.padding`+`(.delay.padding)`*n(可插入多个 padding, 要求两个 padding 块之间必须包含一个 delay 块) 比如可以写一个超长的 `padding.delay.padding.delay.padding.delay.padding.delay.padding.delay.padding`
往后为 padding, 连接建立后客户端发送一些垃圾数据用以混淆长度特征,无需与服务端相同(入站的相同部分为服务端向客户端方向发送的 padding),属于可变长部分,格式为 `padding.delay.padding`+`(.delay.padding)`×n(可插入多个 padding, 要求两个 padding 块之间必须包含一个 delay 块) 比如可以写一个超长的 `padding.delay.padding.delay.padding.delay.padding.delay.padding.delay.padding`
-`padding` 格式为 `probability-min-max` 如 `100-111-1111` 含义为 100% 发送一个长度 111~1111 的padding.
-`delay` 格式同样为 `probability-min-max` 如 `75-0-111` 含义为 75% 的概率等待 0~111 毫秒
- `padding` 格式为 `probability-min-max` 如 `100-111-1111` 含义为 100% 发送一个长度 111~1111 的padding.
- `delay` 格式同样为 `probability-min-max` 如 `75-0-111` 含义为 75% 的概率等待 0~111 毫秒
第一个 padding 块存在特殊要求,要求概率为 100% 且最小长度大于 0. 若不存在任何 padding, 核心自动使用 `100-111-1111.75-0-111.50-0-3333` 作为 padding 设置。
@@ -160,4 +115,4 @@ VLESS 极简反向代理配置,和核心内部自带的的通用反向代理
`tag` 为该反向代理的入站代理 tag. 当服务端派发反向代理请求时会从使用这个 tag 的入站进入路由系统,使用路由系统将其路由到你需要的出站。
使用的 UUID 需要是服务端同样配置了 reverse 的 UUID(详见 VLESS 入站).
使用的 UUID 需要是服务端同样配置了 reverse 的 UUID(详见 VLESS 入站)。
+5 -46
View File
@@ -8,38 +8,14 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
## OutboundConfigurationObject
```json
{
"vnext": [
{
"address": "127.0.0.1",
"port": 37192,
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
"experiments": ""
}
]
}
]
}
```
> `vnext`:\[ [ServerObject](#serverobject) \]
一个数组,包含一组的服务端配置.
其中每一项是一个服务端配置[ServerObject](#serverobject)。
### ServerObject
```json
{
"address": "127.0.0.1",
"port": 37192,
"users": []
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
"experiments": ""
}
```
@@ -51,23 +27,6 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
服务端监听的端口号, 必填。
> `users`: \[ [UserObject](#userobject) \]
一个数组,代表一组服务端认可的用户.
其中每一项是一个用户[UserObject](#userobject)。
#### UserObject
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
"experiments": ""
}
```
> `id`:string
Vmess 的用户 ID,可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
@@ -107,4 +66,4 @@ level 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。
"AuthenticatedLength" 启用认证的数据包长度实验。此实验需要同时在客户端与服务器端同时开启,并运行相同版本的程序。
"NoTerminationSignal" 启用不发送断开连接标致实验。此实验可能会影响被代理的连接的稳定性。
"NoTerminationSignal" 启用不发送断开连接标志。该特性现默认启用。