Перенаправление и 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 XRAYREDIRECT работает только для 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 100mark: 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».
Сравнение с другими ядрами
- sing-box предоставляет отдельные типы входящих
redirectиtproxyс теми же требованиями со стороны ядра Linux. См. Перенаправление/TProxy — sing-box. - mihomo предлагает и сокращения верхнего уровня (
redir-portиtproxy-port— см. Основы mihomo), и записи вlisteners:(type: redir,type: tproxy). См. Перенаправление/TProxy — mihomo.
