diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index a6c146a..100d216 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -47,6 +47,49 @@ module.exports = { 'examples/multiple' ] }, + { + title: '入站代理', + collapsable: false, + path: '/config/inbounds/', + children: [ + 'inbounds/dokodemo', + 'inbounds/http', + 'inbounds/shadowsocks', + 'inbounds/socks', + 'inbounds/trojan', + 'inbounds/vless', + 'inbounds/vmess' + ] + }, + { + title: '出站代理', + collapsable: false, + path: '/config/outbounds/', + children: [ + 'outbounds/blackhole', + 'outbounds/dns', + 'outbounds/freedom', + 'outbounds/http', + 'outbounds/shadowsocks', + 'outbounds/socks', + 'outbounds/trojan', + 'outbounds/vless', + 'outbounds/vmess' + ] + }, + { + title: '底层传输', + collapsable: false, + path: '/config/transports/', + children: [ + 'transports/grpc', + 'transports/h2', + 'transports/mkcp', + 'transports/quic', + 'transports/tcp', + 'transports/websocket' + ] + }, ], '/': 'auto', } diff --git a/docs/config/base/api.md b/docs/config/api.md similarity index 100% rename from docs/config/base/api.md rename to docs/config/api.md diff --git a/docs/config/base/dns.md b/docs/config/dns.md similarity index 100% rename from docs/config/base/dns.md rename to docs/config/dns.md diff --git a/docs/config/base/dns_flow.png b/docs/config/dns_flow.png similarity index 100% rename from docs/config/base/dns_flow.png rename to docs/config/dns_flow.png diff --git a/docs/config/fakedns.md b/docs/config/fakedns.md index 857cab0..81ec30d 100644 --- a/docs/config/fakedns.md +++ b/docs/config/fakedns.md @@ -1,26 +1,18 @@ ---- -date: "2021-03-14T00:00:00.000Z" -description: Project X 的文档. -title: FakeDNS -weight: 11 ---- +# FakeDNS FakeDNS 通过伪造 DNS 以获取目标域名,能够降低 DNS 查询时的延迟、配合透明代理获取目标域名。 - ::: warning FakeDNS 有可能会污染本地 DNS,导致 Xray 关闭后“无法访问网络”。 - - - +::: ## FakeDNSObject ---- + `FakeDNSObject` 对应配置文件的 `fakedns` 项。 ```json { - "ipPool": "240.0.0.0/8", + "ipPool": "198.18.0.0/16", "poolSize": 65535 } ``` @@ -33,19 +25,16 @@ FakeDNS 将使用此选项指定的 IP 块分配地址。 指定 FakeDNS 储存的 域名-IP 映射的最大数目。当映射数超过此值后,会按照 LRU 规则淘汰映射。默认为 65535。 - - ### 如何使用? FakeDNS 本质上是一个 [DNS 服务器](../dns#serverobject),能够与任意 DNS 规则配合使用。 ::: tip 只有将 DNS 查询路由到 FakeDNS,才能使其发挥作用。 - +::: 另外,你需要在入站中开启 `Sniffing` ,并使用 `fakedns` 目标地址重置。 -{{% notice warning important %}} -**TIP**\ +::: warning 如果 FakeIP 没有被正确的还原为域名,将无法连接到服务器。 - +::: diff --git a/docs/config/base/inbounds.md b/docs/config/inbounds.md similarity index 100% rename from docs/config/base/inbounds.md rename to docs/config/inbounds.md diff --git a/docs/config/inbound-protocols/README.md b/docs/config/inbounds/README.md similarity index 98% rename from docs/config/inbound-protocols/README.md rename to docs/config/inbounds/README.md index aec3cac..2ba8c05 100644 --- a/docs/config/inbound-protocols/README.md +++ b/docs/config/inbounds/README.md @@ -5,17 +5,30 @@ ## 协议列表 >[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) 协议。 diff --git a/docs/config/inbound-protocols/dokodemo.md b/docs/config/inbounds/dokodemo.md similarity index 100% rename from docs/config/inbound-protocols/dokodemo.md rename to docs/config/inbounds/dokodemo.md diff --git a/docs/config/inbound-protocols/http.md b/docs/config/inbounds/http.md similarity index 100% rename from docs/config/inbound-protocols/http.md rename to docs/config/inbounds/http.md diff --git a/docs/config/inbound-protocols/shadowsocks.md b/docs/config/inbounds/shadowsocks.md similarity index 100% rename from docs/config/inbound-protocols/shadowsocks.md rename to docs/config/inbounds/shadowsocks.md diff --git a/docs/config/inbound-protocols/socks.md b/docs/config/inbounds/socks.md similarity index 100% rename from docs/config/inbound-protocols/socks.md rename to docs/config/inbounds/socks.md diff --git a/docs/config/inbound-protocols/trojan.md b/docs/config/inbounds/trojan.md similarity index 100% rename from docs/config/inbound-protocols/trojan.md rename to docs/config/inbounds/trojan.md diff --git a/docs/config/inbound-protocols/vless.md b/docs/config/inbounds/vless.md similarity index 100% rename from docs/config/inbound-protocols/vless.md rename to docs/config/inbounds/vless.md diff --git a/docs/config/inbound-protocols/vmess.md b/docs/config/inbounds/vmess.md similarity index 100% rename from docs/config/inbound-protocols/vmess.md rename to docs/config/inbounds/vmess.md diff --git a/docs/config/base/log.md b/docs/config/log.md similarity index 100% rename from docs/config/base/log.md rename to docs/config/log.md diff --git a/docs/config/base/outbounds.md b/docs/config/outbounds.md similarity index 100% rename from docs/config/base/outbounds.md rename to docs/config/outbounds.md diff --git a/docs/config/outbound-protocols/_index.md b/docs/config/outbounds/README.md similarity index 80% rename from docs/config/outbound-protocols/_index.md rename to docs/config/outbounds/README.md index 8dd4c61..572452d 100644 --- a/docs/config/outbound-protocols/_index.md +++ b/docs/config/outbounds/README.md @@ -1,34 +1,41 @@ ---- -alwaysopen: false -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -# head:
-hide: -- toc -# post: " \U0001F44B" -title: Outbounds 可用协议列表 -weight: 6 ---- +#Outbounds 可用协议列表 -::: warning**这个章节包含了目前所有可用于 Outbounds 的协议及具体配置细节.**{{% /alert %}} +> **这个章节包含了目前所有可用于 Outbounds 的协议及具体配置细节.** ## 协议列表 ---- + >[Blackhole](./blackhole) + Blackhole(黑洞)是一个出站数据协议,它会阻碍所有数据的出站,配合 [路由(Routing)](../routing) 一起使用,可以达到禁止访问某些网站的效果。 + >[DNS](./dns) + DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。此出站协议只能接收 DNS 流量(包含基于 UDP 和 TCP 协议的查询),其它类型的流量会导致错误。 + >[Freedom](./freedom) + Freedom 是一个出站协议,可以用来向任意网络发送(正常的) TCP 或 UDP 数据。 + >[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) 协议。 diff --git a/docs/config/outbound-protocols/blackhole.md b/docs/config/outbounds/blackhole.md similarity index 87% rename from docs/config/outbound-protocols/blackhole.md rename to docs/config/outbounds/blackhole.md index 58f777d..6b75d6f 100644 --- a/docs/config/outbound-protocols/blackhole.md +++ b/docs/config/outbounds/blackhole.md @@ -1,16 +1,9 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: Blackhole -weight: 1 ---- +# Blackhole Blackhole(黑洞)是一个出站数据协议,它会阻碍所有数据的出站,配合 [路由配置](../../routing) 一起使用,可以达到禁止访问某些网站的效果。 ## OutboundConfigurationObject ---- - ```json { "response": { @@ -26,9 +19,7 @@ Blackhole(黑洞)是一个出站数据协议,它会阻碍所有数据的 Blackhole 会在收到待转发数据之后,发送指定的响应数据,然后关闭连接,待转发的数据将被丢弃。
如不指定此项,Blackhole 将直接关闭连接。 - ### ResponseObject ---- ```json { diff --git a/docs/config/outbound-protocols/dns.md b/docs/config/outbounds/dns.md similarity index 83% rename from docs/config/outbound-protocols/dns.md rename to docs/config/outbounds/dns.md index 279a61f..c0c2dc5 100644 --- a/docs/config/outbound-protocols/dns.md +++ b/docs/config/outbounds/dns.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: DNS -weight: 2 ---- +# DNS DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。 @@ -13,8 +8,6 @@ DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。 ## OutboundConfigurationObject ---- - ```json { "network": "tcp", @@ -35,9 +28,4 @@ DNS 是一个出站协议,主要用于拦截和转发 DNS 查询。 修改 DNS 服务器端口。当不指定时,保持来源中指定的端口不变。 - - -## DNS配置实例 ---- - -{{% badge warning %}}In progress{{% /badge %}} +## DNS配置实例 diff --git a/docs/config/outbound-protocols/freedom.md b/docs/config/outbounds/freedom.md similarity index 91% rename from docs/config/outbound-protocols/freedom.md rename to docs/config/outbounds/freedom.md index 4ccd2fe..113ef36 100644 --- a/docs/config/outbound-protocols/freedom.md +++ b/docs/config/outbounds/freedom.md @@ -1,16 +1,9 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: Freedom -weight: 3 ---- +# Freedom Freedom 是一个出站协议,可以用来向任意网络发送(正常的) TCP 或 UDP 数据。 ## OutboundConfigurationObject ---- - ```json { "domainStrategy": "AsIs", @@ -26,14 +19,13 @@ Freedom 是一个出站协议,可以用来向任意网络发送(正常的) - `"UseIP"`、`"UseIPv4"` 和 `"UseIPv6"`: Xray 使用[内置 DNS 服务器](../../base/dns)解析获取IP, 向此域名发出连接. 默认值为 `"AsIs"`。 -::: tip -**TIP 1**\ +::: tip TIP 1 当使用 `"UseIP"` 模式,并且[出站连接配置](../outbounds#outboundobject) 中指定了 `sendThrough` 时,Freedom 会根据 `sendThrough` 的值自动判断所需的 IP 类型,IPv4 或 IPv6。 - -::: tip -**TIP 2**\ +::: + +::: tip TIP 2 当使用 `"UseIPv4"` 或 `"UseIPv6"` 模式时,Freedom 会只使用对应的 IPv4 或 IPv6 地址。当 `sendThrough` 指定了不匹配的本地地址时,将导致连接失败。 - +::: > `redirect`: address_port diff --git a/docs/config/outbound-protocols/http.md b/docs/config/outbounds/http.md similarity index 92% rename from docs/config/outbound-protocols/http.md rename to docs/config/outbounds/http.md index 7cadc28..62308ff 100644 --- a/docs/config/outbound-protocols/http.md +++ b/docs/config/outbounds/http.md @@ -1,26 +1,20 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: HTTP -weight: 4 ---- +# HTTP HTTP 协议。 ::: danger **http 协议没有对传输加密,不适宜经公网中传输,更容易成为被人用作攻击的肉鸡。** +::: `http inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。 ::: tip `http proxy` 只能代理 tcp 协议,udp 系的协议均不能通过。 - +::: ## OutboundConfigurationObject ---- - ```json { "servers": [ @@ -40,18 +34,14 @@ HTTP 协议。 ::: tip 目前 HTTP 协议 outbound 中 `streamSettings` 设置 `security` 和 `tlsSettings` 是生效的。 - +::: > `servers`: \[ [ServerObject](#serverobject) \] HTTP 服务器列表,其中每一项是一个服务器配置,若配置多个,循环使用 (RoundRobin)。 - - ### ServerObject ---- - ```json { "address": "192.168.108.1", @@ -77,12 +67,8 @@ HTTP 代理服务器端口,必填。 一个数组,数组中每个元素为一个用户帐号。默认值为空。 - - #### AccountObject ---- - ```json { "user": "my-username", diff --git a/docs/config/outbound-protocols/shadowsocks.md b/docs/config/outbounds/shadowsocks.md similarity index 94% rename from docs/config/outbound-protocols/shadowsocks.md rename to docs/config/outbounds/shadowsocks.md index ad55fe6..e043292 100644 --- a/docs/config/outbound-protocols/shadowsocks.md +++ b/docs/config/outbounds/shadowsocks.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: Shadowsocks -weight: 9 ---- +# Shadowsocks [Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议,兼容大部分其它版本的实现。 @@ -26,12 +21,10 @@ weight: 9 ::: danger "none" 不加密方式下,服务器端不会验证 "password" 中的密码。为确保安全性, 一般需要加上 TLS 并在传输层使用安全配置,例如 WebSocket 配置较长的 path - +::: ## OutboundConfigurationObject ---- - ```json { "servers": [ @@ -51,12 +44,8 @@ weight: 9 一个数组,代表一组 Shadowsocks 服务端设置, 其中每一项是一个 [ServerObject](#serverobject)。 - - ### ServerObject ---- - ```json { "email": "love@xray.com", diff --git a/docs/config/outbound-protocols/socks.md b/docs/config/outbounds/socks.md similarity index 94% rename from docs/config/outbound-protocols/socks.md rename to docs/config/outbounds/socks.md index e47e0bd..f979777 100644 --- a/docs/config/outbound-protocols/socks.md +++ b/docs/config/outbounds/socks.md @@ -1,22 +1,15 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: Socks -weight: 5 ---- +# 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)。 ::: danger **socks 协议没有对传输加密,不适宜经公网中传输** +::: `socks inbound` 更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。 - ## OutboundConfigurationObject ---- - ```json { "servers": [ @@ -61,7 +54,7 @@ Socks 服务器列表,其中每一项是一个服务器配置。 ::: tip 仅支持连接到 Socks 5 服务器。 - +::: > `port`: number @@ -75,10 +68,7 @@ Socks 服务器列表,其中每一项是一个服务器配置。 默认值为空。 - - #### UserObject ---- ```json { diff --git a/docs/config/outbound-protocols/trojan.md b/docs/config/outbounds/trojan.md similarity index 93% rename from docs/config/outbound-protocols/trojan.md rename to docs/config/outbounds/trojan.md index 984f146..dbbce75 100644 --- a/docs/config/outbound-protocols/trojan.md +++ b/docs/config/outbounds/trojan.md @@ -1,20 +1,13 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: Trojan -weight: 8 ---- +# Trojan [Trojan](https://trojan-gfw.github.io/trojan/protocol) 协议 ::: danger Trojan 被设计工作在正确配置的加密 TLS 隧道 - +::: ## OutboundConfigurationObject ---- - ```json { "servers": [ @@ -34,12 +27,8 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道 一个数组,其中每一项是一个 [ServerObject](#serverobject)。 - - ### ServerObject ---- - ```json { "address": "127.0.0.1", @@ -80,24 +69,22 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道 - `xtls-rprx-splice`:Linux 平台下最建议使用的流控模式 - `xtls-rprx-splice-udp443`:同 `xtls-rprx-splice`, 但是放行了目标为 443 端口的 UDP 流量 -::: warning -**注意** - +::: warning 注意 当 `flow` 被指定时,还需要将该出站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。 +::: 此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。 -{{% notice %}} -**关于 `xtls-rprx-*-udp443` 流控模式** - +::: tip 关于 xtls-rprx-*-udp443 流控模式 启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC),这样应用就不会使用 QUIC 而会使用 TLS,XTLS 才会真正生效。实际上,QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能, 它作为 UDP 流量在通过 Trojan 协议传输时,底层协议为 TCP,就相当于两层 TCP 了。 若不需要拦截,请在客户端填写 `xtls-rprx-*-udp443`,服务端不变。 +::: - -::: danger +::: tip 关于 Splice 模式 Splice 是 Linux Kernel 提供的函数,系统内核直接转发 TCP,不再经过 Xray 的内存,大大减少了数据拷贝、CPU 上下文切换的次数。 +::: Splice 模式的的使用限制: @@ -109,7 +96,6 @@ Splice 模式的的使用限制: 需要注意的是,使用 mKCP 协议时不会使用 Splice(是的,虽然没有报错,但实际上根本没用到)。 - > `level`: number 用户等级,连接会使用这个用户等级对应的[本地策略](../../base/policy#levelpolicyobject)。 diff --git a/docs/config/outbound-protocols/vless.md b/docs/config/outbounds/vless.md similarity index 91% rename from docs/config/outbound-protocols/vless.md rename to docs/config/outbounds/vless.md index fa57b6c..9524ca0 100644 --- a/docs/config/outbound-protocols/vless.md +++ b/docs/config/outbounds/vless.md @@ -1,14 +1,9 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: VLESS -weight: 6 ---- +# VLESS ::: danger -目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。
-目前 VLESS 不支持分享。
- +目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。 +目前 VLESS 不支持分享。 +::: VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 Xray 客户端和服务器之间的桥梁。 @@ -16,8 +11,6 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部 ## OutboundConfigurationObject ---- - ```json { "vnext": [ @@ -41,12 +34,8 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部 一个数组, 表示 VLESS 服务器列表,包含一组指向服务端的配置, 其中每一项是一个服务器配置。 - - ### ServerObject ---- - ```json { "address": "example.com", @@ -74,12 +63,8 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部 数组, 一组服务端认可的用户列表, 其中每一项是一个用户配置 - - ### UserObject ---- - ```json { "id": "5783a3e7-e373-51cd-8642-c83782b807c5", @@ -91,21 +76,21 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部 > `id`: string -VLESS 的用户 ID,可以是任意小于30字节的字符串, 也可以是一个合法的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 -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.
-也可以使用命令 `xray uuid` 生成随机的UUID. +你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID,也可以使用命令 `xray uuid` 生成随机的UUID. > `encryption`: "none" 需要填 `"none"`,不能留空。 -该要求是为了提醒使用者没有加密,也为了以后出加密方式时,防止使用者填错属性名或填错位置导致裸奔。
+该要求是为了提醒使用者没有加密,也为了以后出加密方式时,防止使用者填错属性名或填错位置导致裸奔。 + 若未正确设置 encryption 的值,使用 Xray 或 -test 时会收到错误信息。 > `flow`: string @@ -121,24 +106,21 @@ VLESS 的用户 ID,可以是任意小于30字节的字符串, 也可以是一 - `xtls-rprx-splice`:Linux 平台下最建议使用的流控模式 - `xtls-rprx-splice-udp443`:同 `xtls-rprx-splice`, 但是放行了目标为 443 端口的 UDP 流量 -::: warning -**注意** - +::: warning 注意 当 `flow` 被指定时,还需要将该出站协议的 `streamSettings.security` 一项指定为 `xtls`,`tlsSettings` 改为 `xtlsSettings`。详情请参考 [streamSettings](../../base/transport#streamsettingsobject)。 此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。 +::: - -{{% notice %}} -**关于 `xtls-rprx-*-udp443` 流控模式** - +::: tip 关于 xtls-rprx-*-udp443 流控模式 启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC),这样应用就不会使用 QUIC 而会使用 TLS,XTLS 才会真正生效。实际上,QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能,它作为 UDP 流量在通过 VLESS 协议传输时,底层协议为 TCP,就相当于两层 TCP 了。 若不需要拦截,请在客户端填写 `xtls-rprx-*-udp443`,服务端不变。 +::: - -::: danger +::: tip 关于 Splice 模式 Splice 是 Linux Kernel 提供的函数,系统内核直接转发 TCP,不再经过 Xray 的内存,大大减少了数据拷贝、CPU 上下文切换的次数。 +::: Splice 模式的的使用限制: diff --git a/docs/config/outbound-protocols/vmess.md b/docs/config/outbounds/vmess.md similarity index 90% rename from docs/config/outbound-protocols/vmess.md rename to docs/config/outbounds/vmess.md index 9d699be..4f37c52 100644 --- a/docs/config/outbound-protocols/vmess.md +++ b/docs/config/outbounds/vmess.md @@ -1,22 +1,13 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: VMess -weight: 7 ---- - # VMess [VMess](../../../develop/protocols/vmess) 是一个加密传输协议,通常作为 Xray 客户端和服务器之间的桥梁。 ::: danger -VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装`ntp`服务来自动同步系统时间。
- +VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 90 秒之内,时区无关。在 Linux 系统中可以安装`ntp`服务来自动同步系统时间。 +::: ## OutboundConfigurationObject ---- - ```json { "vnext": [ @@ -42,10 +33,7 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 其中每一项是一个服务端配置[ServerObject](#serverobject)。 - - ### ServerObject ---- ```json { @@ -72,7 +60,7 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在 #### UserObject ---- + ```json { "id": "5783a3e7-e373-51cd-8642-c83782b807c5", @@ -84,15 +72,15 @@ 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 映射) 其映射标准在[VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5](https://github.com/XTLS/Xray-core/issues/158) -你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID.
-也可以使用命令 `xray uuid` 生成随机的UUID. +你可以使用命令 `xray uuid -map "自定义字符串"` 生成自定义字符串所映射的的 UUID, 也可以使用命令 `xray uuid` 生成随机的UUID. > `alterId`:number @@ -104,7 +92,7 @@ Vmess 的用户 ID,可以是任意小于30字节的字符串, 也可以是一 ::: tip 客户端 AlterID 设置为 0 代表启用 VMessAEAD ;服务端为自动适配,可同时兼容启用和未开启 VMessAEAD 的客户端。 客户端可通过设置环境变量 Xray_VMESS_AEAD_DISABLED=true 强行禁用 VMessAEAD - +::: > `level`: number @@ -123,3 +111,4 @@ level 的值, 对应 [policy](../../base/policy#policyobject) 中 level 的值. ::: tip 推荐使用`"auto"`加密方式,这样可以永久保证安全性和兼容性。 +::: \ No newline at end of file diff --git a/docs/config/base/policy.md b/docs/config/policy.md similarity index 100% rename from docs/config/base/policy.md rename to docs/config/policy.md diff --git a/docs/config/base/reverse.md b/docs/config/reverse.md similarity index 100% rename from docs/config/base/reverse.md rename to docs/config/reverse.md diff --git a/docs/config/base/routing.md b/docs/config/routing.md similarity index 100% rename from docs/config/base/routing.md rename to docs/config/routing.md diff --git a/docs/config/base/stats.md b/docs/config/stats.md similarity index 100% rename from docs/config/base/stats.md rename to docs/config/stats.md diff --git a/docs/config/base/transport.md b/docs/config/transport.md similarity index 100% rename from docs/config/base/transport.md rename to docs/config/transport.md diff --git a/docs/config/transports/_index.md b/docs/config/transports/README.md similarity index 66% rename from docs/config/transports/_index.md rename to docs/config/transports/README.md index d2147b8..8f8889e 100644 --- a/docs/config/transports/_index.md +++ b/docs/config/transports/README.md @@ -1,16 +1,6 @@ ---- -alwaysopen: false -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -# head:
-hide: - - toc -# post: " \U0001F44B" -title: 传输方式列表 -weight: 7 ---- +# 传输方式列表 -::: warning**这个章节包含了目前所有的传输方式及相关的具体配置.**{{% /alert %}} +这个章节包含了目前所有的传输方式及相关的具体配置. ## 传输方式列表 diff --git a/docs/config/transports/domainsocket.md b/docs/config/transports/domainsocket.md index 4f68890..e6206c3 100644 --- a/docs/config/transports/domainsocket.md +++ b/docs/config/transports/domainsocket.md @@ -1,14 +1,9 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: Domain Socket -weight: 3 ---- +# Domain Socket ::: danger 推荐写到 [inbounds](../../base/inbounds) 的 `listen` 处,传输方式可选 TCP、WebSocket、HTTP/2. 未来这里的 DomainSocket 可能会被弃用。 - +::: Domain Socket 使用标准的 Unix domain socket 来传输数据。 @@ -21,8 +16,6 @@ Domain Socket 使用标准的 Unix domain socket 来传输数据。 ## DomainSocketObject ---- - `DomainSocketObject` 对应传输配置的 `dsSettings` 项。 ```json @@ -36,13 +29,15 @@ Domain Socket 使用标准的 Unix domain socket 来传输数据。 > `path`: string 一个合法的文件路径。 + ::: danger 在运行 Xray 之前,这个文件必须不存在。 - +::: > `abstract`: true | false 是否为 abstract domain socket,默认值 `false`。 > `padding`: true | false + abstract domain socket 是否带 padding,默认值 `false`。 diff --git a/docs/config/transports/grpc.md b/docs/config/transports/grpc.md index 503e7f2..00dddad 100644 --- a/docs/config/transports/grpc.md +++ b/docs/config/transports/grpc.md @@ -1,23 +1,29 @@ ---- -date: "2021-3-14T00:00:00.000Z" -description: Project X 的文档. -title: gRPC -weight: 7 ---- +# gRPC 基于 gRPC 的传输方式。 -它基于 HTTP/2 协议,可以通过其它的 HTTP 服务器(如 Nginx)进行中转。 +它基于 HTTP/2 协议,理论上可以通过其它支持 HTTP/2 的服务器(如 Nginx)进行中转。 + +gRPC(HTTP/2)内置多路复用,不建议使用 gRPC 与 HTTP/2 时启用 mux.cool。 + +::: tip +如果您使用 Caddy 或 Nginx 等反向代理,请务必使用 HTTP/2 或 h2c 连接到 Xray。 +::: + +::: warning +⚠️ 如果你正在使用回落,请注意下列事项: +- 请确认 (x)tlsSettings.alpn 中包含 h2,否则 gRPC(HTTP/2)无法完成 TLS 握手。 +- gRPC 无法通过进行 Path 分流,建议使用 SNI 分流。 +::: ## GRPCObject ---- - `GRPCObject` 对应传输配置的 `grpcSettings` 项。 ```json { - "serviceName": "name" + "serviceName": "name", + "multiMode": false } ``` @@ -27,3 +33,8 @@ weight: 7 客户端会使用此名称进行通信,服务器会验证服务名称是否匹配。 +> `multiMode`: bool + +一个布尔值。表示是否启用 `multiMode`。 + +这是一个 **实验性** 选项,可能不会被长期保留,也不保证跨版本兼容。此模式在 **测试环境中** 能够带来约 20% 的性能提升,实际效果因传输速率不同而不同。 \ No newline at end of file diff --git a/docs/config/transports/h2.md b/docs/config/transports/h2.md index 9027e77..7a8bdf6 100644 --- a/docs/config/transports/h2.md +++ b/docs/config/transports/h2.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: HTTP/2 -weight: 5 ---- +# HTTP/2 基于 HTTP/2 的传输方式。 @@ -11,15 +6,21 @@ weight: 5 由 HTTP/2 的建议,客户端和服务器必须同时开启 TLS 才可以正常使用这个传输方式。 +HTTP/2 内置多路复用,不建议使用 HTTP/2 时启用 mux.cool。 + ::: tip 当前版本的 HTTP/2 的传输方式并不强制要求服务器端有 TLS 配置. 这使得可以在特殊用途的分流部署环境中,由外部网关组件完成 TLS 层对话,Xray 作为后端应用,网关和 Xray 间使用称为 `h2c` 的明文 http/2 进行通讯。 +::: +::: warning +⚠️ 如果你正在使用回落,请注意下列事项: +- 请确认 (x)tlsSettings.alpn 中包含 h2,否则 HTTP/2 无法完成 TLS 握手。 +- HTTP/2 无法通过进行 Path 分流,建议使用 SNI 分流。 +::: ## HttpObject ---- - `HttpObject` 对应传输配置的 `httpSettings` 项。 ```json diff --git a/docs/config/transports/mkcp.md b/docs/config/transports/mkcp.md index ff288ae..0c56351 100644 --- a/docs/config/transports/mkcp.md +++ b/docs/config/transports/mkcp.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: mKCP -weight: 4 ---- +# mKCP mKCP 使用 UDP 来模拟 TCP 连接。 @@ -11,12 +6,10 @@ mKCP 牺牲带宽来降低延迟。传输同样的内容,mKCP 一般比 TCP ::: tip 请确定主机上的防火墙配置正确 - +::: ## KcpObject ---- - `KcpObject` 对应传输配置的 `kcpSettings` 项。 ```json @@ -68,7 +61,7 @@ mKCP 牺牲带宽来降低延迟。传输同样的内容,mKCP 一般比 TCP 以客户端发送数据为例,客户端的 `uplinkCapacity` 指定了发送数据的速度,而服务器端的 `downlinkCapacity` 指定了接收数据的速度。两者的值以较小的一个为准。 推荐把 `downlinkCapacity` 设置为一个较大的值,比如 100,而 `uplinkCapacity` 设为实际的网络速度。当速度不够时,可以逐渐增加 `uplinkCapacity` 的值,直到带宽的两倍左右。 - +::: > `congestion`: true | false @@ -95,7 +88,7 @@ mKCP 牺牲带宽来降低延迟。传输同样的内容,mKCP 一般比 TCP 在需要高速传输时,指定较大的 `readBufferSize` 和 `writeBufferSize` 会在一定程度上提高速度,但也会使用更多的内存。 在网速不超过 20MB/s 时,默认值 1MB 可以满足需求;超过之后,可以适当增加 `readBufferSize` 和 `writeBufferSize` 的值,然后手动平衡速度和内存的关系。 - +::: > `header`: [HeaderObject](#headerobject) @@ -106,16 +99,11 @@ mKCP 牺牲带宽来降低延迟。传输同样的内容,mKCP 一般比 TCP 可选的混淆密码,使用 AES-128-GCM 算法混淆流量数据,客户端和服务端需要保持一致。 本混淆机制不能用于保证通信内容的安全,但可能可以对抗部分封锁。 -::: tip -目前测试环境下开启此设置后没有出现原版未混淆版本的封端口现象 - - +> 目前测试环境下开启此设置后没有出现原版未混淆版本的封端口现象 ### HeaderObject ---- - ```json { "type": "none" @@ -133,40 +121,26 @@ mKCP 牺牲带宽来降低延迟。传输同样的内容,mKCP 一般比 TCP - `"dtls"`:伪装成 DTLS 1.2 数据包。 - `"wireguard"`:伪装成 WireGuard 数据包。(并不是真正的 WireGuard 协议) - - ## 鸣谢 ---- - - [@skywind3000](https://github.com/skywind3000) 发明并实现了 KCP 协议。 - [@xtaci](https://github.com/xtaci) 将 KCP 由 C 语言实现翻译成 Go。 - [@xiaokangwang](https://github.com/xiaokangwang) 测试 KCP 与 Xray 的整合并提交了最初的 PR。 - - ## 对 KCP 协议的改进 ---- - ### 更小的协议头 ---- - 原生 KCP 协议使用了 24 字节的固定头部,而 mKCP 修改为数据包 18 字节,确认(ACK)包 16 字节。更小的头部有助于躲避特征检查,并加快传输速度。 另外,原生 KCP 的单个确认包只能确认一个数据包已收到,也就是说当 KCP 需要确认 100 个数据已收到时,它会发出 24 \* 100 = 2400 字节的数据。其中包含了大量重复的头部数据,造成带宽的浪费。mKCP 会对多个确认包进行压缩,100 个确认包只需要 16 + 2 + 100 \* 4 = 418 字节,相当于原生的六分之一。 ### 确认包重传 ---- - 原生 KCP 协议的确认(ACK)包只发送一次,如果确认包丢失,则一定会导致数据重传,造成不必要的带宽浪费。而 mKCP 会以一定的频率重发确认包,直到发送方确认为止。单个确认包的大小为 22 字节,相比起数据包的 1000 字节以上,重传确认包的代价要小得多。 ### 连接状态控制 - ---- mKCP 可以有效地开启和关闭连接。当远程主机主动关闭连接时,连接会在两秒钟之内释放;当远程主机断线时,连接会在最多 30 秒内释放。 原生 KCP 不支持这个场景。 diff --git a/docs/config/transports/quic.md b/docs/config/transports/quic.md index 9024a93..984eb39 100644 --- a/docs/config/transports/quic.md +++ b/docs/config/transports/quic.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: QUIC -weight: 6 ---- +# QUIC QUIC 全称 Quick UDP Internet Connection,是由 Google 提出的使用 UDP 进行多路并发传输的协议。其主要优势是: @@ -19,14 +14,12 @@ QUIC 目前处于实验期,使用了正在标准化过程中的 IETF 实现, ## QuicObject ---- - `QuicObject` 对应传输配置的 `quicSettings` 项。 ::: danger 对接的两端的配置必须完全一致,否则连接失败。 QUIC 强制要求开启 TLS,在传输配置中没有开启 TLS 时,Xray 会自行签发一个证书进行 TLS 通讯。 - +::: ```json { @@ -56,12 +49,8 @@ QUIC 强制要求开启 TLS,在传输配置中没有开启 TLS 时,Xray 会 数据包头部伪装设置 - - ### HeaderObject ---- - ```json { "type": "none" @@ -82,4 +71,4 @@ QUIC 强制要求开启 TLS,在传输配置中没有开启 TLS 时,Xray 会 ::: tip 当加密和伪装都不启用时,数据包即为原始的 QUIC 数据包,可以与其它的 QUIC 工具对接。 为了避免被探测,建议加密或伪装至少开启一项。 - +::: diff --git a/docs/config/transports/tcp.md b/docs/config/transports/tcp.md index aab0c6e..4c1b3ae 100644 --- a/docs/config/transports/tcp.md +++ b/docs/config/transports/tcp.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: TCP -weight: 1 ---- +# TCP TCP 传输模式是目前推荐使用的传输模式之一. @@ -11,8 +6,6 @@ TCP 传输模式是目前推荐使用的传输模式之一. ## TcpObject ---- - `TcpObject` 对应传输配置的 `tcpSettings` 项。 ```json @@ -27,7 +20,9 @@ TCP 传输模式是目前推荐使用的传输模式之一. > `acceptProxyProtocol`: true | false 仅用于 inbound,指示是否接收 PROXY protocol。 + [PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) 专用于传递请求的真实来源 IP 和端口,**若你不了解它,请先忽略该项**。 + 常见的反代软件(如 HAProxy、Nginx)都可以配置发送它,VLESS fallbacks xver 也可以发送它。 填写 `true` 时,最底层 TCP 连接建立后,请求方必须先发送 PROXY protocol v1 或 v2,否则连接会被关闭。 @@ -38,17 +33,12 @@ TCP 传输模式是目前推荐使用的传输模式之一. 数据包头部伪装设置,默认值为 `NoneHeaderObject`。 - ::: tip HTTP 伪装无法被其它 HTTP 服务器(如 Nginx)分流,但可以被 VLESS fallbacks path 分流。 - - - +::: ### NoneHeaderObject ---- - 不进行伪装 ```json @@ -61,12 +51,8 @@ HTTP 伪装无法被其它 HTTP 服务器(如 Nginx)分流,但可以被 VL 指定不进行伪装 - - ### HttpHeaderObject ---- - HTTP 伪装配置必须在对应的入站出站连接上同时配置,且内容必须一致。 ```json @@ -89,12 +75,8 @@ HTTP 请求 HTTP 响应 - - #### HTTPRequestObject ---- - ```json { "version": "1.1", @@ -131,12 +113,8 @@ HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的 每次请求会附上所有的键,并随机选择一个对应的值。默认值见上方示例。 - - #### HTTPResponseObject ---- - ```json { "version": "1.1", diff --git a/docs/config/transports/websocket.md b/docs/config/transports/websocket.md index 52c06ed..451df6d 100644 --- a/docs/config/transports/websocket.md +++ b/docs/config/transports/websocket.md @@ -1,9 +1,4 @@ ---- -date: "2020-12-23T00:00:00.000Z" -description: Project X 的文档. -title: WebSocket -weight: 2 ---- +# WebSocket 使用标准的 WebSocket 来传输数据。 @@ -11,7 +6,7 @@ WebSocket 连接可以被其它 HTTP 服务器(如 Nginx)分流,也可以 ::: tip Websocket 会识别 HTTP 请求的 X-Forwarded-For 头来覆写流量的源地址,优先级高于 PROXY protocol。 - +::: ## WebSocketObject @@ -30,7 +25,9 @@ Websocket 会识别 HTTP 请求的 X-Forwarded-For 头来覆写流量的源地 > `acceptProxyProtocol`: true | false 仅用于 inbound,指示是否接收 PROXY protocol。 + [PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) 专用于传递请求的真实来源 IP 和端口,**若你不了解它,请先忽略该项**。 + 常见的反代软件(如 HAProxy、Nginx)都可以配置发送它,VLESS fallbacks xver 也可以发送它。 填写 `true` 时,最底层 TCP 连接建立后,请求方必须先发送 PROXY protocol v1 或 v2,否则连接会被关闭。 @@ -39,6 +36,12 @@ Websocket 会识别 HTTP 请求的 X-Forwarded-For 头来覆写流量的源地 WebSocket 所使用的 HTTP 协议路径,默认值为 `"/"`。 +如果路径中包含 `ed` 参数,将会启用 `Early Data` 以降低延迟,其值为首包长度阈值。如果首包长度超过此值,就不会启用 `Early Data`。建议的值为 2048。 + +::: warning +`Early Data` 使用 `Sec-WebSocket-Protocol` 头承载数据。如果你遇到兼容性问题,可以尝试调低阈值。 +::: + > `headers`: map \{string: string\} 自定义 HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是字符串。 diff --git a/package.json b/package.json index ed30afb..c0a492f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "main": "index.js", "repository": "https://github.com/XTLS/Xray-docs-next.git", "author": "Project X", - "license": "CC BY-SA 4.0", + "license": "CC-BY-SA-4.0", "devDependencies": { "@vuepress/plugin-back-to-top": "^1.8.2", "vuepress": "^1.8.2" @@ -13,4 +13,4 @@ "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs" } -} +} \ No newline at end of file