Files
XTLS_Xray-docs-next/docs/config/inbounds/tun.md
T
2026-06-23 01:37:36 +08:00

83 lines
3.6 KiB
Markdown

# TUN
创建一个 TUN 接口,发往此接口的流量将由 Xray 处理。目前支持 Windows、Linux、macOS 和 FreeBSD。
Android 和 iOS 需要外部 APP 通过环境变量 `XRAY_TUN_FD` 传入 TUN FD,使用系统指定的接口重定向流量。无法独立使用,仅作为 APP 将流量接入 Xray 的方式。
Linux 可选使用该环境变量传入 TUN FD 以进行某些轻量化或非特权实现。
## InboundConfigurationObject
`InboundConfigurationObject` 对应 [`InboundObject`](../inbound.md) 中的 `settings` 项。
```json
{
"inbounds": [
{
// ...
"protocol": "tun",
// [!code focus:9]
"settings": {
"name": "xray0",
"mtu": 1500,
"gateway": ["10.0.0.1/16", "fc00::1/64"],
"dns": ["1.1.1.1", "8.8.8.8"],
"userLevel": 0,
"autoSystemRoutingTable": ["0.0.0.0/0", "::/0"],
"autoOutboundsInterface": "auto"
}
}
]
}
```
> `name`: string
创建的 TUN 接口名。默认 `"xray0"`
> `mtu`: number
接口的 MTU。默认值为 `1500`。
> `gateway`: [string]
为 TUN 接口配置的地址前缀列表,通常分别填写 IPv4 / IPv6,例如 `"10.0.0.1/16"`、`"fc00::1/64"`。
> `dns`: [string]
为 TUN 接口配置的 DNS 服务器列表,例如 `"1.1.1.1"`、`"8.8.8.8"`。
> `userLevel`: number
用户等级,连接会使用这个用户等级对应的 [本地策略](../policy.md#levelpolicyobject)。
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值. 如不指定, 默认为 0。
> `autoSystemRoutingTable`: [string]
自动写入系统路由表要导入该 TUN 接口的目标网段列表。每一项均为 CIDR,例如 `"0.0.0.0/0"` 表示所有 IPv4 流量,`"::/0"` 表示所有 IPv6 流量。
当前仅支持 Windows。其他系统需要手动配置路由表。
> `autoOutboundsInterface`: string
自动为 Xray 的出站绑定物理网络接口,用于避免把 Xray 自己发出的流量再次送回 TUN 造成回环。
相当于为所有出站自动设置 [sockopt](../transports/sockopt.md).interface(同时还会额外包括一些无法配置出站设置的请求,比如 内置 DNS 的各种 local 模式)可以被手动设置 sockopt 覆盖。
默认值为 `null`,即未配置。可填写具体接口名,也可填写 `"auto"` 让 Xray 自动选择。如果配置了 `autoSystemRoutingTable` 但未显式指定此项,Xray 会自动按 `"auto"` 处理。
## 使用提示
如果未配置 `autoSystemRoutingTable`,仍需要手动配置路由将数据导向创建的 TUN 接口,否则它只是个接口。
配置了 `gateway`、`dns`、`autoSystemRoutingTable` 和 `autoOutboundsInterface` 后,Xray 可以在支持的平台上自动完成一部分系统侧配置;如果你的平台尚未实现这些自动设置,或者需要更细粒度的策略路由,仍然需要配合系统工具手动处理。
如果只想代理某一个或一些进程,Xray 路由系统中的进程名路由会十分有用。
::: warning
注意可能的流量回环的问题,设置路由后可能将 Xray 发出的请求发回 Xray 造成回环!
优先使用 `autoOutboundsInterface` 避免此问题;如果你需要手动控制,也可以使用 `sockopt` 中的 `interface` 绑定实际的物理网络接口。`ipconfig` (Windows) `ip a` (Linux) 将有助于找到你需要的接口名。
或者使用出站的 `sendThrough` 它直接在 OutboundObject 中可用,没有 sockOpt.interface 那么深的嵌套层级,这里需要使用的是网卡上的 IP,比如 192.168.1.2 (如你所见它的缺点是不能自动支持双栈,请按你出站的实际使用的 IP 选择)。
:::