Skip to content

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":

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(auto-generated)<interface name>Имя TUN-устройства, создаваемого при запуске. Если пусто, автоматически выбирается свободное имя `utun<N>` (N в диапазоне 10–1024).
descstringWintun<string>Описание устройства, передаваемое адаптеру Wintun при создании (только Windows). Если пусто, по умолчанию "Wintun".
mtuuint321500<bytes>Максимальный размер передаваемого блока (MTU) для устройства.
gateway[]string<ip address> | …Адрес(а) шлюза, назначаемые TUN-интерфейсу.
dns[]string<ip address> | …Адрес(а) DNS-серверов, настраиваемые на TUN-интерфейсе.
userLeveluint320<uint32>Уровень политики по умолчанию для соединений, принятых этим входящим.
autoSystemRoutingTable[]string<routing-table entry> | …Если задано, Xray автоматически добавляет в системную таблицу маршрутизации записи, направляющие трафик в устройство. Наличие этого списка включает автомаршрутизацию.
autoOutboundsInterface*stringauto<interface name> | autoФизический интерфейс, к которому привязываются исходящие соединения, что предотвращает петли маршрутизации. Если autoSystemRoutingTable задан, по умолчанию "auto".

Исходный код: infra/conf/tun.go:14-23 · зафиксировано на v26.7.28 (5ca6f4b)

Пример

json
{
  "inbounds": [{
    "tag": "tun-in",
    "protocol": "tun",
    "settings": {
      "name": "xray0",
      "mtu": 9000
    }
  }]
}

Чтобы Xray сам управлял маршрутизацией, добавьте autoSystemRoutingTable (и при желании зафиксируйте исходящий интерфейс):

json
{
  "inbounds": [{
    "tag": "tun-in",
    "protocol": "tun",
    "settings": {
      "name": "xray0",
      "mtu": 1500,
      "autoSystemRoutingTable": ["main"],
      "autoOutboundsInterface": "auto"
    }
  }]
}

Либо настройте системную сеть вручную:

sh
# 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)

Core Tutorial от Argsment