Skip to content

Перенаправление и TProxy — Xray-core

В Xray нет отдельных типов входящих redirect или tproxy. Оба режима реализуются через входящий Dokodemo-door в сочетании с streamSettings.sockopt.

REDIRECT (Linux iptables NAT)

Используйте входящий Dokodemo с followRedirect: true:

json
{
  "inbounds": [{
    "tag": "redir-in",
    "listen": "127.0.0.1",
    "port": 12345,
    "protocol": "dokodemo-door",
    "settings": {
      "network": "tcp",
      "followRedirect": true
    }
  }]
}

Затем установите правила iptables REDIRECT:

sh
iptables -t nat -N XRAY
iptables -t nat -A XRAY -d 192.168.0.0/16 -j RETURN
iptables -t nat -A XRAY -d 10.0.0.0/8 -j RETURN
iptables -t nat -A XRAY -d 172.16.0.0/12 -j RETURN
iptables -t nat -A XRAY -d 127.0.0.0/8 -j RETURN
iptables -t nat -A XRAY -p tcp -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -j XRAY

REDIRECT работает только для TCP. Для прозрачного проксирования UDP нужен TPROXY.

TPROXY (Linux iptables mangle)

json
{
  "inbounds": [{
    "tag": "tproxy-in",
    "listen": "0.0.0.0",
    "port": 12345,
    "protocol": "dokodemo-door",
    "settings": {
      "network": "tcp,udp",
      "followRedirect": true
    },
    "streamSettings": {
      "sockopt": {
        "tproxy": "tproxy",
        "mark": 255
      }
    }
  }]
}

Соответствующий набор правил iptables (TCP + UDP, с обходом по метке):

sh
# Custom chain for outgoing traffic
iptables -t mangle -N XRAY
iptables -t mangle -A XRAY -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A XRAY -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A XRAY -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A XRAY -m mark --mark 255 -j RETURN
iptables -t mangle -A XRAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 0x1
iptables -t mangle -A XRAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 0x1
iptables -t mangle -A PREROUTING -j XRAY

# Routing rule for the marked packets
ip rule add fwmark 0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

mark: 255 в sockopt применяется к собственным исходящим сокетам Xray — правило -m mark --mark 255 -j RETURN не даёт собственному исходящему трафику Xray повторно попасть в конвейер TPROXY (защита от петли).

Примечания

  • followRedirect: true обязателен для обоих режимов — он заставляет Xray читать из сокета исходный адрес назначения до NAT (SO_ORIGINAL_DST для REDIRECT, IP_RECVORIGDSTADDR для TPROXY).
  • TPROXY требует CAP_NET_ADMIN (запускайте от root или с этой capability).
  • Значение sockopt.tproxy может быть "redirect" (то же, что режим REDIRECT), "tproxy" или "off".
  • Полное руководство по прозрачному проксированию в Linux с шаблоном скрипта есть в документации Xray — ищите по запросу «xray transparent proxy».

Сравнение с другими ядрами

Core Tutorial от Argsment