Fix: format

This commit is contained in:
JimhHan 2021-03-26 14:01:07 +08:00
parent 9bf9c2f885
commit 71eaa61dbd
No known key found for this signature in database
GPG key ID: 48D5D7CF95157AC5
60 changed files with 2107 additions and 2242 deletions

View file

@ -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
@ -73,7 +68,6 @@ API接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供
}
```
## 支持的 API 列表
### HandlerService

View file

@ -21,8 +21,8 @@ Xray 内置的 DNS 模块,主要有两大用途:
只支持最基本的 IP 查询A 和 AAAA 记录)。其他查询不会进入内置 DNS 服务器。
:::
## DNS 处理流程
DNS 服务器配置模块可以配置多个 DNS 服务器, 并且指定优先匹配列表.
1. 查询的域名与某个 DNS 服务器指定的域名列表匹配时Xray 会优先使用这个 DNS 服务器进行查询。
@ -33,8 +33,8 @@ DNS 服务器的处理流程示意图如下:
![](./dns_flow.png?classes=border,shadow)
## DnsObject
`DnsObject` 对应配置文件的 `dns` 项。
```json
@ -70,7 +70,7 @@ 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#预定义域名列表)。
@ -109,20 +109,17 @@ DNS 服务器的处理流程示意图如下:
由内置 DNS 发出的查询流量,除 `localhost``DOHL_` 模式外,都可以用此标识在路由使用 `inboundTag` 进行匹配。
### ServerObject
```json
{
"address": "1.2.3.4",
"port": 5353,
"domains": [
"domain:xray.com"
],
"expectIPs": [
"geoip:cn"
]
"domains": ["domain:xray.com"],
"expectIPs": ["geoip:cn"]
}
```
> `address`: address
一个 DNS 服务器列表支持的类型有两种DNS 地址(字符串形式)和 ServerObject 。

View file

@ -26,7 +26,6 @@ Xray 提供以下环境变量以供修改 Xray 的一些底层配置。
可打开此环境变量并根据是否有输出 XTLS 相关信息, 来确定 XTLS 是否成功被应用.
:::
## 资源文件路径
- 名称:`xray.location.asset``XRAY_LOCATION_ASSET`

View file

@ -8,7 +8,6 @@ fallback 也可以将不同类型的流量根据 path 进行分流, 从而实现
目前您可以在使用 VLESS 或者 trojan 协议时, 通过配置 fallbacks 来使用回落这一特性, 并且创造出非常丰富的组合玩法.
## fallbacks 配置
```json
@ -48,6 +47,7 @@ VLESS 会把 TLS 解密后首包长度 < 18 或协议版本无效、身份认证
其它传输组合必须删掉 `fallbacks` 项或所有子元素,此时也不会开启 FallbackVLESS 会等待读够所需长度,协议版本无效或身份认证失败时,将直接断开连接。
> `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"/>

View file

@ -28,7 +28,7 @@ $ xray run -confdir /etc/xray/confs
比如:
* base.json
- base.json
```json
{
@ -43,7 +43,7 @@ $ xray run -confdir /etc/xray/confs
}
```
* outbounds.json
- outbounds.json
```json
{
@ -61,7 +61,7 @@ $ xray run -confdir /etc/xray/confs
如果需要改编日志 log 的级别,也不需要改 `base.json`,只需后续增加一个配置:
* debuglog.json
- debuglog.json
```json
{
@ -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,7 +86,7 @@ $ xray run -confdir /etc/xray/confs
以下例子不是有效配置,只为展示上述规则。
* 000.json
- 000.json
```json
{
@ -100,7 +100,7 @@ $ xray run -confdir /etc/xray/confs
}
```
* 001.json
- 001.json
```json
{
@ -113,7 +113,7 @@ $ xray run -confdir /etc/xray/confs
}
```
* 002.json
- 002.json
```json
{
@ -145,8 +145,6 @@ $ xray run -confdir /etc/xray/confs
}
```
## 推荐的多文件列表
执行:

View file

@ -29,18 +29,18 @@
- iOS / Mac
- [Shadowrocket](https://apps.apple.com/app/shadowrocket/id932747118)
## Fallbacks
Fallbacks 是 Xray 独创的新型协议回落模式解析, 可有效防止主动探测, 自由配置常用端口多服务共享.
目前 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)

View file

@ -63,7 +63,7 @@
底层传输方式transport是当前 Xray 节点和其它节点对接的方式
> `tag`: string
此入站连接的标识,用于在其它的配置中定位此连接。
> 此入站连接的标识,用于在其它的配置中定位此连接。
::: danger
当其不为空时,其值必须在所有 `tag` 中**唯一**。
@ -73,6 +73,7 @@
流量探测主要作用于在透明代理等用途.
比如一个典型流程如下:
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
@ -121,6 +122,7 @@
> `strategy`: "always" | "random"
端口分配策略。
- `"always"` 表示总是分配所有已指定的端口,`port` 中指定了多少个端口Xray 就会监听这些端口。
- `"random"` 表示随机开放端口,每隔 `refresh` 分钟在 `port` 范围中随机选取 `concurrency` 个端口来监听。

View file

@ -31,4 +31,3 @@ VLESS 是一个无状态的轻量传输协议,可以作为 Xray 客户端和
> [Shadowsocks](./shadowsocks.md)
[Shadowsocks](https://zh.wikipedia.org/wiki/Shadowsocks) 协议。

View file

@ -1,4 +1,5 @@
# HTTP
HTTP 协议。
::: warning
@ -7,7 +8,6 @@ HTTP 协议。
`http` 入站更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
::: tip TIP 1
`http proxy` 只能代理 tcp 协议udp 系的协议均不能通过。
:::
@ -77,4 +77,3 @@ userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值
> `pass`: string
密码,字符串类型。必填。

View file

@ -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
@ -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

View file

@ -8,7 +8,6 @@
`socks` 入站更有意义的用法是在局域网或本机环境下监听,为其他程序提供本地服务。
## InboundConfigurationObject
```json
@ -58,7 +57,6 @@ Socks 协议的认证方式,支持 `"noauth"` 匿名方式和 `"password"` 用
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值。 如不指定, 默认为 0。
### AccountObject
```json

View file

@ -64,6 +64,7 @@ fallbacks 的具体配置请点击 [FallbackObject](../examples/fallback.md#fall
VLESS 的用户 ID可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
- 写 `"id": "我爱🍉老师1314"`,
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)

View file

@ -48,12 +48,12 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
> `disableInsecureEncryption`: true | false
是否禁止客户端使用不安全的加密方式,如果设置为 true 当客户端指定下列加密方式时,服务器会主动断开连接。
- `"none"`
- `"aes-128-cfb"`
默认值为`false`
### ClientObject
```json
@ -71,6 +71,7 @@ Vmess 的用户 ID可以是任意小于30字节的字符串, 也可以是一
::: tip
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
- 写 `"id": "我爱🍉老师1314"`,
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
:::

View file

@ -10,7 +10,6 @@
列表中的第一个元素作为主 outbound。当路由匹配不存在或没有匹配成功时流量由主 outbound 发出。
:::
```json
{
"outbounds": [
@ -32,12 +31,15 @@
> `sendThrough`: address
用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 `"0.0.0.0"`
> `protocol`: string
连接协议名称,可选的协议类型见 [outbound 可用协议列表](./outbounds/)。
> `settings`: OutboundConfigurationObject
具体的配置内容,视协议不同而不同。详见每个协议中的 `OutboundConfigurationObject`
> `tag`: string
此出站连接的标识,用于在其它的配置中定位此连接。
@ -58,8 +60,8 @@
Mux 相关的具体配置。
### ProxySettingsObject
```json
{
"tag": "another-outbound-tag"
@ -83,6 +85,7 @@ Mux 相关的具体配置。
:::
### MuxObject
Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../../development/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
`MuxObject` 对应 `OutboundObject` 中的 `mux` 项。
@ -97,6 +100,7 @@ Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细
> `enabled`: true | false
是否启用 Mux 转发请求,默认值 `false`
> `concurrency`: number
最大并发连接数。最小值 `1`,最大值 `1024`,默认值 `8`

View file

@ -15,6 +15,7 @@ Freedom 是一个出站协议,可以用来向任意网络发送(正常的)
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
在目标地址为域名时, 配置相应的值, Freedom 的行为模式如下:
- `"AsIs"`: Freedom 通过系统 DNS 服务器解析获取 IP, 向此域名发出连接.
- `"UseIP"``"UseIPv4"``"UseIPv6"`: Xray 使用 [内置 DNS 服务器](../dns.md) 解析获取 IP, 向此域名发出连接.
默认值为 `"AsIs"`

View file

@ -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

View file

@ -75,8 +75,10 @@ Trojan 被设计工作在正确配置的加密 TLS 隧道
此外,目前 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 而会使用 TLSXTLS 才会真正生效。实际上QUIC 本身也不适合被代理,因为 QUIC 自带了 TCP 的功能, 它作为 UDP 流量在通过 Trojan 协议传输时,底层协议为 TCP就相当于两层 TCP 了。
若不需要拦截,请在客户端填写 `xtls-rprx-*-udp443`,服务端不变。

View file

@ -78,6 +78,7 @@ VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部
VLESS 的用户 ID可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
- 写 `"id": "我爱🍉老师1314"`,
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
@ -112,7 +113,10 @@ VLESS 的用户 ID可以是任意小于30字节的字符串, 也可以是一
此外,目前 XTLS 仅支持 TCP、mKCP、DomainSocket 这三种传输方式。
:::
<!-- prettier-ignore-start -->
::: tip 关于 xtls-rprx-*-udp443 流控模式
<!-- prettier-ignore-end -->
启用了 Xray-core 的 XTLS 时,通往 UDP 443 端口的流量默认会被拦截(一般情况下为 QUIC这样应用就不会使用 QUIC 而会使用 TLSXTLS 才会真正生效。实际上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。

View file

@ -57,8 +57,6 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
其中每一项是一个用户[UserObject](#userobject)。
#### UserObject
```json
@ -75,6 +73,7 @@ VMess 依赖于系统时间,请确保使用 Xray 的系统 UTC 时间误差在
Vmess 的用户 ID可以是任意小于 30 字节的字符串, 也可以是一个合法的 UUID.
自定义字符串和其映射的 UUID 是等价的, 这意味着你将可以这样在配置文件中写 id 来标识同一用户,即
- 写 `"id": "我爱🍉老师1314"`,
- 或写 `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (此 UUID 是 `我爱🍉老师1314` 的 UUID 映射)
@ -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

View file

@ -29,6 +29,7 @@
}
}
```
> `level`: map{string: [LevelPolicyObject](#levelpolicyobject)}
一组键值对每个键是一个字符串形式的数字JSON 的要求),比如 `"0"``"1"` 等,双引号不能省略,此数字对应用户等级。每一个值是一个 [LevelPolicyObject](#levelpolicyobject).
@ -41,7 +42,6 @@
Xray 系统级别的策略
### LevelPolicyObject
```json
@ -55,6 +55,7 @@ Xray系统级别的策略
"bufferSize": 10240
}
```
> `handshake`: number
连接建立时的握手时间限制。单位为秒。默认值为 `4`。在入站代理处理一个新连接时,在握手阶段如果使用的时间超过这个时间,则中断该连接。
@ -88,9 +89,10 @@ Xray系统级别的策略
每个连接的内部缓存大小。单位为 kB。当值为 `0` 时,内部缓存被禁用。
默认值:
* 在 ARM、MIPS、MIPSLE 平台上,默认值为 `0`
* 在 ARM64、MIPS64、MIPS64LE 平台上,默认值为 `4`
* 在其它平台上,默认值为 `512`
- 在 ARM、MIPS、MIPSLE 平台上,默认值为 `0`
- 在 ARM64、MIPS64、MIPS64LE 平台上,默认值为 `4`
- 在其它平台上,默认值为 `512`
### SystemPolicyObject

View file

@ -4,11 +4,11 @@
反向代理的大致工作原理如下:
* 假设在主机 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。
@ -18,7 +18,6 @@
反向代理功能尚处于测试阶段,可能会有一些问题。
:::
## ReverseObject
`ReverseObject` 对应配置文件的 `reverse` 项。
@ -44,15 +43,12 @@
> `bridges`: \[[BridgeObject](#bridgeobject)\]
数组,每一项表示一个 `bridge`。每个 `bridge` 的配置是一个 [BridgeObject](#bridgeobject)。
> `portals`: \[[PortalObject](#portalobject)\]
数组,每一项表示一个 `portal`。每个 `portal` 的配置是一个 [PortalObject](#bridgeobject)。
### BridgeObject
```json
@ -64,16 +60,13 @@
> `tag`: string
所有由 `bridge` 发出的连接,都会带有这个标识。可以在 [路由配置](./routing.md) 中使用 `inboundTag` 进行识别。
> `domain`: string
指定一个域名,`bridge``portal` 建立的连接,都会使用这个域名进行发送。
这个域名只作为 `bridge``portal` 的通信用途,不必真实存在。
### PortalObject
```json
@ -85,12 +78,10 @@
> `tag`: string
`portal` 的标识。在 [路由配置](./routing.md) 中使用 `outboundTag` 将流量转发到这个 `portal`
> `domain`: string
一个域名。当 `portal` 接收到流量时,如果流量的目标域名是此域名,则 `portal` 认为当前连接上 `bridge` 发来的通信连接。而其它流量则会被当成需要转发的流量。`portal` 所做的工作就是把这两类连接进行识别并拼接。
::: tip
@ -99,7 +90,6 @@
## 完整配置样例
::: tip
在运行过程中,建议先启用 `bridge`,再启用 `portal`
:::
@ -124,7 +114,7 @@
outbound:
```json
{
({
"tag": "out",
"protocol": "freedom",
"settings": {
@ -147,7 +137,7 @@ outbound:
]
},
"tag": "interconn"
}
})
```
路由配置:
@ -176,7 +166,6 @@ outbound:
}
```
### portal 配置
`portal` 通常需要两个 inbound一个用于接收 `bridge` 的连接,另一个用于接收实际的流量。同时你也需要用路由区分两种流量。
@ -197,7 +186,7 @@ outbound:
inbound:
```json
{
({
"tag": "external",
"port": 80, // 开放 80 端口,用于接收外部的 HTTP 访问
"protocol": "dokodemo-door",
@ -218,7 +207,7 @@ inbound:
}
]
}
}
})
```
路由配置:
@ -243,4 +232,3 @@ inbound:
]
}
```

View file

@ -17,15 +17,16 @@
}
}
```
> `domainStrategy`: "AsIs" | "IPIfNonMatch" | "IPOnDemand"
域名解析策略,根据不同的设置使用不同的策略。
* `"AsIs"`:只使用域名进行路由选择。默认值。
* `"IPIfNonMatch"`:当域名没有匹配任何规则时,将域名解析成 IPA 记录或 AAAA 记录)再次进行匹配;
* 当一个域名有多个 A 记录时,会尝试匹配所有的 A 记录,直到其中一个与某个规则匹配为止;
* 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名;
* `"IPOnDemand"`:当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
- `"AsIs"`:只使用域名进行路由选择。默认值。
- `"IPIfNonMatch"`:当域名没有匹配任何规则时,将域名解析成 IPA 记录或 AAAA 记录)再次进行匹配;
- 当一个域名有多个 A 记录时,会尝试匹配所有的 A 记录,直到其中一个与某个规则匹配为止;
- 解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名;
- `"IPOnDemand"`:当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
> `rules`: \[[RuleObject](#ruleobject)\]
@ -43,53 +44,30 @@
当一个规则指向一个负载均衡器时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"
],
"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"
],
"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"
目前只支持`"field"`这一个选项。
@ -98,12 +76,12 @@
一个数组,数组每一项是一个域名的匹配。有以下几种形式:
* 纯字符串:当此字符串匹配目标域名中任意部分,该规则生效。比如 "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"`
@ -113,27 +91,27 @@
一个数组,数组内每一项代表一个 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
目标端口范围,有三种形式:
* `"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
来源端口,有三种形式:
* `"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"
@ -169,9 +147,9 @@
示例:
* 检测 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
@ -202,28 +180,26 @@
> `selector`: \[ string \]
一个字符串数组,其中每一个字符串将用于和 outbound 标识的前缀匹配。在以下几个 outbound 标识中:`[ "a", "ab", "c", "ba" ]``"selector": ["a"]` 将匹配到 `[ "a", "ab" ]`
如果匹配到多个 outbound负载均衡器目前会从中随机选出一个作为最终的 outbound。
### 预定义域名列表
此列表预置于每一个 Xray 的安装包中,文件名为 `geosite.dat`。这个文件包含了一些常见的域名,使用方式:`geosite:filename`,如 `geosite:google` 表示对文件内符合 `google` 内包含的域名,进行路由筛选或 DNS 筛选。
常见的域名有:
* `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`(加拿大)等结尾的域名。

View file

@ -16,7 +16,6 @@
开启了统计以后, 只需在 [Policy](./policy.md) 中开启对应的项,就可以统计对应的数据。
## 获取统计信息
可以用 `xray api` 的相关命令获取统计信息.
@ -37,7 +36,6 @@
如果对应用户没有指定 Email则不会开启统计。
:::
- 全局数据
- `inbound>>>[tag]>>>traffic>>>uplink`

View file

@ -5,12 +5,13 @@
传输方式指定了稳定的数据传输的方式。通常来说,一个网络连接的两端需要有对称的传输方式。比如一端用了 WebSocket那么另一个端也必须使用 WebSocket否则无法建立连接。
传输方式transport配置有两部分:
1. 全局配置([TransportObject](#transportobject)
2. 局部配置([StreamSettingsObject](#streamsettingsobject))。
- 局部配置时,可以指定每个单独的入站或出站用怎样的方式传输。
- 通常来说客户端和服务器对应的入站和出站需要使用同样的传输方式。当其配置指定了一种传输方式,但没有填写具体设置时,此传输方式会使用全局配置中的设置。
## TransportObject
`TransportObject` 对应配置文件的 `transport` 项。
@ -57,7 +58,6 @@
针对 Domain Socket 连接的配置。
## StreamSettingsObject
`StreamSettingsObject` 对应入站或出站中的 `streamSettings` 项。每一个入站或出站都可以分别配置不同的传输配置,都可以设置 `streamSettings` 来进行一些传输的配置。
@ -92,6 +92,7 @@
> `security`: "none" | "tls" | "xtls"
是否启用传输层加密,支持的选项有
- `"none"` 表示不加密(默认值)
- `"tls"` 表示使用 [TLS](https://en.wikipedia.org/wiki/base/transport_Layer_Security)。
- `"xtls"` 表示使用 [XTLS](../features/xtls.md)。
@ -143,17 +144,13 @@ TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型
透明代理相关的具体配置。
### TLSObject
```json
{
"serverName": "xray.com",
"allowInsecure": false,
"alpn": [
"h2",
"http/1.1"
],
"alpn": ["h2", "http/1.1"],
"minVersion": "1.2",
"maxVersion": "1.3",
"preferServerCipherSuites": true,
@ -230,7 +227,6 @@ CipherSuites用于配置受支持的密码套件列表, 每个套件名称之间
如果要在 ssllibs 或者 myssl 获得 A/A+ 等级的评价, 请参考 [这里](https://github.com/XTLS/Xray-core/discussions/56#discussioncomment-215600).
:::
#### CertificateObject
```json
@ -289,6 +285,7 @@ CipherSuites用于配置受支持的密码套件列表, 每个套件名称之间
]
}
```
> `ocspStapling`: number
ocspStapling 检查更新时间间隔。 单位:秒
@ -297,9 +294,9 @@ ocspStapling 检查更新时间间隔。 单位:秒
证书用途,默认值为 `"encipherment"`
* `"encipherment"`:证书用于 TLS 认证和加密。
* `"verify"`:证书用于验证远端 TLS 的证书。当使用此项时,当前证书必须为 CA 证书。
* `"issue"`:证书用于签发其它证书。当使用此项时,当前证书必须为 CA 证书。
- `"encipherment"`:证书用于 TLS 认证和加密。
- `"verify"`:证书用于验证远端 TLS 的证书。当使用此项时,当前证书必须为 CA 证书。
- `"issue"`:证书用于签发其它证书。当使用此项时,当前证书必须为 CA 证书。
::: tip TIP 1
在 Windows 平台上可以将自签名的 CA 证书安装到系统中,即可验证远端 TLS 的证书。
@ -341,7 +338,6 @@ ocspStapling 检查更新时间间隔。 单位:秒
一个字符串数组,表示密钥内容,格式如样例如示。`key``keyFile` 二者选一。
### SockoptObject
```json
@ -358,8 +354,8 @@ ocspStapling 检查更新时间间隔。 单位:秒
一个整数。当其值非零时,在 ountbound 连接以此数值上标记 SO_MARK。
* 仅适用于 Linux 系统。
* 需要 CAP_NET_ADMIN 权限。
- 仅适用于 Linux 系统。
- 需要 CAP_NET_ADMIN 权限。
> `tcpFastOpen`: true | false
@ -368,18 +364,18 @@ ocspStapling 检查更新时间间隔。 单位:秒
当其值为 `true` 时,强制开启 TFO当其值为 `false` 时,强制关闭 TFO当此项不存在时使用系统默认设置。
可用于 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"
是否开启透明代理(仅适用于 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` 权限。
@ -392,6 +388,7 @@ ocspStapling 检查更新时间间隔。 单位:秒
在之前的版本中,当 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 发出连接。
@ -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。
@ -432,4 +430,3 @@ ocspStapling 检查更新时间间隔。 单位:秒
::: danger
此选项与 PorxySettingsObject.Tag 不兼容
:::

View file

@ -31,5 +31,3 @@
> `grpcSettings`: [GRPCObject](./grpc)
针对 gRPC 连接的配置。

View file

@ -6,6 +6,7 @@
gRPCHTTP/2内置多路复用不建议使用 gRPC 与 HTTP/2 时启用 mux.cool。
::: warning ⚠⚠⚠
- 目前gRPC 不支持指定 serverName (即 Websocket 与 HTTP/2 的 host).请在出站代理地址中填写 **正确的域名** ,或在 `(x)tlsSettings` 中填写 `ServerName` 否则无法连接。
- gRPC 不支持回落到其他服务。
- gRPC 服务有明显特征,无法抵抗主动探测。建议使用 Caddy 或 Nginx通过 Path 前置分流。
@ -13,6 +14,7 @@ gRPCHTTP/2内置多路复用不建议使用 gRPC 与 HTTP/2 时启用 m
::: tip
如果您使用 Caddy 或 Nginx 等反向代理,请注意下列事项:
- 请确定反向代理服务器开启了 HTTP/2
- 请使用 HTTP/2 或 h2c (Caddy)grpc_pass (Nginx) 连接到 Xray。
- 普通模式的 Path 为 `/{serviceName}/Tun`, Multi 模式为 `/{serviceName}/TunMulti`
@ -20,6 +22,7 @@ gRPCHTTP/2内置多路复用不建议使用 gRPC 与 HTTP/2 时启用 m
::: tip
如果你正在使用回落,请注意下列事项:
- 请确认 (x)tlsSettings.alpn 中 h2 位于第一顺位,否则 gRPCHTTP/2可能无法完成 TLS 握手。
- gRPC 无法通过进行 Path 分流。
- 不建议回落到 gRPC存在主动探测的风险。

View file

@ -15,6 +15,7 @@ HTTP/2 内置多路复用,不建议使用 HTTP/2 时启用 mux.cool。
::: warning
⚠️ 如果你正在使用回落,请注意下列事项:
- 请确认 (x)tlsSettings.alpn 中包含 h2否则 HTTP/2 无法完成 TLS 握手。
- HTTP/2 无法通过进行 Path 分流,建议使用 SNI 分流。
:::

View file

@ -57,6 +57,7 @@ $env:GOARCH="amd64"
go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main
```
上传到服务器后,记得在服务器终端内执行 `chmod +x xray`
::: tip

View file

@ -27,19 +27,21 @@ Xray有多种命令和参数可用,因此变得灵活和强大.
我们十分感谢每一位 contributor 作出的贡献!是你们让 Project X 变得更加强大!
## 小小白白话文
给予新手指导的使用心得
请点击 [小小白白话文](./level-0/) 以进行查看
## 入门技巧
具备了基础之后,你就可以通过 [入门技巧](./level-1/) 来探索更多的使用方式了
## 进阶文档
给予进阶用户指导的使用技巧
点击 [进阶文档](./level-2/) 以进行查看
::: tip 感谢
非常感谢大家无私分享使用技巧和心得, 使得 Xray 日益强大。
:::

View file

@ -31,6 +31,7 @@ Use "xray help <command>" for more information about a command.
指定一个或多个配置文件,并运行。
使用方法:
```
xray run [-c config.json] [-confdir dir]
```
@ -55,6 +56,7 @@ without launching the server
输出 Xray 版本、 Golang 版本等信息。
使用方法:
```
xray version
```
@ -64,6 +66,7 @@ without launching the server
调用 Xray 的 gRPC API需要在配置文件中开启。
使用方法:
```
xray api <command> [arguments]
```
@ -84,6 +87,7 @@ xray api <command> [arguments]
一些与 TLS 相关的工具。
使用方法:
```
xray tls <command> [arguments]
```
@ -98,13 +102,14 @@ xray tls <command> [arguments]
生成 UUID。
使用方法:
```
xray uuid
```
::: tip
`-config`没有指定时Xray 将先后尝试从以下路径加载`config.json`:
- 工作目录Working Directory
- [环境变量](../config/features/env.md#资源文件路径)中`Xray.location.asset`所指定的路径
:::

View file

@ -90,7 +90,6 @@
## 运行
- 在 Windows 和 macOS 中,配置文件通常是 Xray 同目录下的 `config.json` 文件。
- 直接运行 `Xray``Xray.exe` 即可。
- 在 Linux 中,配置文件通常位于 `/etc/xray/``/usr/local/etc/xray/` 目录下。

View file

@ -2,7 +2,6 @@
## 平台支持
Xray 在以下平台中可用:
- Windows 7 及之后版本x86 / amd64 / arm32
@ -15,14 +14,12 @@ Xray 在以下平台中可用:
## 下载 Xray
预编译的二进制 ZIP 格式压缩包可在 [Github Releases](https://github.com/xtls/Xray-core/releases) 中找到。
下载对应平台的压缩包,解压后即可使用。
## 验证安装包
Xray 提供两种验证方式:
- ZIP 压缩包的 SHA1 / SHA256 摘要
@ -44,10 +41,12 @@ Xray 提供两种验证方式:
### 安装脚本
- Linux Script
- [Xray-install](https://github.com/XTLS/Xray-install)
- [Xray-script](https://github.com/kirin10000/Xray-script)
- One Click
- [ProxySU](https://github.com/proxysu/ProxySU)
- [Xray-agent](https://github.com/mack-a/Xray-agent)
@ -55,10 +54,8 @@ Xray 提供两种验证方式:
- [Xray4Magisk](https://github.com/CerteKim/Xray4Magisk)
- [Xray_For_Magisk](https://github.com/E7KMbb/Xray_For_Magisk)
### Linux 发行版包管理器
Linux 发行版 Xray 包(可通过发行版相应的包管理器安装):
- Debian <Badge text="WIP" type="warning"/>
@ -73,7 +70,6 @@ Linux 发行版 Xray 包(可通过发行版相应的包管理器安装):
### Docker image 的文件结构
- `/etc/xray/config.json`:配置文件
- `/usr/bin/xray`Xray 主程序
- `/usr/local/share/xray/geoip.dat`IP 数据文件

View file

@ -23,4 +23,3 @@ Made with ❤️ by [@ricuhkaen](https://github.com/ricuhkaen)
[【第 8 章】 Xray 客户端篇](./ch08-xray-clients.md) - 新的开始
[【第 9 章】 附录](./ch09-appendix.md) - 考点都在这里

View file

@ -8,8 +8,6 @@
包括但不限于:各路大神大能、懒得自己折腾的小白、已经会折腾的高手、确定要用机场的土豪、确定要用一键脚本的逍遥派...... 总之只要有技术基础、或不愿不想自建的同学,您直接关闭本文即可,因为这篇文章大概是入不了您的法眼的,更可能会让您生一肚子闲气,那多划不来。
## 1.3 郑重声明及其他声明
郑重声明:
@ -24,7 +22,6 @@
基于本文【零基础用户】的目标受众,许多内容会尽力详尽说明,所以语言偏啰嗦,请做好心理准备。
## 1.4 为什么自建是个难题?
要回答这个问题,就需要稍微多说一点背景信息了。
@ -74,15 +71,12 @@
3. **“机场”面临监管压力**大机场相对有保障的同时也无法避免树大招风。2020 年间,已经有几个大机场停运、跑路的事件发生,用户的正常使用受到严重干扰(**被动跑路**
4. **“机场”技术水平难以确定**:线路质量良莠不齐,挂羊头卖狗肉的现象屡见不鲜(**速度慢、掉线多、连不上**
## 1.6 那么你到底要不要自建呢?
现在,你已经看到了机场的优势和风险,要用什么,就请各位充分思考并自行决定。毕竟,最适合你的方案才是最好的方案。
<img src="./ch01-img01-choice.png" alt="It's Your Choice!" />
1. 如果决定使用机场的话,现在,你可以关闭本文了。
2. 如果你决定自建,那就请继续阅读后面的章节吧!!
@ -97,7 +91,6 @@
3. 你的互联网身份依然是你的身份,绝对的匿名化是极为困难的,所以请务必遵守你个人所在地区和 IP 所在地区的相关法律法规。无论何时,自我保护都是最基本的底线。
## 1.8 你的进度
> ⬛⬜⬜⬜⬜⬜⬜⬜ 12.5%

View file

@ -33,23 +33,21 @@
**注意:** 这**不是**一个真实可用的网址,请替换成你的真实网址
:::
## 2.3 你本地电脑上需要安装的软件
1. SSH 远程登录工具
- Windows: [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
- macOS/Linux: Terminal
2. 远程文件拷贝工具
- Windows: [WinSCP](https://winscp.net/eng/index.php)
- macOS/Linux: Terminal
3. 靠谱的文本编辑器
- Windows/macOS/Linux: [VSCode](https://code.visualstudio.com)
## 2.4 你的进度
如果上面的原材料你都准备好了的话,你已经拿到了开启新世界大门的钥匙。那还等什么,让我们快点进入下一章,走进这扇门吧!

View file

@ -28,7 +28,6 @@
<img src="./ch03-img04-ssh-login.png" alt="SSH远程登录"/>
## 3.2 成功登录 SSH初识命令行界面
1. 如果你的信息都填写正确,你将会看到类似下图的界面,说明已登录成功:
@ -50,8 +49,6 @@
前两个很直观,无需多说。第三个是关于 Linux 的文件夹系统,现在也不需要过于深入,你只需要知道,"`~`"就是【当前用户的大本营】。第四个,提示符`#`,你也不用管,只需要知道,未来文章中会写一些需要你输入的命令,都会以 "`#`" 或者 "`$`" 开头,提示你**后面**是你输入命令的地方。(所以你复制命令的时候,**只需要复制后面的内容**,不要复制提示符)
## 3.3 第一次更新 Linux 的软件!
1. 正如你的手机,无论安卓还是 iPhone为了 APP 及时更新(获取安全补丁和新功能),都会时不时从应用商店获得更新信息,并且提示你有多少个 APP 可更新。Linux 系统也有逻辑十分类似的更新机制。所以只要你会更新手机 APP就能学会更新 Linux 软件!
@ -61,16 +58,18 @@
3. 小小白白 Linux 基础命令:
| 编号 | 命令名称 | 命令说明 |
|:--:|:--:|:--:|
| :------: | :-----------: | :----------: |
| `cmd-01` | `apt update` | 查询软件更新 |
| `cmd-02` | `apt upgrade` | 执行软件更新 |
4. 现在请输入第一条命令,获取更新信息
```
# apt update
```
5. 然后请输入第二条命令,并在询问是否继续安装 `(Y/n)` 时输入 `y` 并回车确认,开始安装
```
# apt upgrade
```
@ -79,11 +78,8 @@
<img src="./ch03-img06-apt-upgrade-full.gif" alt="初次软件更新流程演示"/>
## 3.4 你的进度
**恭喜你又迈出了坚实的一步!** 现在,你已经可以通过 SSH 来登录你的远程服务器了!那登录进去之后,除了升级软件之外,应该再做点什么呢?敬请进入下一章一探究竟吧!
> ⬛⬛⬛⬜⬜⬜⬜⬜ 37.5%

View file

@ -51,14 +51,14 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
1. 小小白白 Linux 基础命令:
| 编号 | 命令名称 | 命令说明 |
|:--:|:--:|:--:|
| :------: | :-----------------: | :----------: |
| `cmd-03` | `nano` | 文本编辑器 |
| `cmd-04` | `systemctl restart` | 重启某个服务 |
2. 小小白白 Linux 基础配置文件
| 编号 | 配置文件位置 | 文件说明 |
|:--:|:--:|:--:|
| :-------: | :--------------------: | :------------------: |
| `conf-01` | `/etc/ssh/sshd_config` | SSH 远程登录程序设置 |
3. 我们要做的第一件事,当然就是【用`nano`这个文本编辑器打开`SSH远程登录程序设置`】,在 Windows 下,你会【找到文件并双击】,在 Linux 下该怎么办呢?仔细看看上面的命令说明,是不是就很简单了?没错,就是:
@ -71,8 +71,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
<img src="./ch04-img01-nano-ui.png" alt="nano的界面"/>
5. 我们要做的第二件事,是【在打开的文件中找到`Port`这一项并修改它的端口】。Port后面的数字就是SSH的端口一般建议把它改成一个大于`1024`小于`65535`的整数(本文以`9753`为例)。请结合`nano`的快捷键,想一下该怎么操作呢?果然,你又说对了!就是:
5) 我们要做的第二件事,是【在打开的文件中找到`Port`这一项并修改它的端口】。Port 后面的数字就是 SSH 的端口,一般建议把它改成一个大于`1024`小于`65535`的整数(本文以`9753`为例)。请结合`nano`的快捷键,想一下该怎么操作呢?果然,你又说对了!就是:
- 使用 `ctrl+w` 进入搜索模式,然后输入 `Port 22` 并回车
- 删除 `22` 并改成 `9753`
@ -83,13 +82,13 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
本文以`9753`为例就意味着随着本文的发布这个端口会变成一个不大不小的特征也许会被攻击者优先尝试、也许被GFW干扰、阻断。所以我强烈建议你用一个自己想到的其他端口毕竟你有6万多个端口可以自由选择。
:::
6. 我们要做的第三件事,是【保存文件并退出】
- 如果第 3 步你有仔细观察,就会发现保存并不是常见的 `ctrl+s`
- 正确的快捷键:保存是 `ctrl+o` + `回车`,退出是 `ctrl+x`
7. 我们最后要做的事,是【重启 ssh 服务,使变更生效】
```
# systemctl restart ssh
```
@ -102,8 +101,6 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
现在新的端口已经生效,下次使用 PuTTY 登录时就要用`9753`了。所以现在请到 PuTTY 的设置中修改端口号码,然后保存 Session。嗯你应该知道去哪里改了吧如果不知道的话要重读前面的内容了哦
## 4.5 建立非 root 的新用户
第二步,我们来解决【用户名 = `root`】的问题。
@ -113,7 +110,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
1. 小小白白 Linux 基础命令:
| 编号 | 命令名称 | 命令说明 |
|:--:|:--:|:--:|
| :------: | :-----------: | :--------------------------: |
| `cmd-05` | `adduser` | 给系统新增用户 |
| `cmd-06` | `apt install` | 安装某个软件 |
| `cmd-07` | `visudo` | 修改 sudo 权限设置专用编辑器 |
@ -138,6 +135,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
<img src="./ch04-img04-adduser-full.gif" alt="建立新用户"/>
5. 我们要做的第二件事,是【安装`sudo`功能】(`sudo` 就是在关键时刻,让普通账户临时获得 `root` 的神力,战力全开拯救世界)
```
# apt update && apt install sudo
```
@ -163,24 +161,26 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
<img src="./ch04-img05-sudo-full.gif" alt="建立新用户"/>
## 4.6 禁用 root 用户 SSH 远程登录
1. 现在你已经逐渐熟悉 Linux 了,所以这次换你思考,我们要做的第一件事是什么呢?没错,还是【用`nano`编辑器打开`SSH远程登录程序设置`】,什么,你想不起来怎么操作了?那去复习一下上面的内容再回来吧!............ 正确答案:
```
# nano /etc/ssh/sshd_config
```
2. 找到`PermitRootLogin Yes`这一项,然后把它后面的设定值改为`no`即可。还记得怎么操作吗?............ 正确答案:
- 使用 `ctrl+w` 进入搜索模式,然后输入 `PermitRootLogin` 并回车
- 删除 `yes` 并改成 `no`
3. 保存文件并退出。还记得怎么操作吗?............ 正确答案:
- 保存是 `ctrl+o`,然后 `回车` 确认
- 退出是 `ctrl+x`
4. 重启 ssh 服务,让变更生效。还记得............ 算了直接公布正确答案:
```
# systemctl restart ssh
```
@ -193,8 +193,6 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
<img src="./ch04-img07-putty-default-user.png" alt="PuTTY设置默认用户名"/>
## 4.7 使用 RSA 密钥登录并禁用密码登录
第三步,我们来解决【密码】可能被撞破的问题。
@ -220,6 +218,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
那我们现在就来配置【密钥验证】吧!
1. 运行`PuTTYgen` (PuTTY 密钥生成器)。位置是 `开始菜单` --> `所有程序` --> `PuTTY (64-bit)` --> `PuTTYgen`
1. 点击`Generate`开始生成(在界面空白处乱晃鼠标增加随机数)
<img src="./ch04-img08-puttygen-save.png" alt="生成密钥"/>
@ -234,6 +233,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
<img src="./ch04-img09-puttygen-save-keys.png" alt="保存密钥"/>
2. 将公钥上传至 VPS 的`vpsadmin`用户下
1. 这一步就需要用到之前准备的`WinSCP`了。
2. 去[官网](https://winscp.net/eng/index.php)下载并安装,会提示你导入 PuTTY 的设置,当然一键导入啦!
<img src="./ch04-img10-winscp-import-session.png" alt="一键导入Session"/>
@ -269,11 +269,13 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
2. SSH 远程连接到 VPS 上PuTTY
3. 修改 `authorized_keys` 文件权限为 `600` (仅所有者可读可写)
```
$ chmod 600 ~/.ssh/authorized_keys
```
4. 修改 SSH 配置。这个我们已经用了很多次,但现在我们已经从无所不能的`root`变成了普通用户`vpsadmin`,此时的我们是没有权限直接编辑 SSH 配置的。这时候就需要使用`sudo`命令了:
```
$ sudo nano /etc/ssh/sshd_config
```
@ -283,6 +285,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
6. 找到(`ctrl+w`) `PubkeyAuthentication` 改成 `yes`,然后保存(`ctrl+o`)退出(`ctrl+x`)
7. 重启 SSH 服务。(啰嗦君:别忘了现在需要使用`sudo`来获得权限)
```
$ sudo systemctl restart ssh
```
@ -295,6 +298,7 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
<img src="./ch04-img18-putty-privatekey-location.png" alt="PuTTY指定私钥位置"/>
5. 至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给 PuTTY 保存了默认的登录用户名和私钥。未来使用 PuTTY 登录时,载入`VPS-SERVER`配置后,点击`Open`就可以一键登录了。
如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图:
@ -309,8 +313,6 @@ Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网
任何需要借助 SSH 进行登录的软件都需要密钥验证了,软件过多,无法逐一展示,请根据你的需要自行设置好哦
:::
## 4.8 你的进度
到这里为止,你的 VPS 已经完成了【端口】、【用户名】、【密码】这三要素的基本安全保障,虽然远称不上固若金汤,但一般的恶意脚本应该已经无法对你造成伤害了!

View file

@ -11,6 +11,7 @@
3. 建设一个伪装站(如博客、私人网盘、多媒体网站、游戏网站等),直接访问时有合理的前台,使流量使用看上去更合理。
再回答第二个问题:
1. 本文作为演示,仅仅使用了一个最简单的【单文件 html 页面 + Nginx】来搭建以此完成上面的目标所以【非常简单】
2. 这个网站完全可以不仅仅是伪装,而是真的做大做强,这个复杂性就完全取决于你了
3. 对于“伪装”和“网站运营”这个目标,需要的就是各不相同、秀出真我,需要的同学可以自行搜索学习。这个内容已经完全偏离了科学上网,本文就不深入解析了。
@ -18,6 +19,7 @@
## 5.2 登录 VPS、安装运行 Nginx
1. 这里用到的,都是之前已经详解过的命令,所以就不重复讲解了。看不懂的同学可以看看前面的章节哦。
```
$ sudo apt update && sudo apt install nginx
```
@ -26,7 +28,6 @@
<img src="./ch05-img01-nginx-default-running.png" alt="Nginx默认界面"/>
## 5.3 创建一个最简单的网页
1. 小小白白 Linux 基础命令:
@ -53,6 +54,7 @@
:::
4. 把下面的内容完整的复制进去,然后保存(`ctrl+o`)退出(`ctrl+x`)
```
<html>
<!-- Text between angle brackets is an HTML tag and is not displayed.
@ -86,12 +88,15 @@
```
5. 修改 `nginx.conf` 并重启 `Nginx` 服务,将`80`端口的 http 访问定位到刚才建立的 `html` 页面上
1. 修改 `nginx.conf`
```
$ sudo nano /etc/nginx/nginx.conf
```
2. 将下面一段,添加在 `http{}` 内,然后保存(`ctrl+o`)退出(`ctrl+x`)。(记得将域名替换为之前准备好的、包含二级域名的真实域名)
```
server {
listen 80;
@ -106,6 +111,7 @@
:::
3. 让 `nginx` 重新载入配置使其生效
```
$ sudo systemctl reload nginx
```
@ -118,8 +124,6 @@
<img src="./ch05-img03-nginx-http-running.png" alt="http网页成功"/>
## 5.4 常见错误的说明
首先,如果你一路按照文章的说明来操作,并且足够细心,那肯定不会出错。所以,我并不打算修改本文的写法。
@ -144,8 +148,6 @@
但我相信,坚持使用【 `root` 用户】的同学应该是有主见、动手能力强、或者有一定 Linux 基础的同学。问题的症结我已经全部说明了,我相信你一定可以自行解决。
:::
## 5.5 你的进度
至此Xray 的第一个基础设施【网页】已经就位,我们马上就进入第二个基础设施【证书】吧!

View file

@ -21,16 +21,19 @@
| `cmd-13` | `acme.sh` | acme.sh 证书管理相关的命令 |
2. 运行安装脚本
```
$ wget -O - https://get.acme.sh | sh
```
3. 让 `acme.sh` 命令生效
```
$ . .bashrc
```
4. 开启 `acme.sh` 的自动升级
```
$ acme.sh --upgrade --auto-upgrade
```
@ -44,6 +47,7 @@
在正式申请证书之前,我们先用测试命令(`--issue --test`)来验证是否可以成功申请,这样可以避免在本地配置有误时,反复申请证书失败,超过 Let's Encrypt 的频率上限(比如,每小时、每个域名、每个用户失败最多 5 次),导致后面的步骤无法进行。
1. 测试证书申请的命令如下(本文均以 `ECC` 证书为例,因为时至今日,实在没什么理由不用它):
```
$ acme.sh --issue --test -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256
```
@ -55,6 +59,7 @@
:::
2. 你最终应该看到类似这样的提示:
```log
[Wed 30 Dec 2022 04:25:12 AM EST] Using ACME_DIRECTORY: https://acme-staging-v02.api.letsencrypt.org/directory
[Wed 30 Dec 2022 04:25:13 AM EST] Using CA: https://acme-staging-v02.api.letsencrypt.org/directory
@ -120,11 +125,10 @@
5. 这一步确定成功之后,就可以申请正式的证书了。(测试证书不需要删除,它会自动被正式证书覆盖)
## 6.4 正式证书申请
1. 申请正式证书的命令如下(即删掉 `--test` 参数,并在最后加入 `--force`参数):
```
$ acme.sh --issue -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256 --force
```
@ -134,6 +138,7 @@
:::
2. 你最终应该看到跟上面很像的提示:
```log
vpsadmin@vps-server:~$ acme.sh --issue -d 二级域名.你的域名.com -w /home/vpsadmin/www/webpage --keylength ec-256
[Wed 30 Dec 2022 15:22:51 AM EST] Using CA: https://acme-v02.api.letsencrypt.org/directory
@ -185,11 +190,8 @@
3. 仔细观察,你会发现这次给你发证书的域名是 `https://acme-v02.api.letsencrypt.org`,少了 `staging`,自然就是【正式服】了!
## 6.5 你的进度
至此Xray 所需要的两个基础设施终于全部就位!千呼万唤始出来的 Xray 马上就要揭开面纱,我们终于要进入最激动人心章节啦!
> ⬛⬛⬛⬛⬛⬛⬜⬜ 75%

View file

@ -11,6 +11,7 @@
:::
后面要做的事情非常简单:
1. 安装
2. 配置(如安装 TLS 证书、`config.json`
3. 运行
@ -30,16 +31,19 @@
| `cmd-14` | `rm` | 删除命令 |
2. 将安装脚本下载至本地:
```
$ wget https://github.com/XTLS/Xray-install/raw/main/install-release.sh
```
3. 执行安装命令
```
$ sudo bash install-release.sh
```
4. 使用完成之后可以删除该脚本
```
$ rm ~/install-release.sh
```
@ -57,11 +61,13 @@
虽然我们前面已经申请好了 TLS 证书,但是按照 [`acme.sh`的官方说明](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6),申请后的证书不建议直接使用。正确的方法是使用 `--install-cert` 命令安装给需要的程序。我们现在就来把证书安装给 `xray-core` 使用。
1. 为了规避非 root 账户的各种潜在的权限困扰,我们在 vpsadmin 账户下建立一个证书文件夹
```
$ mkdir ~/xray_cert
```
2. 使用`acme.sh``--install-cert`正确安装(拷贝)证书文件
```
$ acme.sh --install-cert -d 二级域名.你的域名.com --ecc \
--fullchain-file ~/xray_cert/xray.crt \
@ -69,6 +75,7 @@
```
3. `xray.key`文件默认对其他用户不可读,所以需要赋予其可读性权限
```
$ chmod +r ~/xray_cert/xray.key
```
@ -78,17 +85,20 @@
<img src="./ch07-img02-xray-cert-install.png" alt="Xray证书安装"/>
5. `acme.sh` 会每 60 天检查一次证书并自动更新临期证书。但据我所知是它并不会自动将新证书安装给 `xray-core`,所以我们需要新增一个系统的自动周期任务来完成这一步。
1. 小小白白 Linux 基础命令:
| 编号 | 命令名称 | 命令说明 |
|:--:|:--:|:--:|
| `cmd-15` | `crontab -e` | 编辑当前用户的定时任务 |
2. 建立一个脚本文件(`xray-cert-renew.sh`
```
$ nano ~/xray_cert/xray-cert-renew.sh
```
3. 把下面的内容复制进去,记得替换你的真实域名,然后保存退出
```
#!/bin/bash
@ -109,48 +119,53 @@
:::
4. 给这个文件增加【可执行】权限
```
$ chmod +x ~/xray_cert/xray-cert-renew.sh
```
54. 运行 `crontab -e`,添加一个自动任务【每月自动运行一次`xray-cert-renew.sh`】 (注意不要加`sudo`,因为我们增加的是`vpsadmin`账户的自动任务。初次运行时会让你选择编辑器,当然是选择熟悉的`nano`啦!)
5. 运行 `crontab -e`,添加一个自动任务【每月自动运行一次`xray-cert-renew.sh`】 (注意不要加`sudo`,因为我们增加的是`vpsadmin`账户的自动任务。初次运行时会让你选择编辑器,当然是选择熟悉的`nano`啦!)
```
$ crontab -e
```
5. 把下面的内容增加在文件最后,保存退出即可。
6. 把下面的内容增加在文件最后,保存退出即可。
```
# 1:00am, 1st day each month, run `xray-cert-renew.sh`
0 1 1 * * bash /home/vpsadmin/xray_cert/xray-cert-renew.sh
```
6. 完整流程演示如下:
7. 完整流程演示如下:
<img src="./ch07-img03-crontab-cert-renew.gif" alt="每月自动给Xray安装证书"/>
## 7.4 配置 Xray
首先,各种配置都可以参考[官方 VLESS 配置示例](https://github.com/XTLS/Xray-examples)。本文会基于官方示例,配置一个最精简的方式:【单 `VLESS` 协议入站 + `80` 端口回落】,满足大多数场景的最大速度及必要安全。
1. 生成一个合法的 `UUID` 并保存备用(`UUID`可以简单粗暴的理解为像指纹一样几乎不会重复的 ID
```
$ xray uuid
```
2. 建立日志文件及文件夹备用
1. 小小白白 Linux 基础命令:
| 编号 | 命令名称 | 命令说明 |
|:--:|:--:|:--:|
| `cmd-16` | `touch` | 建立空白文件 |
2. 在`vpsadmin`的文件夹内建立一个【日志专用文件夹】
```
$ mkdir ~/xray_log
```
2. 生成所需的两个日志文件(访问日志、错误日志)
3. 生成所需的两个日志文件(访问日志、错误日志)
```
$ touch ~/xray_log/access.log && touch ~/xray_log/error.log
```
@ -159,12 +174,13 @@
这个位置不是`Xray`标准的日志文件位置,放在这里是避免权限问题对新人的操作带来困扰。当你熟悉之后,建议回归默认位置: `/var/log/xray/access.log``/var/log/xray/error.log`
:::
3. 因为Xray默认是nobody用户使用,所以我们需要让其他用户也有“写”的权限(`*.log` 就是所有文件后缀是`log`的文件,此时`CLI`界面的效率优势就逐渐出现了)
4. 因为 Xray 默认是 nobody 用户使用,所以我们需要让其他用户也有“写”的权限(`*.log` 就是所有文件后缀是`log`的文件,此时`CLI`界面的效率优势就逐渐出现了)
```
$ chmod a+w ~/xray_log/*.log
```
3. 使用`nano`创建`Xray`的配置文件
```
$ sudo nano /usr/local/etc/xray/config.json
```
@ -285,18 +301,18 @@
<img src="./ch07-img04-xray-log-and-config.gif" alt="创建日志文件及`config.json`配置文件"/>
## 7.5 启动 Xray 服务!!(并查看服务状态)
如果你是跟随本文一步步设置过来,其实就已经避开了最常见**日志文件权限不足**、**证书文件权限不足** 这两个大坑。那么现在运行`Xray`自然应该无比顺利。
1. 输入下面的命令,享受启动`Xray`的历史性时刻吧!!!
```
$ sudo systemctl start xray
```
2. 仅仅`start`我们并不能确定是否成功的开启了 Xray 的服务,要确定它的状态,就要用到下面的命令。
```
$ sudo systemctl status xray
```
@ -307,23 +323,24 @@
<img src="./ch07-img05-xray-start-and-status.gif" alt="启动并查看Xray运行状态"/>
## 7.6 回顾 `systemd` 进行基本的服务管理
到现在为止,我们已经使用过了`systemctl`相关的`start`, `status`, `reload` 等命令,这些都是基于`systmed`管理模块对 Linux 系统中各种服务进行管理的通用命令。现在正好熟悉一下相关的其他几个命令。
1. 若你需要暂时关闭 `Xray` 的服务,那就用`stop`命令
```
$ sudo systemctl stop xray
```
2. 若你需要重启`Xray`的服务,那就用`restart`命令
```
$ sudo systemctl restart xray
```
3. 若你需要禁用`Xray`的服务(电脑重启后禁止 Xray 自动运行),那就用`disable`命令
```
$ sudo systemctl disable xray
```
@ -333,8 +350,6 @@
$ sudo systemctl enable xray
```
## 7.7 服务器优化之一:开启 BBR
1. 传说中的`BBR`
@ -366,7 +381,6 @@
所谓魔改`bbr`的【领先】是有非常强的时效性的。比如很多 `bbrplus` 脚本,因为几年来都没有更新,到现在还会把你的内核换成 `4.19`,要知道现在稳定如 Debian 已经是 `5.9` 的时代了那么这个脚本放在2018年1月也许领先了一点到2018年10月4.19正发布时就已经失去了意义,放在现在甚至可以说是完完全全的【降级】和【劣化】
:::
4. `fq`, `fq_codel`, `fq_pie`, `cake`和其他算法哪个好?
一句话:**看不懂的话,请保持`fq`,足够、且不会劣化你的线路**
@ -384,7 +398,9 @@
:::
6. 啰嗦了这么多,就是因为围绕 `BBR` 忽悠小白的错误概念和坑人脚本实在是太多了。我希望你们现在对 `BBR` 有了相对清晰的理解。接下来,我们就动手安装最新的 Debian 内核并开启`BBR` 吧!(真的很简单)
1. 给 Debian 10 添加官方 `backports` 源,获取更新的软件库
```
$ sudo nano /etc/apt/sources.list
```
@ -393,13 +409,14 @@
本文以 Debian 10 为例,所以使用 `/etc/apt/sources.list` 仍无问题,但如果你并不是根据本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立 `/etc/apt/sources.list.d/` 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/apt/sources.list.d/vpsadmin.list`,以此保证兼容性,也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。
:::
2) 然后把下面这一条加在最后,并保存退出。
2. 然后把下面这一条加在最后,并保存退出。
```
deb http://deb.debian.org/debian buster-backports main
```
3. 刷新软件库并查询 Debian 官方的最新版内核并安装。请务必安装你的VPS对应的版本本文以比较常见的【amd64】为例
3) 刷新软件库并查询 Debian 官方的最新版内核并安装。请务必安装你的 VPS 对应的版本本文以比较常见的【amd64】为例
```
$ sudo apt update && sudo apt -t buster-backports install linux-image-amd64
```
@ -408,11 +425,13 @@
如果你的 VPS 支持,可以尝试【云服务器专用内核】`linux-image-cloud-amd64`优点就是精简、资源占用低缺点嘛是有同学反馈不支持的系统强行安装会导致无法开机Kernel 无法识别)。
为了避免无法识别的悲剧,请确保:
- 尝试前做一个系统快照,或者
- 你有 `vnc` 可以救场(并且你知道怎么用)
:::
4. 修改 `kernel` 参数配置文件 `sysctl.conf` 并指定开启 `BBR`
4) 修改 `kernel` 参数配置文件 `sysctl.conf` 并指定开启 `BBR`
```
$ sudo nano /etc/sysctl.conf
```
@ -468,8 +487,6 @@
sch_fq
```
## 7.8 服务器优化之二:开启 HTTP 自动跳转 HTTPS
1. 之前我们已经搭建了 `80` 端口的 `http` 网页,并以此申请了 TLS 证书。
@ -477,16 +494,19 @@
但如果你尝试过用浏览器访问我们的这个界面,就会发现 `http` 访问并不会像大多数网站一样自动升级为 `https` 访问。换言之,我们现在的设置下,`http(80)``https(443)`之间完全是独立的。如果要解决这个问题,就需要做一些修改。
2. 编辑 Nginx 的配置文件
```
$ sudo nano /etc/nginx/nginx.conf
```
3. 在我们设置过的 80 端口 Server 中加入下面的语句,并保存退出(可同时删除`root``index`两行)
```
return 301 https://$http_host$request_uri;
```
4. 在与 `80` 端口同级的位置增加一个本地端口监听来提供网页展示。本文以 `8080` 端口做演示。(可以是任意端口)
```
server {
listen 127.0.0.1:8080;
@ -497,16 +517,19 @@
```
5. 重启 Nginx 服务
```
$ sudo systemctl restart nginx
```
6. 修改 Xray 的回落设置,将回落从 `80` 端口改为 `8080` 端口。(找到 `"dest": 80`, 并改成 `"dest": 8080`
```
$ sudo nano /usr/local/etc/xray/config.json
```
7. 重启 `Xray` 服务,即完成了设置
```
$ sudo systemctl restart xray
```
@ -519,14 +542,10 @@
<img src="./ch07-img08-http-to-https-check.png" alt="http自动跳转https生效"/>
## 7.9 服务器优化之三:更丰富的回落
如果你需要更丰富的回落功能,可以参考 [《回落 (fallbacks) 功能简析》](../../level-1/fallbacks-lv1/)
## 7.10 你的进度
恭喜!!到这一步,你已经拥有了可以正常科学上网的服务器、同时也有了可以防止主动探测攻击的伪装网站。接下来,只要给你的客户端装上合适的软件,就可以享受顺畅的网络了!
@ -545,8 +564,7 @@
- 7.4 配置`Xray` - 3. 使用`nano`创建`Xray`的配置文件
- 7.8 服务器优化之二 - 6. 修改`Xray`的回落设置
2. 初版中修改`Nginx`配置文件`nginx.conf`时内容错误(网页文件夹位置错误),若你已经根据之前的位置进行了操作,`Nginx`会无法找到正确的网站。请自查,造成不便十分抱歉!
2) 初版中修改`Nginx`配置文件`nginx.conf`时内容错误(网页文件夹位置错误),若你已经根据之前的位置进行了操作,`Nginx`会无法找到正确的网站。请自查,造成不便十分抱歉!
- 正确文件夹位置:`root /home/vpsadmin/www/webpage;`
- 错误文件夹位置:`root /var/www/website/html`

View file

@ -51,14 +51,17 @@
:::
- **v2rayN - 适用于 Windows 平台**
- 请从它的[GitHub 仓库 Release 页面](https://github.com/2dust/v2rayN/releases)获取最新版
- 请根据该客户端的说明进行设置
- **v2rayNG - 适用于 Android 平台**
- 请从它的[GitHub 仓库 Release 页面](https://github.com/2dust/v2rayNG/releases)获取最新版
- 请根据该客户端的说明进行设置
- **Shadowrocket - 适用于 iOS, 基于苹果 M 芯片的 macOS**
- 你需要注册一个【非中国区】的 iCloud 账户
- 你需要通过 App Store 搜索并购买
- 请根据该客户端的说明进行设置
@ -291,8 +294,6 @@
每个系统都有系统路径变量,所以写 `Xray` 程序时不一定要写绝对路径。但是写了肯定没错,所以我就如此演示了。
:::
## 8.5 附加题 3在 PC 端开机自动运行 `xray-core`
如果你真的尝试了手动运行 `xray-core`,你一定会发现这个方式还有点小问题:
@ -302,8 +303,6 @@
我可以肯定的告诉你:**完全可以解决**。但是具体的解决方式,就当作课外作业留给大家吧!(友情提示,文档站的问答区有线索哦)
## 8.6 圆满完成!
我相信,有耐心看到这里的同学,都是兼具好奇心和行动力的学习派!我现在要郑重的恭喜你,因为到了这里,你已经完完整整的【**从第一条命令开始,完成了 VPS 服务器部署,并成功的在客户端配置使用 Xray**】了!这毫无疑问是一个巨大的胜利!
@ -311,10 +310,9 @@
我相信,你现在一定对`Linux`不再恐惧,对`Xray`不再陌生了吧!
**至此,小小白白话文圆满结束!**
> ⬛⬛⬛⬛⬛⬛⬛⬛ 100%
## 8.7 TO INFINITY AND BEYOND!
**但现在你看到的,远远不是 Xray 的全貌。**
@ -324,12 +322,12 @@
如果你觉得现在已经完全够用了,那就好好的享受它给你带来的信息自由。但如果你的好奇心依然不能停歇,那就去继续挖掘它无限的可能性吧!
需要更多信息,可以到这里寻找:
1. [xtls.github.io](https://xtls.github.io/) - 官方文档站
2. [官方 Telegram 群组](https://t.me/projectXray) - 活跃而友善的官方讨论社区
<img src="./ch08-img02-buzz.png" alt="TO INFINITY AND BEYOND!"/>
:::tip 不算后记的后记
希望我陪你走过的这一段小小的旅程,可以成为你网络生活中的一份小小助力。

View file

@ -3,7 +3,7 @@
## 1. 小小白白 Linux 基础命令索引
| 编号 | 命令名称 | 命令说明 | 出现篇章 |
|:--:|:--|:--|:--:|
| :------: | :------------------ | :--------------------------- | :----------------------------------------: |
| `cmd-01` | `apt update` | 查询软件更新 | [《远程登录篇》](./ch03-ssh.md) |
| `cmd-02` | `apt upgrade` | 执行软件更新 | [《远程登录篇》](./ch03-ssh.md) |
| `cmd-03` | `nano` | 文本编辑器 | [《安全防护篇》](./ch04-security.md) |
@ -23,11 +23,10 @@
| `cmd-17` | `systemctl` | `systemd`基本服务管理命令 | [《Xray 服务器篇》](./ch07-xray-server.md) |
| `cmd-18` | `reboot` | 重启 Linux 系统 | [《Xray 服务器篇》](./ch07-xray-server.md) |
## 2. 小小白白 Linux 重要配置文件索引
| 编号 | 配置文件位置 | 文件说明 | 出现篇章 |
|:--:|:--|:--|:--:|
| :-------: | :-------------------------------------- | :----------------------------- | :----------------------------------------: |
| `conf-01` | `/etc/ssh/sshd_config` | SSH 远程登录程序设置 | [《远程登录篇》](./ch03-ssh.md) |
| `conf-02` | `/etc/nginx/nginx.conf` | Nginx 程序设置 | [《网站建设篇》](./ch05-webpage.md) |
| `conf-03` | `/etc/apt/sources.list` | apt 软件源列表 | [《Xray 服务器篇》](./ch07-xray-server.md) |
@ -36,13 +35,10 @@
| `conf-06` | `/etc/sysctl.conf` | 手动设置 kernel 参数 | [《Xray 服务器篇》](./ch07-xray-server.md) |
| `conf-07` | `/etc/sysctl.d/vpsadmin.conf` | 用户自定义 kernel 参数配置文件 | [《Xray 服务器篇》](./ch07-xray-server.md) |
## 3. 小小白白 Xray 重要文件索引
| 编号 | 配置文件位置 | 文件说明 | 出现篇章 |
|:--:|:--|:--|:--:|
| :-------: | :----------------------------------- | :------------ | :----------------------------------------: |
| `xray-01` | `/usr/local/etc/xray/config.json` | Xray 程序设置 | [《Xray 服务器篇》](./ch07-xray-server.md) |
| `xray-02` | `/home/vpsadmin/xray_cert/xray.cert` | TLS 证书 | [《Xray 服务器篇》](./ch07-xray-server.md) |
| `xray-03` | `/home/vpsadmin/xray_cert/xray.key` | TLS 私钥 | [《Xray 服务器篇》](./ch07-xray-server.md) |

View file

@ -4,15 +4,10 @@
[回落 (fallbacks) 功能简析](./fallbacks-lv1.md)
[路由 (routing) 功能简析(上)](./routing-lv1-part1.md)
[路由 (routing) 功能简析(下)](./routing-lv1-part2.md)
[Xray 的工作模式简析](./work.md)
[通过 SNI 回落功能实现伪装与按域名分流](./fallbacks-with-sni.md)

View file

@ -6,7 +6,6 @@
如果你用了《小小白白话文》中的[Xray 配置](../level-0/ch07-xray-server#_7-4-配置xray),并完成了[HTTP 自动跳转 HTTPS 优化](../level-0/ch07-xray-server#_7-8-服务器优化之二-开启http自动跳转https),那么你已经有了基于 `VLESS` 协议的简易回落:
```
"inbounds": [
{
@ -82,7 +81,6 @@
```
## 2. 重新认识回落 (WHAT, HOW `v1`)
基于上面的示例你应该就可以明白什么是回落What和怎么回落How简单地说就是下面这几个要素
@ -92,9 +90,8 @@
3. 回落的目标是某个 `端口`
4. 被回落的流量由监听 `回落端口` 的后续程序接手
## 3. 为什么要回落 (WHY `v1`)
最初,是为了防御 **【主动探测】** (Active Probing)
**主动探测:** 简单粗暴的理解,就是指外部通过发送特定的网络请求,并解读服务器的回应内容,来推测服务器端是否运行了 `xray`, `v2fly`, `shadowsocks` 等代理工具。一旦可以准确认定,则服务器可能受到干扰或阻断。
@ -112,8 +109,6 @@
至此,【回落】功能就从数据交互逻辑上解决了服务器被 **【主动探测】** 的安全隐患。
## 4. 重新认识【回落の完全体】 (WHAT, WHY, HOW `v2`)
为什么又要再次认识回落呢? 因为,上面仅仅说清楚了基于“协议”的、抵抗【主动探测】的初版回落。
@ -132,7 +127,6 @@
这样多轮介绍虽然略显繁琐,但只有这样层层深入展开,才能充分的说明【回落の完全体】独有的强大!
:::
## 5. 多层回落示例及解读
理解了【回落の完全体】是什么,那就可以动手操作配置多层回落了。其实,项目已经提供了非常完整的示例,即官方模板中的 [VLESS-TCP-XTLS-WHATEVER](https://github.com/XTLS/Xray-examples/blob/main/VLESS-TCP-XTLS-WHATEVER/)。
@ -232,10 +226,10 @@
没错,聪明的同学应该发现了,防御【主动探测】的 `nginx回落` 不见了!!!这是为什么呢?会不会不安全?别急,我们继续分析:
### 5.2 后续监听处理的配置段摘抄如下:
1. 后续处理回落至 `1310` 端口的流量,按照下面的配置验证、处理:
```
{
"port": 1310,
@ -271,6 +265,7 @@
- 所有非 `trojan` 协议的流量,转发至 `80` 端口,【主动探测】的防御,完成!
2. 后续处理回落至 `1234` 端口的流量,仔细看!它其实是 `vless+ws`
```
{
"port": 1234,
@ -298,6 +293,7 @@
```
3. 后续处理回落至 `2345` 端口的流量,仔细看!它其实是 `vmess直连`
```
{
"port": 2345,
@ -388,12 +384,10 @@
classDef nginxclass fill:#FFFFDE
```
## 6. 结语
至此,`Xray` 的【回落】功能就介绍完了。希望本文能够对你理解 `Xray` 的强大有所帮助。
## 7. 附加题
我再无耻的留一个附加题:本文详解的 [VLESS-TCP-XTLS-WHATEVER](https://github.com/XTLS/Xray-examples/blob/main/VLESS-TCP-XTLS-WHATEVER/) 模板?是否有可以优化的地方?

View file

@ -120,10 +120,7 @@ acme.sh --install-cert -d example.com --fullchain-file /etc/ssl/xray/cert.pem --
"network": "tcp",
"security": "xtls",
"xtlsSettings": {
"alpn": [
"h2",
"http/1.1"
],
"alpn": ["h2", "http/1.1"],
"certificates": [
{
"certificateFile": "/etc/ssl/xray/cert.pem",
@ -223,6 +220,7 @@ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt update
sudo apt install nginx
```
删除 `/etc/nginx/conf.d/default.conf` 并创建 `/etc/nginx/conf.d/fallbacks.conf`,内容如下:
```nginx
@ -322,9 +320,6 @@ http://blog.example.com:5002 {
## 引用
[^1]: [常见问题 - Let's Encrypt - 免费的 SSL/TLS 证书](https://letsencrypt.org/zh-cn/docs/faq/)
[^2]: [Proxy Protocol - HAProxy Technologies](https://www.haproxy.com/blog/haproxy/proxy-protocol/)
[^3]: [proxy protocol 介绍及 nginx 配置 - 简书](https://www.jianshu.com/p/cc8d592582c9)
[^4]: [v2fly-github-io/vless.md at master · rprx/v2fly-github-io](https://github.com/rprx/v2fly-github-io/blob/master/docs/config/protocols/vless.md)

View file

@ -18,12 +18,10 @@
路由功能实在过于灵活,所以本文的示例,都是为了讲解对应的概念,实际使用时请根据自己的需求进行调整。
:::
## 2. 基本功: “兄弟一条心”
下图的示例,就是在客户端的 `Xray` 入站接收 APP 数据、在路由 100%转发给出站,并从出站流向 VPS。
```mermaid
graph LR;
@ -107,8 +105,6 @@
]
```
### 2.3 路由
::: tip
@ -134,9 +130,6 @@
至此,我们最开始设计的极简规则【客户端的 `Xray` 入站接收 APP 数据、在路由 100%转发给出站,并从出站流向 VPS】已经完成。
### 2.4 路由配置项解析之一:流量筛选的依据
注意观察路由配置,我们可以看到几个新名词:
@ -150,7 +143,7 @@
其中 `domainStrategy` 我们暂且按下不表,先简单说明后面几个:
| 配置名称 | 配置值 | 配置说明 |
|:--:|:--:|:--|
| :-------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------- |
| `“rules”` | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 它的内层就是【路由规则】的明细设置 |
| `"type"` | `"field"` | 该项暂时没有特别定义,但是不能省略,所以记得写上就好 |
| `"inboundTag"` | `["inbound-10808"]` | 筛选流量的 **【依据】** 是【入站 Tag】具体 **【条件】** 现在只有一个:【入站来源是 `inbound-10808`】 |
@ -160,14 +153,10 @@
至此,**入站**、**路由**、**出站** 三兄弟就已经可以携手工作了。当然,现在这个 100%转发的工作并没有什么特别的意义。那么接下来,我们就看看这种分工合作的机制可以带来什么好处。
## 3. 小试牛刀: “三分天下” 之 “域名分流”
> `[geosite.dat]`
```mermaid
graph LR;
@ -194,8 +183,6 @@
```
这个配置逻辑,其实就是最简单、最常用的(《小小白白话文》中也在用的)路由配置三件套:
1. 广告流量屏蔽 `[block]`
@ -210,7 +197,6 @@
保持上例的 `inbound-10808` 不变。
### 3.2 出站
在上例的基础上,我们已经有了 `[proxy]` 的出站 `"proxy-out-vless"`,所以它保持不变。显而易见,我们需要加入两个新的出站方式:`[block]``[direct]`,如下:
@ -233,11 +219,11 @@
```
上面的配置用大白话翻译如下:
1. 上例中的 `[proxy-out-vless]` 出站配置保持不变
2. 加入 **`blackhole` 黑洞协议**,通过这个协议出站的流量,其实都被发送到了 `Xray` 内部的黑洞里,再也无法逃脱,于是效果就是屏蔽 `[block]`
3. 加入 **`freedom` 自由协议**,通过这个协议出站的流量,是自由的离开`Xray`去寻找原定的服务器,就像从没有来过,于是效果就是直连 `[direct]` (我这里起名叫做 `[direct-out]` 是为了强调它是一个出站)
### 3.3 路由
接下来就是见证奇迹的时刻了,我们可以用【路由】的配置把这些连接起来!
@ -277,8 +263,6 @@
- `"domain": ["geosite:cn"]`
- `"domain": ["geosite:geolocation-!cn"]`
### 3.4 简析域名文件: `geosite.dat`
其实,聪明的你大概可以通过这些配置项的名称猜出来个大概:
@ -289,7 +273,6 @@
- `"cn"`:就是该文件中的 **【中国域名】**
- `"geolocation-!cn"`:就是该文件中的 **【非中国域名】**
结合这些说明3.3 中的配置用大白话翻译就是:
1. APP 试图访问国外域名 `"domain": "geolocation-!cn"` 的流量,通过 `[proxy-out-vless]` 出站,转发至 VPS
@ -298,8 +281,6 @@
这时,才让【路由功能】的好处稍微得到了一些展现。
### 3.5 所以 `geosite.dat` 到底是什么?不是有个 `GFWList` 吗?
你想,这世界上的域名何止千万,如果我们每写一个基于【域名】匹配的路由规则,都要自己收集、手动输入域名,那效率将会何其低下!
@ -327,8 +308,6 @@
:::
### 3.6 军师锦囊藏奇兵:一条隐藏的路由规则
事实上,当你认真思考上面的规则,不难发现一个问题,我们的所有规则都只规定了【当入站流量 **符合某种条件时** 应该被转发给哪个出站】,那么,如果 `geosite.dat` 文件不全面,我们的入站流量【**不符合任何条件时**】,`Xray` 会怎么处理呢?
@ -341,8 +320,6 @@
这样,就不会有任何流量被漏掉了。所以,你一定要把你最信赖的心腹大将放在【第一条出站】,让它为你守城护池。
### 3.7 再看“三分天下”的大地图
因为我们在前面的示例中把 `[proxy-out-vless]` 放在了出站的第一位,所以隐藏规则生效时,流量会通过 `VLESS` 协议被转发至远端的 VPS。因此`Xray` 此时的完整工作逻辑如下:
@ -375,10 +352,8 @@
```
事实上,这就是传统所谓的 **【默认科学上网、国内网站白名单直连】** 的配置。
## 4. “三分天下” 之 “蜀魏争雄”
现在,你已经知道了隐藏的默认路由规则:【**当入站流量不符合任何条件时,转发给第一个出站** 】。这时候,你应该能看出来,究竟是【科学上网】为王,还是【直连】称霸,全看你的第一条出站是什么!
@ -437,7 +412,6 @@
至此,我们已经解释完了 **【如何利用 `geosite.dat` 文件,通过路由规则,根据【域名】来分流网络流量】。**
## 5. 攻城略池 - 多种路由匹配条件
请确保你已经读懂了上面的内容,因为这样,你就已经理解了【路由】功能的工作逻辑。有了这个基础,我们就可以继续分析【路由】功能更多更详细的配置方式和匹配条件了。

View file

@ -6,10 +6,9 @@
如前面所说,域名分流仅仅是【路由】功能的牛刀小试而已。下面就让我们来看看除了域名之外,还什么可以用做分流依据的东西吧!
## 5. 攻城略池 - 多种路由匹配条件
> `[域名], [IP], [协议], etc.`
> `[域名], [IP], [协议], etc.`
基于域名的分流,已经可以让我们对网络流量进行基本合理的分流。为什么说【基本合理】呢?
@ -39,10 +38,8 @@
- 当你的第一个出站是 `[proxy-out-vless]` 时:**需要代理的都正确了,但需要直连的则都错误**
:::
所以,我们需要一个办法,让我们鱼与熊掌兼得。这样的办法是否存在呢?**当然存在!** 我们需要的只是【域名】之外更多的【**分流判断依据**】而已。
### 5.1 基于指定域名分流:`[domain], [full]`
1. 如果需要匹配某个子域名,如 `a-name.yourdomain.com`,我们使用 `full: "a-name.yourdomain.com"`
@ -85,8 +82,6 @@
}
```
### 5.2 基于 IP 文件分流:`geoip.dat`
`geosite.dat` 规则文件十分类似的,我们还有 `geoip.dat` 这个规则文件它致力于为用户提供成熟完善的【IP 分类表】。让用户可以简单的通过 `geoip:xxx` 这种格式方便的调用任何子类,定制符合自身需求的路由规则 。
@ -121,8 +116,6 @@
}
```
### 5.3 基于指定 IP 地址分流
`geosite.dat` 规则文件十分类似的,我们还有 `geoip.dat` 这个规则文件,它是供【路由功能】驱使的**第二个神兵利器**它致力于为用户提供成熟完善的【IP 分类表】。让用户可以简单的通过 `geoip:xxx` 这种格式方便的调用任何子类,定制符合自身需求的路由规则 。
@ -156,8 +149,6 @@
}
```
### 5.4 基于协议类型分流:`[protocol]`
1. 解决前面的 `[问题9]`,我们使用 `"protocol": ["bittorrent"]` 类别来指定 `[direct-out]`
@ -182,19 +173,19 @@
}
```
### 5.5 基于更多条件的分流
到目前位置,我们仍然只讲了【路由功能】分流能力的冰山一角!因为它还支持很多其他的判断条件!我在此简单罗列如下:
本文已经讲过的:
- `inboundTag`
- `domain`
- `ip`
- `protocol`
本文尚未讲到的:
- `port`
- `sourcePort`
- `network`
@ -204,9 +195,6 @@
但这些内容实在是过多,全部展开就远远不是 `level-1` 的内容了,所以,需要这些复杂条件的朋友,请仔细阅读 [《基础配置模块 - 路由》文档](../../config/base/routing/) 自学哦!有问题就去 TG 群里面问问吧!
## 6. “霸业初定”:路由规则整体回顾
到现在为止,我们已经累积出了一套战略雄伟、战术精准的路由规则,为了避免混乱,现在就对它进行一次完整的整理和回顾。
@ -217,7 +205,6 @@
`[1-block] --> [2-direct] --> [3-proxy] --> [4-first-outbound]`
:::
```
"routing": {
"domainStrategy": "AsIs",
@ -284,7 +271,6 @@
}
```
此时,路由规则其实变成了:
```mermaid
@ -326,19 +312,15 @@
至于第一条出站是 `[direct-out]` 还是 `[proxy-out-vless]`,这就全看你的需求了。
## 7. 路由配置常见错误
请大家注意看,我上面每一条路由规则,都是一个独立的匹配依据,只有这样才能确保生效。而新人在自定义路由规则时常犯的一个错误就是:**在一条规则内同时匹配了多种不同的匹配依据,造成匹配无效。**
比如,他希望实现的配置是:
1. 自己的 `direct.yourdomain.com` 直连
2. 国内 DNS 查询(如 `223.5.5.5`)直连
### 7.1 错误示范
为了实现上面的目标,他写出了以下路由规则:
@ -371,8 +353,6 @@
很显然,一个目标不可能同时等于两个不同的值,所以这不但是一个永远不可能实现的无效规则,更与原本的目标风马牛不相及。
### 7.2 正确示范
正确示范,自然就是将不同的匹配依据独立出来:
@ -401,10 +381,8 @@
其实,第 6 点已经是我整理过的规则了,原则就是【相同的匹配依据可以合并,不同的匹配依据保持独立】。
## 8. 明修栈道、暗渡陈仓
> `[domain]` 转化 `[ip]` 的密道:`domainStrategy`
我们在 5.4 中提交了多种流量判断的【依据】,其中一种是域名 `[domain]`、一种是 `[IP]`
@ -419,8 +397,6 @@
按么我们逐个来解释一下:
### 8.1 域名策略: `"AsIs"`
就是 "As Domain Is",也就是说 【域名什么样,就什么样,不多折腾】。
@ -433,8 +409,6 @@
这个方式的处理都在 `Xray` 内部完成,没有与外界的数据往来,所以速度最快。它的兜底策略也很清晰:即前面所说的、无法匹配的域名自动转入第一条出站处理。所以,对于常规使用路由功能这最推荐的策略。
### 8.2 域名策略: `"IPIfNonMatch"`
就是 "lookup IP if (there's) no matching rule",也就是说【如果其他所有规则都匹配不上,那就转化成 `IP` 去匹配 `IP` 规则】。
@ -443,7 +417,6 @@
该策略下没有命中任何规则的这一部分域名,会需要再经历 `DNS` 查询过程、以及第二轮规则匹配的过程,其耗时会多于 `AsIs` 策略,所以并不是首选推荐的策略。
### 8.3 域名策略: `"IPOnDemand"`
这里其实说 `Demand IP` 更准确些,也就是说【当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配】。
@ -456,8 +429,6 @@
`domainStrategy` 仅对域名生效,不要搞混了哦~
:::
## 9. 思考题
迄今为止,我们都是在【单入站】和【单出站】的基础上,讲解【路由】内部的各种配置逻辑。
@ -475,7 +446,6 @@
答案当然是 **【完全可以】** 啦! 但是这些对于 `level-1` 来说已经超纲了,就留给各位自由的探索吧!
## 10. 结语
至此,`Xray` 的【路由】功能就介绍完了。希望本文能够对你理解 `Xray` 的灵活有所帮助。

View file

@ -2,7 +2,6 @@
## 单服务器模式
与其它的网络代理工具一样,你需要一台配置了 Xray 的服务器,然后在自己的设备上安装并配置 Xray 客户端,然后即可流畅地访问互联网。
```mermaid
@ -16,10 +15,8 @@ A --> E(墙内网站);
一个 Xray 服务器可同时支持多台设备使用不同的代理协议访问。同时经过合理的配置Xray 可以识别并区分需要代理以及不需要代理的流量,直连的流量不需要绕路。
## 桥接模式
如果你不想在每一台设备上都配置路由,你也可以设置一台中转服务器,用于接收客户端发来的所有流量,然后在服务器中进行转发判断。
```mermaid
@ -32,7 +29,6 @@ E --> C;
D --> F(墙内网站);
```
## 工作原理
在配置 Xray 之前,不妨先来看一下 Xray 的工作原理,以下是单个 Xray 进程的内部结构示意图。多个 Xray 之间相互独立,互不影响。

View file

@ -39,10 +39,7 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
"destOverride": ["http", "tls"]
},
"streamSettings": {
"sockopt": {
@ -123,22 +120,14 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
{
"address": "119.29.29.29",
"port": 53,
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
]
"domains": ["geosite:cn"],
"expectIPs": ["geoip:cn"]
},
{
"address": "223.5.5.5",
"port": 53,
"domains": [
"geosite:cn"
],
"expectIPs": [
"geoip:cn"
]
"domains": ["geosite:cn"],
"expectIPs": ["geoip:cn"]
},
"8.8.8.8",
"1.1.1.1",
@ -150,39 +139,28 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
"rules": [
{
"type": "field",
"inboundTag": [
"all-in"
],
"inboundTag": ["all-in"],
"port": 53,
"outboundTag": "dns-out"
},
{
"type": "field",
"ip": [
"8.8.8.8",
"1.1.1.1"
],
"ip": ["8.8.8.8", "1.1.1.1"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": [
"geosite:category-ads-all"
],
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
},
{
"type": "field",
"domain": [
"geosite:geolocation-!cn"
],
"domain": ["geosite:geolocation-!cn"],
"outboundTag": "proxy"
},
{
"type": "field",
"ip": [
"geoip:telegram"
],
"ip": ["geoip:telegram"],
"outboundTag": "proxy"
}
]
@ -248,6 +226,7 @@ table ip xray {
}
}
```
::: tip
**使用方法**
@ -297,7 +276,6 @@ iptables -t mangle -A OUTPUT -j XRAY_SELF
</Tabs>
配置完成后,将局域网内其它设备的默认网关改为该设备 IP就可以直接翻墙了。在其它主机和本机皆测试成功后可进行下一步配置。
## 配置永久化与开机自启
@ -308,7 +286,6 @@ iptables -t mangle -A OUTPUT -j XRAY_SELF
<Tab title="nftables">
首先将已经编辑好的 nftables 配置文件移动到 `/etc` 目录下,并重命名为 `nftables.conf`。然后编辑 `/lib/systemd/system/nftables.service`
```ini

View file

@ -24,7 +24,6 @@
包含了各种用法示范的**终极配置**: [VLESS-TCP-XTLS-WHATEVER](https://github.com/XTLS/Xray-examples/tree/main/VLESS-TCP-XTLS-WHATEVER)
## 图形化客户端
- OpenWrt
@ -44,4 +43,3 @@
## UUID 生成器
第三方的 UUID 生成器 [uuidgenerator.net](https://www.uuidgenerator.net)