Change: reformat protocols

This commit is contained in:
JimhHan 2021-03-16 07:10:04 +08:00
parent 2211b91c85
commit 4d15aab6e2
No known key found for this signature in database
GPG Key ID: 48D5D7CF95157AC5
10 changed files with 57 additions and 137 deletions

@ -1,18 +1,9 @@
--- # Inbounds 协议
alwaysopen: false
date: "2020-12-23T00:00:00.000Z" > 这个章节包含了目前所有可用于 Inbounds 的协议及具体配置细节.
description: Project X 的文档.
# head: <hr/>
hide:
- toc
# post: "&nbsp;\U0001F44B"
title: Inbounds 可用协议列表
weight: 5
---
{{% alert theme="warning" %}}**这个章节包含了目前所有可用于 Inbounds 的协议及具体配置细节.**{{% /alert %}}
## 协议列表 ## 协议列表
---
>[Dokodemo-door](./dokodemo) >[Dokodemo-door](./dokodemo)
Dokodemo door任意门可以监听一个本地端口并把所有进入此端口的数据发送至指定服务器的一个端口从而达到端口映射的效果。 Dokodemo door任意门可以监听一个本地端口并把所有进入此端口的数据发送至指定服务器的一个端口从而达到端口映射的效果。
>[HTTP](./http) >[HTTP](./http)

@ -1,16 +1,9 @@
--- # Dokodemo door
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Dokodemo door
weight: 2
---
Dokodemo door任意门可以监听一个本地端口并把所有进入此端口的数据发送至指定服务器的一个端口从而达到端口映射的效果。 Dokodemo door任意门可以监听一个本地端口并把所有进入此端口的数据发送至指定服务器的一个端口从而达到端口映射的效果。
## InboundConfigurationObject ## InboundConfigurationObject
---
```json ```json
{ {
"address": "8.8.8.8", "address": "8.8.8.8",
@ -52,10 +45,6 @@ Dokodemo door任意门可以监听一个本地端口并把所有进入
userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0. userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
## 透明代理配置样例 ## 透明代理配置样例
---
此部分请参考[透明代理TProxy配置教程](../../../documents/level-2/tproxy)。 此部分请参考[透明代理TProxy配置教程](../../../documents/level-2/tproxy)。

@ -1,33 +1,25 @@
--- # HTTP
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: HTTP
weight: 3
---
HTTP 协议。 HTTP 协议。
::: danger ::: warning
**http 协议没有对传输加密,不适宜经公网中传输,更容易成为被人用作攻击的肉鸡。** **http 协议没有对传输加密,不适宜经公网中传输,更容易成为被人用作攻击的肉鸡。**
:::
`http inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。 `http inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
::: tip ::: tip TIP 1
**TIP 1**\
`http proxy` 只能代理 tcp 协议udp 系的协议均不能通过。 `http proxy` 只能代理 tcp 协议udp 系的协议均不能通过。
:::
::: tip TIP 2
::: tip
**TIP 2**\
在 Linux 中使用以下环境变量即可在当前 session 使用全局 HTTP 代理(很多软件都支持这一设置,也有不支持的)。 在 Linux 中使用以下环境变量即可在当前 session 使用全局 HTTP 代理(很多软件都支持这一设置,也有不支持的)。
- `export http_proxy=http://127.0.0.1:8080/` (地址须改成你配置的 HTTP 入站代理地址) - `export http_proxy=http://127.0.0.1:8080/` (地址须改成你配置的 HTTP 入站代理地址)
- `export https_proxy=$http_proxy` - `export https_proxy=$http_proxy`
:::
## InboundConfigurationObject ## InboundConfigurationObject
---
```json ```json
{ {
@ -61,7 +53,7 @@ HTTP 协议。
::: tip ::: tip
若配置不当,开启此选项会导致死循环。 若配置不当,开启此选项会导致死循环。
:::
> `userLevel`: number > `userLevel`: number
@ -69,10 +61,8 @@ HTTP 协议。
userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0. userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. 如不指定, 默认为 0.
### AccountObject ### AccountObject
---
```json ```json
{ {
"user": "my-username", "user": "my-username",

@ -1,9 +1,4 @@
--- # Shadowsocks
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Shadowsocks
weight: 8
---
[Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议,兼容大部分其它版本的实现。 [Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议,兼容大部分其它版本的实现。
@ -24,7 +19,7 @@ weight: 8
::: danger ::: danger
"none" 不加密方式下,服务器端不会验证 "password" 中的密码。为确保安全性, 一般需要加上 TLS 并在传输层使用安全配置,例如 WebSocket 配置较长的 path "none" 不加密方式下,服务器端不会验证 "password" 中的密码。为确保安全性, 一般需要加上 TLS 并在传输层使用安全配置,例如 WebSocket 配置较长的 path
:::
## InboundConfigurationObject ## InboundConfigurationObject

@ -1,14 +1,10 @@
--- # Socks
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)。 标准 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 ::: danger
**socks 协议没有对传输加密,不适宜经公网中传输** **socks 协议没有对传输加密,不适宜经公网中传输**
:::
`socks inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。 `socks inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
@ -64,7 +60,6 @@ userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的
### AccountObject ### AccountObject
---
```json ```json
{ {

@ -1,20 +1,13 @@
--- # Trojan
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: Trojan
weight: 7
---
[Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议 [Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议
::: danger ::: danger
Trojan 被设计工作在正确配置的加密 TLS 隧道 Trojan 被设计工作在正确配置的加密 TLS 隧道
:::
## InboundConfigurationObject ## InboundConfigurationObject
---
```json ```json
{ {
"clients": [ "clients": [
@ -44,15 +37,12 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道
一个数组,包含一系列强大的回落分流配置(可选)。<br> 一个数组,包含一系列强大的回落分流配置(可选)。<br>
fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配置) fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配置)
{{% notice %}} ::: tip
**TIP**\ Xray 的 Trojan 有完整的 fallbacks 支持,配置方式完全一致。
Xray 的 Trojan 有完整的 fallbacks 支持,配置方式完全一致。</br>
触发回落的条件也与VLESS类似首包长度 < 58 或第 57 个字节不为 '\r'因为 Trojan 没有协议版本或身份认证失败 触发回落的条件也与VLESS类似首包长度 < 58 或第 57 个字节不为 '\r'因为 Trojan 没有协议版本或身份认证失败
:::
### ClientObject ### ClientObject
---
```json ```json
{ {
@ -73,7 +63,7 @@ Xray 的 Trojan 有完整的 fallbacks 支持,配置方式完全一致。</br>
::: danger ::: danger
如果存在多个 ClientObject, 请注意 email 不可以重复。 如果存在多个 ClientObject, 请注意 email 不可以重复。
:::
> `level`: number > `level`: number
@ -90,14 +80,8 @@ userLevel 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的
- `xtls-rprx-origin`:最初的流控模式,此时客户端仅可选择 `xtls-rprx-origin``xtls-rprx-origin-udp443` 这两种流控模式。该模式纪念价值大于实际使用价值 - `xtls-rprx-origin`:最初的流控模式,此时客户端仅可选择 `xtls-rprx-origin``xtls-rprx-origin-udp443` 这两种流控模式。该模式纪念价值大于实际使用价值
- `xtls-rprx-direct`**推荐**,所有平台皆可使用的典型流控方式,此时客户端可选择任何流控模式 - `xtls-rprx-direct`**推荐**,所有平台皆可使用的典型流控方式,此时客户端可选择任何流控模式
::: warning ::: warning 注意
**注意**
`flow` 被指定时,还需要将该入站协议的 `streamSettings.security` 一项指定为 `xtls``tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。 `flow` 被指定时,还需要将该入站协议的 `streamSettings.security` 一项指定为 `xtls``tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。
:::
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。 此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。

@ -1,14 +1,9 @@
--- # vless
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: VLESS
weight: 5
---
::: danger ::: danger
目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。</br> 目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。
目前 VLESS 不支持分享。</br> 目前 VLESS 不支持分享。
:::
VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 Xray 客户端和服务器之间的桥梁。 VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 Xray 客户端和服务器之间的桥梁。
@ -42,23 +37,20 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
其中每一项是一个用户 [ClientObject](#clientobject)。 其中每一项是一个用户 [ClientObject](#clientobject)。
> `decryption`: "none" > `decryption`: "none"
现阶段需要填 `"none"`,不能留空。</br>
现阶段需要填 `"none"`,不能留空。
若未正确设置 decryption 的值,使用 Xray 或 -test 时会收到错误信息。 若未正确设置 decryption 的值,使用 Xray 或 -test 时会收到错误信息。
注意这里是 decryption和 clients 同级。</br> 注意这里是 decryption和 clients 同级。
decryption 和 vmess 协议的 encryption 的位置不同,是因为若套一层约定加密,服务端需要先解密才能知道是哪个用户。</br> decryption 和 vmess 协议的 encryption 的位置不同,是因为若套一层约定加密,服务端需要先解密才能知道是哪个用户。
> `fallbacks`: \[ [FallbackObject](../../fallback) \] > `fallbacks`: \[ [FallbackObject](../../fallback) \]
一个数组,包含一系列强大的回落分流配置(可选)。<br> 一个数组,包含一系列强大的回落分流配置(可选)。
fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配置) fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配置)
</br>
### ClientObject ### ClientObject
---
```json ```json
{ {
"id": "5783a3e7-e373-51cd-8642-c83782b807c5", "id": "5783a3e7-e373-51cd-8642-c83782b807c5",
@ -70,15 +62,16 @@ fallbacks 的具体配置请点击[FallbackObject](../../fallback/#fallbacks-配
> `id`: string > `id`: string
VLESS 的用户 ID可以是任意小于30字节的字符串, 也可以是一个合法的UUID. </br> VLESS 的用户 ID可以是任意小于30字节的字符串, 也可以是一个合法的UUID.
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即 自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即
- 写 "id": "我爱🍉老师1314", - 写 "id": "我爱🍉老师1314",
- 或写 "id": "5783a3e7-e373-51cd-8642-c83782b807c5" (此UUID是 `我爱🍉老师1314` 的 UUID 映射) - 或写 "id": "5783a3e7-e373-51cd-8642-c83782b807c5" (此UUID是 `我爱🍉老师1314` 的 UUID 映射)
其映射标准在[VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158) 其映射标准在[VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158)
你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.</br> 你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.
也可以使用命令 `xray uuid` 生成随机的UUID.
>也可以使用命令 `xray uuid` 生成随机的UUID.
> `level`: number > `level`: number
@ -99,12 +92,8 @@ level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值.
- `xtls-rprx-origin`:最初的流控模式,此时客户端仅可选择 `xtls-rprx-origin``xtls-rprx-origin-udp443` 这两种流控模式。该模式纪念价值大于实际使用价值 - `xtls-rprx-origin`:最初的流控模式,此时客户端仅可选择 `xtls-rprx-origin``xtls-rprx-origin-udp443` 这两种流控模式。该模式纪念价值大于实际使用价值
- `xtls-rprx-direct`**推荐**,所有平台皆可使用的典型流控方式,此时客户端可选择任何流控模式 - `xtls-rprx-direct`**推荐**,所有平台皆可使用的典型流控方式,此时客户端可选择任何流控模式
::: warning ::: warning 注意
**注意**
`flow` 被指定时,还需要将该入站协议的 `streamSettings.security` 一项指定为 `xtls``tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。 `flow` 被指定时,还需要将该入站协议的 `streamSettings.security` 一项指定为 `xtls``tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。
:::
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。 此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。
</br>

@ -1,18 +1,12 @@
--- # VMess
date: "2020-12-23T00:00:00.000Z"
description: Project X 的文档.
title: VMess
weight: 6
---
[VMess](../../../develop/protocols/vmess) 是一个加密传输协议,通常作为 Xray 客户端和服务器之间的桥梁。 [VMess](../../../develop/protocols/vmess) 是一个加密传输协议,通常作为 Xray 客户端和服务器之间的桥梁。
::: danger ::: danger
VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装`ntp`服务来自动同步系统时间。</br> VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装`ntp`服务来自动同步系统时间。
:::
## InboundConfigurationObject ## InboundConfigurationObject
---
```json ```json
{ {
@ -61,7 +55,6 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
### ClientObject ### ClientObject
---
```json ```json
{ {
@ -74,15 +67,19 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
> `id`: string > `id`: string
Vmess 的用户 ID可以是任意小于30字节的字符串, 也可以是一个合法的UUID. </br> Vmess 的用户 ID可以是任意小于30字节的字符串, 也可以是一个合法的UUID.
::: tip
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即 自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写id来标识同一用户,即
- 写 "id": "我爱🍉老师1314", - 写 "id": "我爱🍉老师1314",
- 或写 "id": "5783a3e7-e373-51cd-8642-c83782b807c5" (此UUID是 `我爱🍉老师1314` 的 UUID 映射) - 或写 "id": "5783a3e7-e373-51cd-8642-c83782b807c5" (此UUID是 `我爱🍉老师1314` 的 UUID 映射)
:::
其映射标准在[VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158) 其映射标准在[VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158)
你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.</br> 你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.
也可以使用命令 `xray uuid` 生成随机的UUID.
> 也可以使用命令 `xray uuid` 生成随机的UUID.
> `level`: number > `level`: number
@ -100,16 +97,13 @@ level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值.
::: tip ::: tip
客户端 AlterID 设置为 0 代表启用 VMessAEAD ;服务端为自动适配,可同时兼容启用和未开启 VMessAEAD 的客户端。 客户端 AlterID 设置为 0 代表启用 VMessAEAD ;服务端为自动适配,可同时兼容启用和未开启 VMessAEAD 的客户端。
客户端可通过设置环境变量 Xray_VMESS_AEAD_DISABLED=true 强行禁用 VMessAEAD 客户端可通过设置环境变量 Xray_VMESS_AEAD_DISABLED=true 强行禁用 VMessAEAD
:::
> `email`: string > `email`: string
用户邮箱地址,用于区分不同用户的流量。 用户邮箱地址,用于区分不同用户的流量。
### DetourObject ### DetourObject
---
```json ```json
{ {
@ -121,10 +115,7 @@ level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值.
一个 inbound 的`tag`, 指定的 inbound 的必须是使用 VMess 协议的 inbound. 一个 inbound 的`tag`, 指定的 inbound 的必须是使用 VMess 协议的 inbound.
### DefaultObject ### DefaultObject
---
```json ```json
{ {
@ -143,10 +134,7 @@ level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值.
动态端口的默认`alterId`,默认值为`0` 动态端口的默认`alterId`,默认值为`0`
## VMess MD5 认证信息 玷污机制 ## VMess MD5 认证信息 玷污机制
---
为了进一步对抗可能的探测和封锁,每个 VMess 认证数据的服务端结构都会包含一个一次写入的玷污状态标记,初始状态为无瑕状态,当服务器检测到重放探测时或者因为其他原因入站连接出错以致校验数据不正确时,该连接所对应的请求认证数据会被玷污。 为了进一步对抗可能的探测和封锁,每个 VMess 认证数据的服务端结构都会包含一个一次写入的玷污状态标记,初始状态为无瑕状态,当服务器检测到重放探测时或者因为其他原因入站连接出错以致校验数据不正确时,该连接所对应的请求认证数据会被玷污。
@ -157,6 +145,5 @@ level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值.
如果服务器正在被重放攻击,可能会出现连接不稳定的情况。 如果服务器正在被重放攻击,可能会出现连接不稳定的情况。
::: tip ::: 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 认证信息 玷污机制 的影响。 拥有服务器 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 认证信息 玷污机制 的影响。
:::

@ -10,7 +10,7 @@ title: Outbounds 可用协议列表
weight: 6 weight: 6
--- ---
{{% alert theme="warning" %}}**这个章节包含了目前所有可用于 Outbounds 的协议及具体配置细节.**{{% /alert %}} ::: warning**这个章节包含了目前所有可用于 Outbounds 的协议及具体配置细节.**{{% /alert %}}
## 协议列表 ## 协议列表
--- ---

@ -10,7 +10,7 @@ title: 传输方式列表
weight: 7 weight: 7
--- ---
{{% alert theme="warning" %}}**这个章节包含了目前所有的传输方式及相关的具体配置.**{{% /alert %}} ::: warning**这个章节包含了目前所有的传输方式及相关的具体配置.**{{% /alert %}}
## 传输方式列表 ## 传输方式列表