Add: config (wip)

This commit is contained in:
JimhHan
2021-03-15 23:59:11 +08:00
parent 42a4e8a05b
commit 2211b91c85
49 changed files with 4365 additions and 12 deletions
+30
View File
@@ -0,0 +1,30 @@
---
alwaysopen: false
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
# head: <hr/>
hide:
- toc
# post: "&nbsp;\U0001F44B"
title: Inbounds 可用协议列表
weight: 5
---
{{% alert theme="warning" %}}**这个章节包含了目前所有可用于 Inbounds 的协议及具体配置细节.**{{% /alert %}}
## 协议列表
---
>[Dokodemo-door](./dokodemo)
Dokodemo door(任意门)可以监听一个本地端口,并把所有进入此端口的数据发送至指定服务器的一个端口,从而达到端口映射的效果。
>[HTTP](./http)
HTTP 协议
>[Socks](./socks)
标准 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)
VLESS 是一个无状态的轻量传输协议,可以作为 Xray 客户端和服务器之间的桥梁。
>[VMess](./vmess)
[VMess](../../develop/protocols/vmess) 是一个加密传输协议,,可以作为 Xray 客户端和服务器之间的桥梁。
>[Trojan](./trojan)
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议
>[Shadowsocks](./shadowsocks)
[Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议。
+61
View File
@@ -0,0 +1,61 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Dokodemo door
weight: 2
---
Dokodemo door(任意门)可以监听一个本地端口,并把所有进入此端口的数据发送至指定服务器的一个端口,从而达到端口映射的效果。
## InboundConfigurationObject
---
```json
{
"address": "8.8.8.8",
"port": 53,
"network": "tcp",
"timeout": 0,
"followRedirect": false,
"userLevel": 0
}
```
> `address`: address
将流量转发到此地址。可以是一个 IP 地址,形如 `"1.2.3.4"`,或者一个域名,形如 `"xray.com"`。字符串类型。
当 `followRedirect`(见下文)为 `true` 时,`address` 可为空。
> `port`: number
将流量转发到目标地址的指定端口,范围 \[1, 65535\],数值类型。必填参数。
> `network`: "tcp" | "udp" | "tcp,udp"
可接收的网络协议类型。比如当指定为 `"tcp"` 时,仅会接收 TCP 流量。默认值为 `"tcp"`。
> `timeout`: number
连接空闲的时间限制。单位为秒。默认值为 `300`。处理一个连接时,如果在 `timeout` 时间内,没有任何数据被传输,则中断该连接。
> `followRedirect`: true | false
当值为 `true` 时,dokodemo-door 会识别出由 iptables 转发而来的数据,并转发到相应的目标地址。
可参考 [传输配置](../../base/transport#sockoptobject) 中的 `tproxy` 设置。
> `userLevel`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
## 透明代理配置样例
---
此部分请参考[透明代理(TProxy)配置教程](../../../documents/level-2/tproxy)。
+90
View File
@@ -0,0 +1,90 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: HTTP
weight: 3
---
HTTP 协议。
::: danger
**http 协议没有对传输加密,不适宜经公网中传输,更容易成为被人用作攻击的肉鸡。**
`http inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
::: tip
**TIP 1**\
`http proxy` 只能代理 tcp 协议,udp 系的协议均不能通过。
::: tip
**TIP 2**\
在 Linux 中使用以下环境变量即可在当前 session 使用全局 HTTP 代理(很多软件都支持这一设置,也有不支持的)。
- `export http_proxy=http://127.0.0.1:8080/` (地址须改成你配置的 HTTP 入站代理地址)
- `export https_proxy=$http_proxy`
## InboundConfigurationObject
---
```json
{
"timeout": 0,
"accounts": [
{
"user": "my-username",
"pass": "my-password"
}
],
"allowTransparent": false,
"userLevel": 0
}
```
> `timeout`: number
连接空闲的时间限制。单位为秒。默认值为 `300`, 0 表示不限时。
处理一个连接时,如果在 `timeout` 时间内,没有任何数据被传输,则中断该连接。
> `accounts`: \[[AccountObject](#accountobject)\]
一个数组,数组中每个元素为一个用户帐号。默认值为空。
当 `accounts` 非空时,HTTP 代理将对入站连接进行 Basic Authentication 验证。
> `allowTransparent`: true | false
当为 `true` 时,会转发所有 HTTP 请求,而非只是代理请求。
::: tip
若配置不当,开启此选项会导致死循环。
> `userLevel`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
### AccountObject
---
```json
{
"user": "my-username",
"pass": "my-password"
}
```
> `user`: string
用户名,字符串类型。必填。
> `pass`: string
密码,字符串类型。必填。
@@ -0,0 +1,68 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Shadowsocks
weight: 8
---
[Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议,兼容大部分其它版本的实现。
目前兼容性如下:
* 支持 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
::: danger
"none" 不加密方式下,服务器端不会验证 "password" 中的密码。为确保安全性, 一般需要加上 TLS 并在传输层使用安全配置,例如 WebSocket 配置较长的 path
## InboundConfigurationObject
```json
{
"email": "love@xray.com",
"method": "aes-256-gcm",
"password": "密码",
"level": 0,
"network": "tcp"
}
```
> `email`: string
邮件地址,可选,用于标识用户
> `method`: string
必填。
* 推荐的加密方式:
* AES-256-GCM
* AES-128-GCM
* ChaCha20-Poly1305 或称 ChaCha20-IETF-Poly1305
* none 或 plain
> `password`: string
必填,任意字符串。
Shadowsocks 协议不限制密码长度,但短密码会更可能被破解,建议使用 16 字符或更长的密码。
> `level`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
`level` 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
> `network`: "tcp" | "udp" | "tcp,udp"
可接收的网络协议类型。比如当指定为 `"tcp"` 时,仅会接收 TCP 流量。默认值为 `"tcp"`。
+82
View File
@@ -0,0 +1,82 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Socks
weight: 4
---
标准 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)。
::: danger
**socks 协议没有对传输加密,不适宜经公网中传输**
`socks inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
## InboundConfigurationObject
```json
{
"auth": "noauth",
"accounts": [
{
"user": "my-username",
"pass": "my-password"
}
],
"udp": false,
"ip": "127.0.0.1",
"userLevel": 0
}
```
> `auth`: "noauth" | "password"
Socks 协议的认证方式,支持 `"noauth"` 匿名方式和 `"password"` 用户密码方式。
默认值为 `"noauth"`。
> `accounts`: \[ [AccountObject](#accountobject) \]
一个数组,数组中每个元素为一个用户帐号。
此选项仅当 `auth` 为 `password` 时有效。
默认值为空。
> `udp`: true | false
是否开启 UDP 协议的支持。
默认值为 `false`。
> `ip`: address
当开启 UDP 时,Xray 需要知道本机的 IP 地址。
默认值为 `"127.0.0.1"`。
> `userLevel`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
### AccountObject
---
```json
{
"user": "my-username",
"pass": "my-password"
}
```
> `user`: string
用户名,字符串类型。必填。
> `pass`: string
密码,字符串类型。必填。
+103
View File
@@ -0,0 +1,103 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Trojan
weight: 7
---
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议
::: danger
Trojan 被设计工作在正确配置的加密 TLS 隧道
## InboundConfigurationObject
---
```json
{
"clients": [
{
"password": "password",
"email": "love@xray.com",
"level": 0,
"flow": "xtls-rprx-direct"
}
],
"fallbacks": [
{
"dest": 80
}
]
}
```
> `clients`: \[ [ClientObject](#clientobject) \]
一个数组,代表一组服务端认可的用户.
其中每一项是一个用户 [ClientObject](#clientobject)。
> `fallbacks`: \[ [FallbackObject](../../fallback) \]
一个数组,包含一系列强大的回落分流配置(可选)。<br>
fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配置)
{{% notice %}}
**TIP**\
Xray 的 Trojan 有完整的 fallbacks 支持,配置方式完全一致。</br>
触发回落的条件也与VLESS类似:首包长度 < 58 或第 57 个字节不为 '\r'(因为 Trojan 没有协议版本)或身份认证失败。
### ClientObject
---
```json
{
"password": "password",
"email": "love@xray.com",
"level": 0,
"flow": "xtls-rprx-direct"
}
```
> `password`: string
必填,任意字符串。
> `email`: string
邮件地址,可选,用于标识用户
::: danger
如果存在多个 ClientObject, 请注意 email 不可以重复。
> `level`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
> `flow`: string
流控模式,用于选择 XTLS 的算法。
目前入站协议中有以下流控模式可选:
- `xtls-rprx-origin`:最初的流控模式,此时客户端仅可选择 `xtls-rprx-origin` 和 `xtls-rprx-origin-udp443` 这两种流控模式。该模式纪念价值大于实际使用价值
- `xtls-rprx-direct`:**推荐**,所有平台皆可使用的典型流控方式,此时客户端可选择任何流控模式
::: warning
**注意**
当 `flow` 被指定时,还需要将该入站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。
+110
View File
@@ -0,0 +1,110 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: VLESS
weight: 5
---
::: danger
目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。</br>
目前 VLESS 不支持分享。</br>
VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 Xray 客户端和服务器之间的桥梁。
与 [VMess](../vmess) 不同,VLESS 不依赖于系统时间,认证方式同样为 UUID,但不需要 alterId。
## InboundConfigurationObject
```json
{
"clients": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"level": 0,
"email": "love@xray.com",
"flow": "xtls-rprx-direct"
}
],
"decryption": "none",
"fallbacks": [
{
"dest": 80
}
]
}
```
> `clients`: \[ [ClientObject](#clientobject) \]
一个数组,代表一组服务端认可的用户.
其中每一项是一个用户 [ClientObject](#clientobject)。
> `decryption`: "none"
现阶段需要填 `"none"`,不能留空。</br>
若未正确设置 decryption 的值,使用 Xray 或 -test 时会收到错误信息。
注意这里是 decryption,和 clients 同级。</br>
decryption 和 vmess 协议的 encryption 的位置不同,是因为若套一层约定加密,服务端需要先解密才能知道是哪个用户。</br>
> `fallbacks`: \[ [FallbackObject](../../fallback) \]
一个数组,包含一系列强大的回落分流配置(可选)。<br>
fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配置)
</br>
### ClientObject
---
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"level": 0,
"email": "love@xray.com",
"flow": "xtls-rprx-direct"
}
```
> `id`: string
VLESS 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的UUID. </br>
自定义字符串和其映射的 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 -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.</br>
也可以使用命令 `xray uuid` 生成随机的UUID.
> `level`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
> `email`: string
用户邮箱,用于区分不同用户的流量(会体现在日志、统计中)。
> `flow`: string
流控模式,用于选择 XTLS 的算法。
目前入站协议中有以下流控模式可选:
- `xtls-rprx-origin`:最初的流控模式,此时客户端仅可选择 `xtls-rprx-origin` 和 `xtls-rprx-origin-udp443` 这两种流控模式。该模式纪念价值大于实际使用价值
- `xtls-rprx-direct`:**推荐**,所有平台皆可使用的典型流控方式,此时客户端可选择任何流控模式
::: warning
**注意**
当 `flow` 被指定时,还需要将该入站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。
</br>
+162
View File
@@ -0,0 +1,162 @@
---
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: VMess
weight: 6
---
[VMess](../../../develop/protocols/vmess) 是一个加密传输协议,通常作为 Xray 客户端和服务器之间的桥梁。
::: danger
VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装`ntp`服务来自动同步系统时间。</br>
## InboundConfigurationObject
---
```json
{
"clients": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"level": 0,
"alterId": 0,
"email": "love@xray.com"
}
],
"default": {
"level": 0,
"alterId": 0
},
"detour": {
"to": "tag_to_detour"
},
"disableInsecureEncryption": false
}
```
> `clients`: \[ [ClientObject](#clientobject) \]
一个数组,代表一组服务端认可的用户.
其中每一项是一个用户[ClientObject](#clientobject)。
当此配置用作动态端口时,Xray 会自动创建用户。
> `detour`: [DetourObject](#detourobject)
指示对应的出站协议使用另一个服务器。
> `default`: [DefaultObject](#defaultobject)
可选,clients 的默认配置。仅在配合`detour`时有效。
> `disableInsecureEncryption`: true | false
是否禁止客户端使用不安全的加密方式,如果设置为 true 当客户端指定下列加密方式时,服务器会主动断开连接。
- `"none"`
- `"aes-128-cfb"`
默认值为`false`。
### ClientObject
---
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"level": 0,
"alterId": 4,
"email": "love@xray.com"
}
```
> `id`: string
Vmess 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的UUID. </br>
自定义字符串和其映射的 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 -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.</br>
也可以使用命令 `xray uuid` 生成随机的UUID.
> `level`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
> `alterId`: number
为了进一步防止被探测,一个用户可以在主 ID 的基础上,再额外生成多个 ID。这里只需要指定额外的 ID 的数量,推荐值为 0 代表启用 VMessAEAD。
最大值 65535。这个值不能超过服务器端所指定的值。
不指定的话,默认值是 0。
::: tip
客户端 AlterID 设置为 0 代表启用 VMessAEAD ;服务端为自动适配,可同时兼容启用和未开启 VMessAEAD 的客户端。
客户端可通过设置环境变量 Xray_VMESS_AEAD_DISABLED=true 强行禁用 VMessAEAD
> `email`: string
用户邮箱地址,用于区分不同用户的流量。
### DetourObject
---
```json
{
"to": "tag_to_detour"
}
```
> `to`: string
一个 inbound 的`tag`, 指定的 inbound 的必须是使用 VMess 协议的 inbound.
### DefaultObject
---
```json
{
"level": 0,
"alterId": 0
}
```
> `level`: number
用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。
level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
> `alterId`: number
动态端口的默认`alterId`,默认值为`0`。
## VMess MD5 认证信息 玷污机制
---
为了进一步对抗可能的探测和封锁,每个 VMess 认证数据的服务端结构都会包含一个一次写入的玷污状态标记,初始状态为无瑕状态,当服务器检测到重放探测时或者因为其他原因入站连接出错以致校验数据不正确时,该连接所对应的请求认证数据会被玷污。
被玷污的认证数据无法被用于建立连接,当攻击者或客户端使用被玷污的认证数据建立连接时,服务器会输出包含 "invalid user" "ErrTainted" 的错误信息,并阻止该连接。
当服务器没有受到重放攻击时,该机制对正常连接的客户端没有影响。
如果服务器正在被重放攻击,可能会出现连接不稳定的情况。
::: tip
拥有服务器 UUID 以及其他连接数据的恶意程序可能根据此机制对服务器发起拒绝服务攻击,受到此类攻击的服务可以通过修改 proxy/vmess/validator.go 文件中 func (v \*TimedUserValidator) BurnTaintFuse(userHash []byte) error 函数的 atomic.CompareAndSwapUint32(pair.taintedFuse, 0, 1) 语句为 atomic.CompareAndSwapUint32(pair.taintedFuse, 0, 0) 来解除服务器对此类攻击的安全保护机制。使用 VMessAEAD 认证机制的客户端不受到 VMess MD5 认证信息 玷污机制 的影响。