Xray-docs-next/docs/en/config/inbound.md

162 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 入站代理
入站连接用于接收发来的数据,可用的协议请见[inbound protocols](./inbounds/)。
## InboundObject
`InboundObject` 对应配置文件中 `inbounds` 项的一个子元素。
```json
{
"inbounds": [
{
"listen": "127.0.0.1",
"port": 1080,
"protocol": "协议名称",
"settings": {},
"streamSettings": {},
"tag": "标识",
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"allocate": {
"strategy": "always",
"refresh": 5,
"concurrency": 3
}
}
]
}
```
> `listen`: address
监听地址IP 地址或 Unix domain socket默认值为 `"0.0.0.0"`,表示接收所有网卡上的连接.
可以指定一个系统可用的 IP 地址。
支持填写 Unix domain socket格式为绝对路径形如 `"/dev/shm/domain.socket"`,可在开头加 `@` 代表 [abstract](https://www.man7.org/linux/man-pages/man7/unix.7.html)`@@` 则代表带 padding 的 abstract。
填写 Unix domain socket 时,`port` 和 `allocate` 将被忽略,协议目前可选 VLESS、VMess、Trojan传输方式可选 TCP、WebSocket、HTTP/2、gRPC。
填写 Unix domain socket 时,填写为形如 `"/dev/shm/domain.socket,0666"` 的形式,即 socket 后加逗号及访问权限指示符,即可指定 socket 的访问权限,可用于解决默认情况下出现的 socket 访问权限问题。
> `port`: number | "env:variable" | string
端口。接受的格式如下:
- 整型数值:实际的端口号。
- 环境变量:以 `"env:"` 开头,后面是一个环境变量的名称,如 `"env:PORT"`。Xray 会以字符串形式解析这个环境变量。
- 字符串:可以是一个数值类型的字符串,如 `"1234"`;或者一个数值范围,如 `"5-10"` 表示端口 5 到端口 10这 6 个端口。可以使用逗号进行分段,如 `11,13,15-17` 表示端口 11、端口 13、端口 15 到端口 17 这 5 个端口。
当只有一个端口时Xray 会在此端口监听入站连接。当指定了一个端口范围时,取决于 `allocate` 设置。
> `protocol`: string
连接协议名称,可选的协议类型见 [inbound protocols](./inbounds/)。
> `settings`: InboundConfigurationObject
具体的配置内容,视协议不同而不同。详见每个协议中的 `InboundConfigurationObject`
> `streamSettings`: [StreamSettingsObject](./transport.md#streamsettingsobject)
底层传输方式transport是当前 Xray 节点和其它节点对接的方式
> `tag`: string
> 此入站连接的标识,用于在其它的配置中定位此连接。
::: danger
当其不为空时,其值必须在所有 `tag` 中**唯一**。
:::
> `sniffing`: [SniffingObject](#sniffingobject)
流量探测主要作用于在透明代理等用途.
比如一个典型流程如下:
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
4. Xray 会把 1.2.3.4 重置为 abc.com.路由就可以根据域名去进行路由的域名规则的分流
因为变成了一个向 abc.com 请求的连接, 就可以做更多的事情, 除了路由域名规则分流, 还能重新做 DNS 解析等其他工作.
当设置了 sniffing 中的 enable 为 true, 还能嗅探出 bittorrent 类型的流量, 然后可以在路由中配置"protocol"项来设置规则处理 BT 流量, 比如服务端用来拦截 BT 流量, 或客户端固定转发 BT 流量到某个 VPS 去等.
> `allocate`: [AllocateObject](#allocateobject)
当设置了多个 port 时, 端口分配的具体设置
### SniffingObject
```json
{
"enabled": true,
"destOverride": ["http", "tls", "fakedns"],
"metadataOnly": false,
"domainsExcluded": [],
"routeOnly": false
}
```
> `enabled`: true | false
是否开启流量探测。
> `destOverride`: \["http" | "tls" | "quic" | "fakedns" | "fakedns+others" \]
当流量为指定类型时,按其中包括的目标地址重置当前连接的目标。
其中 `["fakedns+others"]` 相当于 `["http", "tls", "quic", "fakedns"]`,当 IP 地址处于 FakeIP 区间内但没有命中域名记录时会使用 `http`、`tls` 和 `quic` 进行匹配。此项仅在 `metadataOnly``false` 时有效。
> `metadataOnly`: true | false
当启用时,将仅使用连接的元数据嗅探目标地址。此时,除 `fakedns` 以外的 sniffer 将不能激活(包括 `fakedns+others`)。
如果关闭仅使用元数据推断目标地址,此时客户端必须先发送数据,代理服务器才会实际建立连接。此行为与需要服务器首先发起第一个消息的协议不兼容,如 SMTP 协议。
> `domainsExcluded`: [string] <Badge text="WIP" type="warning"/>
一个域名列表,如果流量探测结果在这个列表中时,将 **不会** 重置目标地址。
::: warning
目前,`domainsExcluded` 不支持类似路由中的域名匹配方式。此选项未来可能会改变,不保证跨版本兼容。
:::
> `routeOnly`: true | false
将嗅探得到的域名仅用于路由,代理目标地址仍为 IP。默认值为 `false`
此项需要开启 `destOverride` 使用。
::: tip
在能保证 **被代理连接能得到正确的 DNS 解析** 时,使用 `routeOnly` 且开启 `destOverride` 的同时,将路由匹配策略 `domainStrategy` 设置为 `AsIs` 即可实现全程无 DNS 解析进行域名及 IP 分流。此时遇到 IP 规则匹配时使用的 IP 为域名原始 IP。
:::
### AllocateObject
```json
{
"strategy": "always",
"refresh": 5,
"concurrency": 3
}
```
> `strategy`: "always" | "random"
端口分配策略。
- `"always"` 表示总是分配所有已指定的端口,`port` 中指定了多少个端口Xray 就会监听这些端口。
- `"random"` 表示随机开放端口,每隔 `refresh` 分钟在 `port` 范围中随机选取 `concurrency` 个端口来监听。
> `refresh`: number
随机端口刷新间隔,单位为分钟。最小值为 `2`,建议值为 `5`。这个属性仅当 `strategy` 设置为 `"random"` 时有效。
> `concurrency`: number
随机端口数量。最小值为 `1`,最大值为 `port` 范围的三分之一。建议值为 `3`