TUN — Xray-core
Xray-core включает входящий TUN в proxy/tun. Он создаёт TUN-устройство, читает «сырые» пакеты и декодирует их минимальным встроенным сетевым стеком, после чего передаёт их исходящим. Исторически маршруты, DNS и правила межсетевого экрана приходилось настраивать вручную; в свежих сборках появились опциональные помощники — gateway, dns, autoSystemRoutingTable и autoOutboundsInterface, — позволяющие Xray самому добавлять записи в системную таблицу маршрутизации и автоматически привязывать исходящие к физическому интерфейсу.
Он по-прежнему легче TUN-стеков sing-box / mihomo: здесь нет strict-route, auto-redirect и фильтрации по UID / пакетам приложений. Если они нужны, используйте sing-box или mihomo как TUN-фронтенд и направляйте их исходящий трафик через Xray.
Входящий
settings для "protocol": "tun":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (auto-generated) | <interface name> | Имя TUN-устройства, создаваемого при запуске. Если пусто, автоматически выбирается свободное имя `utun<N>` (N в диапазоне 10–1024). |
desc | string | Wintun | <string> | Описание устройства, передаваемое адаптеру Wintun при создании (только Windows). Если пусто, по умолчанию "Wintun". |
mtu | uint32 | 1500 | <bytes> | Максимальный размер передаваемого блока (MTU) для устройства. |
gateway | []string | — | <ip address> | … | Адрес(а) шлюза, назначаемые TUN-интерфейсу. |
dns | []string | — | <ip address> | … | Адрес(а) DNS-серверов, настраиваемые на TUN-интерфейсе. |
userLevel | uint32 | 0 | <uint32> | Уровень политики по умолчанию для соединений, принятых этим входящим. |
autoSystemRoutingTable | []string | — | <routing-table entry> | … | Если задано, Xray автоматически добавляет в системную таблицу маршрутизации записи, направляющие трафик в устройство. Наличие этого списка включает автомаршрутизацию. |
autoOutboundsInterface | *string | auto | <interface name> | auto | Физический интерфейс, к которому привязываются исходящие соединения, что предотвращает петли маршрутизации. Если autoSystemRoutingTable задан, по умолчанию "auto". |
Исходный код: infra/conf/tun.go:14-23 · зафиксировано на v26.7.28 (5ca6f4b)
Пример
{
"inbounds": [{
"tag": "tun-in",
"protocol": "tun",
"settings": {
"name": "xray0",
"mtu": 9000
}
}]
}Чтобы Xray сам управлял маршрутизацией, добавьте autoSystemRoutingTable (и при желании зафиксируйте исходящий интерфейс):
{
"inbounds": [{
"tag": "tun-in",
"protocol": "tun",
"settings": {
"name": "xray0",
"mtu": 1500,
"autoSystemRoutingTable": ["main"],
"autoOutboundsInterface": "auto"
}
}]
}Либо настройте системную сеть вручную:
# Linux example
ip addr add 198.18.0.1/30 dev xray0
ip link set xray0 up
# Route everything through xray0 (skip your management subnet)
ip route add 1/1 dev xray0
ip route add 128/1 dev xray0
# DNS hijack
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-port 5353
# (then have an Xray dokodemo-door inbound on 5353)Примечания
- Входящий TUN в Xray — низкоуровневый считыватель пакетов. Он не разбирает TCP/IP самостоятельно: пакеты декодируются минимальным встроенным сетевым стеком и передаются исходящим.
- Типичное применение в Linux: сочетание с входящими
dokodemo-doorи написанным вручную набором правил iptables для прозрачного проксирования, либо задайтеautoSystemRoutingTable, чтобы Xray установил маршруты сам. autoSystemRoutingTableзаставляет Xray автоматически управлять записями системной таблицы маршрутизации; если он задан, аautoOutboundsInterfaceопущен, исходящий интерфейс по умолчанию равенauto.gatewayиdnsзадают адрес и резолвер(ы) на устройстве.- В Windows/macOS входящий TUN в Xray создаёт устройство wintun / utun. С
autoSystemRoutingTableон может настроить маршрутизацию за вас; иначе автоматизируйте её скриптами самостоятельно. Многие пользователи на этих платформах всё же предпочитают sing-box или mihomo из-за более богатого набора TUN-возможностей.
Сравнение с другими ядрами
- sing-box предлагает полнофункциональный входящий TUN с
auto_route,auto_redirect,strict_route,route_address, фильтрацией по UID / пакетам и выбором стека под платформу (gVisor / system / mixed). См. TUN — sing-box. - mihomo имеет аналогичный полнофункциональный входящий TUN в блоке верхнего уровня
tun:с тем же набором параметров в kebab-case-именах. См. TUN — mihomo.
Исходный код: infra/conf/tun.go:14-23 · v26.7.28 (5ca6f4b)
