TUN: Update

This commit is contained in:
Meow
2026-05-06 19:19:33 +08:00
parent 3b0bf3fc97
commit 94cc4b7980
3 changed files with 126 additions and 24 deletions
+40 -7
View File
@@ -1,14 +1,27 @@
# TUN # TUN
创建一个 TUN 接口,发往此接口的流量将由 Xray 处理。目前支持 WindowsLinux. 创建一个 TUN 接口,发往此接口的流量将由 Xray 处理。目前支持 WindowsLinux、macOS 和 FreeBSD。
## InboundConfigurationObject ## InboundConfigurationObject
```json ```json
{ {
"name": "xray0", "name": "xray0",
"MTU": 1500, "mtu": 1500,
"UserLevel": 0 "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"
} }
``` ```
@@ -16,9 +29,17 @@
创建的 TUN 接口名。默认 `"xray0"` 创建的 TUN 接口名。默认 `"xray0"`
> `MTU`: number > `mtu`: number
接口的 MTU 默认值 `1500` 接口的 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 > `userLevel`: number
@@ -26,14 +47,26 @@
userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值. 如不指定, 默认为 0。 userLevel 的值, 对应 [policy](../policy.md#policyobject) 中 `level` 的值. 如不指定, 默认为 0。
> `autoSystemRoutingTable`: [string]
自动写入系统路由表的目标网段列表。每一项均为 CIDR,例如 `"0.0.0.0/0"` 表示所有 IPv4 流量,`"::/0"` 表示所有 IPv6 流量。
> `autoOutboundsInterface`: string
自动为 Xray 的出站绑定物理网络接口,用于避免把 Xray 自己发出的流量再次送回 TUN 造成回环。
默认值为 `null`,即未配置。可填写具体接口名,也可填写 `"auto"` 让 Xray 自动选择。如果配置了 `autoSystemRoutingTable` 但未显式指定此项,Xray 会自动按 `"auto"` 处理。
## 使用提示 ## 使用提示
目前 Xray 不会自动修改系统路由表,需要手动配置路由将数据导向创建的 TUN 接口,否则它只是个接口。 如果未配置 `autoSystemRoutingTable`,仍需要手动配置路由将数据导向创建的 TUN 接口,否则它只是个接口。
配置了 `gateway``dns``autoSystemRoutingTable``autoOutboundsInterface` 后,Xray 可以在支持的平台上自动完成一部分系统侧配置;如果你的平台尚未实现这些自动设置,或者需要更细粒度的策略路由,仍然需要配合系统工具手动处理。
如果只想代理某一个或一些进程,Xray 路由系统中的进程名路由会十分有用。 如果只想代理某一个或一些进程,Xray 路由系统中的进程名路由会十分有用。
::: warning ::: warning
注意可能的流量回环的问题,设置路由后可能将 Xray 发出的请求发回 Xray 造成回环! 注意可能的流量回环的问题,设置路由后可能将 Xray 发出的请求发回 Xray 造成回环!
使用`sockopt` 中的 `interface` 绑定实际的物理网络接口来避免此问题`ipconfig` (Windows) `ip a` (Linux) 将有助于找到你需要的接口名。 优先使用 `autoOutboundsInterface` 避免此问题;如果你需要手动控制,也可以使用 `sockopt` 中的 `interface` 绑定实际的物理网络接口。`ipconfig` (Windows) `ip a` (Linux) 将有助于找到你需要的接口名。
或者使用出站的 `sendThrough` 它直接在 OutboundObject 中可用,没有 sockOpt.interface 那么深的嵌套层级,这里需要使用的是网卡上的 IP,比如 192.168.1.2 (如你所见它的缺点是不能自动支持双栈,请按你出站的实际使用的 IP 选择)。 或者使用出站的 `sendThrough` 它直接在 OutboundObject 中可用,没有 sockOpt.interface 那么深的嵌套层级,这里需要使用的是网卡上的 IP,比如 192.168.1.2 (如你所见它的缺点是不能自动支持双栈,请按你出站的实际使用的 IP 选择)。
::: :::
+40 -7
View File
@@ -1,14 +1,27 @@
# TUN # TUN
Creates a TUN interface; traffic sent to this interface will be processed by Xray. Currently, only Windows and Linux are supported. Creates a TUN interface; traffic sent to this interface will be processed by Xray. Currently, Windows, Linux, macOS, and FreeBSD are supported.
## InboundConfigurationObject ## InboundConfigurationObject
```json ```json
{ {
"name": "xray0", "name": "xray0",
"MTU": 1500, "mtu": 1500,
"UserLevel": 0 "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"
} }
``` ```
@@ -16,9 +29,17 @@ Creates a TUN interface; traffic sent to this interface will be processed by Xra
The name of the created TUN interface. Default is `"xray0"`. The name of the created TUN interface. Default is `"xray0"`.
> `MTU`: number > `mtu`: number
The MTU of the interface. Default is `1500`. The MTU of the interface. The default is `1500`.
> `gateway`: [string]
The list of address prefixes assigned to the TUN interface, usually one for IPv4 and one for IPv6, such as `"10.0.0.1/16"` and `"fc00::1/64"`.
> `dns`: [string]
The list of DNS servers assigned to the TUN interface, such as `"1.1.1.1"` and `"8.8.8.8"`.
> `userLevel`: number > `userLevel`: number
@@ -26,14 +47,26 @@ User level. The connection will use the [local policy](../policy.md#levelpolicyo
The value of `userLevel` corresponds to the `level` value in [policy](../policy.md#policyobject). If not specified, the default is 0. The value of `userLevel` corresponds to the `level` value in [policy](../policy.md#policyobject). If not specified, the default is 0.
> `autoSystemRoutingTable`: [string]
The list of destination prefixes that Xray should add to the system routing table automatically. Each item is a CIDR. For example, `"0.0.0.0/0"` means all IPv4 traffic, and `"::/0"` means all IPv6 traffic.
> `autoOutboundsInterface`: string
Automatically binds Xray outbounds to a physical network interface, so that traffic generated by Xray itself is not sent back into the TUN interface and looped.
The default value is `null`, which means not configured. You can specify an interface name explicitly, or use `"auto"` to let Xray choose one automatically. If `autoSystemRoutingTable` is configured but this field is omitted, Xray treats it as `"auto"`.
## Usage Tips ## Usage Tips
Currently, Xray does not automatically modify the system routing table. You need to manually configure routes to direct data to the created TUN interface; otherwise, it remains just an interface. If `autoSystemRoutingTable` is not configured, you still need to add routes manually to direct traffic to the created TUN interface; otherwise, it remains just an interface.
When `gateway`, `dns`, `autoSystemRoutingTable`, and `autoOutboundsInterface` are configured, Xray can perform part of the system-side setup automatically on supported platforms. If your platform does not implement these automatic settings yet, or if you need more fine-grained policy routing, you still need to configure the OS manually.
If you only want to proxy specific process(es), the process name routing in the Xray routing system will be very useful. If you only want to proxy specific process(es), the process name routing in the Xray routing system will be very useful.
::: warning ::: warning
Be aware of potential traffic loop issues. After setting routes, requests initiated by Xray might be sent back to Xray, causing a loop! Be aware of potential traffic loop issues. After setting routes, requests initiated by Xray might be sent back to Xray, causing a loop!
Use `interface` in `sockopt` to bind to the actual physical network interface to avoid this problem. `ipconfig` (Windows) or `ip a` (Linux) will help you find the interface name you need. Prefer `autoOutboundsInterface` to avoid this problem. If you need manual control, you can still use `interface` in `sockopt` to bind to the actual physical network interface. `ipconfig` (Windows) or `ip a` (Linux) will help you find the interface name you need.
Alternatively, use the outbound `sendThrough` setting. It is available directly in `OutboundObject` without the deep nesting level of `sockOpt.interface`. Here you need to use the IP address on the network card, such as 192.168.1.2 (As you can see, its disadvantage is that it cannot automatically support dual-stack; please choose according to the IP actually used for your outbound connection). Alternatively, use the outbound `sendThrough` setting. It is available directly in `OutboundObject` without the deep nesting level of `sockOpt.interface`. Here you need to use the IP address on the network card, such as 192.168.1.2 (As you can see, its disadvantage is that it cannot automatically support dual-stack; please choose according to the IP actually used for your outbound connection).
::: :::
+46 -10
View File
@@ -1,36 +1,72 @@
# TUN # TUN
Создает интерфейс TUN. Трафик, направленный на этот интерфейс, будет обрабатываться Xray. В настоящее время поддерживаются только Windows, Linux, Android. Создает TUN-интерфейс. Трафик, направленный в этот интерфейс, обрабатывается Xray. В настоящее время поддерживаются Windows, Linux, macOS и FreeBSD.
## InboundConfigurationObject ## InboundConfigurationObject
```json ```json
{ {
"name": "xray0", "name": "xray0",
"MTU": 1500, "mtu": 1500,
"UserLevel": 0 "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 > `name`: string
> Имя создаваемого TUN интерфейса. По умолчанию `"xray0"`.
> `MTU`: number Имя создаваемого TUN-интерфейса. По умолчанию `"xray0"`.
> Значение MTU интерфейса. По умолчанию `1500`.
> `mtu`: number
Значение MTU интерфейса. По умолчанию `1500`.
> `gateway`: [string]
Список префиксов адресов, назначаемых TUN-интерфейсу, обычно отдельно для IPv4 и IPv6, например `"10.0.0.1/16"` и `"fc00::1/64"`.
> `dns`: [string]
Список DNS-серверов, назначаемых интерфейсу TUN, например `"1.1.1.1"` и `"8.8.8.8"`.
> `userLevel`: number > `userLevel`: number
> Уровень пользователя. Соединения будут использовать [локальные политики](../policy.md#levelpolicyobject), соответствующую этому уровню пользователя.
Уровень пользователя. Для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Значение userLevel соответствует значению `level` в [policy](../policy.md#policyobject). Если не указано, по умолчанию равно 0. Значение userLevel соответствует значению `level` в [policy](../policy.md#policyobject). Если не указано, по умолчанию равно 0.
> `autoSystemRoutingTable`: [string]
Список целевых префиксов, которые Xray автоматически добавляет в системную таблицу маршрутизации. Каждый элемент задается в формате CIDR. Например, `"0.0.0.0/0"` означает весь IPv4-трафик, а `"::/0"` означает весь IPv6-трафик.
> `autoOutboundsInterface`: string
Автоматически привязывает исходящие соединения Xray к физическому сетевому интерфейсу, чтобы трафик, создаваемый самим Xray, не отправлялся обратно в TUN и не образовывал петлю.
Значение по умолчанию — `null`, то есть параметр не задан. Можно указать конкретное имя интерфейса или `"auto"`, чтобы Xray выбрал его автоматически. Если задан `autoSystemRoutingTable`, но это поле явно не указано, Xray будет обрабатывать его как `"auto"`.
## Советы по использованию ## Советы по использованию
В настоящее время Xray не изменяет системную таблицу маршрутизации автоматически. Необходимо вручную настроить маршрутизацию для направления трафика на созданный интерфейс TUN, иначе он останется просто интерфейсом. Если `autoSystemRoutingTable` не настроен, маршруты для направления трафика в созданный TUN-интерфейс по-прежнему нужно добавлять вручную, иначе он останется просто сетевым интерфейсом.
Если настроены `gateway`, `dns`, `autoSystemRoutingTable` и `autoOutboundsInterface`, Xray может автоматически выполнить часть системной настройки на поддерживаемых платформах. Если на вашей платформе такие автоматические настройки еще не реализованы, либо вам требуется более тонкая настройка маршрутизации, системную часть все равно придется настраивать вручную.
Если вы хотите проксировать только один или несколько процессов, будет очень полезна маршрутизация по имени процесса в системе маршрутизации Xray. Если вы хотите проксировать только один или несколько процессов, будет очень полезна маршрутизация по имени процесса в системе маршрутизации Xray.
::: warning ::: warning
Остерегайтесь возможных проблем с петлями трафика (traffic loops). После настройки маршрутизации запросы, отправляемые Xray, могут быть направлены обратно в Xray, создавая петлю! Остерегайтесь возможных петель трафика (traffic loops). После настройки маршрутизации запросы, отправляемые Xray, могут быть направлены обратно в Xray и образовать петлю.
Используйте `interface` в `sockopt` для привязки к реальному физическому сетевому интерфейсу, чтобы избежать этой проблемы. Команды `ipconfig` (Windows) и `ip a` (Linux) помогут найти имя нужного вам интерфейса. В первую очередь используйте `autoOutboundsInterface`, чтобы избежать этой проблемы. Если нужен ручной контроль, можно использовать `interface` в `sockopt` для привязки к реальному физическому сетевому интерфейсу. Команды `ipconfig` (Windows) и `ip a` (Linux) помогут найти имя нужного вам интерфейса.
Или используйте `sendThrough` для исходящих соединений. Он доступен непосредственно в OutboundObject и не имеет такой глубокой вложенности, как `sockOpt.interface`. Здесь необходимо использовать IP-адрес сетевой карты, например 192.168.1.2 (как видите, его недостатком является отсутствие автоматической поддержки dual-stack, пожалуйста, выбирайте в соответствии с фактически используемым IP для исходящего трафика). Или используйте `sendThrough` для исходящих соединений. Он доступен непосредственно в OutboundObject и не имеет такой глубокой вложенности, как `sockOpt.interface`. Здесь необходимо использовать IP-адрес сетевой карты, например 192.168.1.2 (как видите, его недостатком является отсутствие автоматической поддержки dual-stack, пожалуйста, выбирайте в соответствии с фактически используемым IP для исходящего трафика).
::: :::