Skip to content

Redirect & TProxy — sing-box

sing-box دو نوع ورودی اختصاصی برای پراکسی شفاف Linux دارد: redirect (iptables REDIRECT، فقط TCP) و tproxy (iptables/nftables TPROXY، TCP+UDP).

type: "redirect"

json
{
  "inbounds": [{
    "type": "redirect",
    "tag": "redir-in",
    "listen": "127.0.0.1",
    "listen_port": 12345
  }]
}

فقط فیلدهای ListenOptions تعبیه‌شده اعمال می‌شوند (listen، listen_port، tcp_fast_open، sniff، …). REDIRECT فقط TCP است.

با iptables جفت کنید:

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

type: "tproxy"

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
networkNetworkList(tcp+udp)tcp | udp | محدودسازی به فقط TCP یا فقط UDP. TPROXY از هر دو پشتیبانی می‌کند؛ REDIRECT فقط TCP است.

منبع: option/redir.go:7-10 · ثابت‌شده در v1.13.11 (553cfa1)

به علاوهٔ ListenOptions تعبیه‌شده.

json
{
  "inbounds": [{
    "type": "tproxy",
    "tag": "tproxy-in",
    "listen": "0.0.0.0",
    "listen_port": 12345,
    "network": "tcp,udp"
  }]
}

قواعد iptables mangle متناظر:

sh
iptables -t mangle -N SING_BOX
iptables -t mangle -A SING_BOX -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A SING_BOX -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A SING_BOX -m mark --mark 0x100 -j RETURN
iptables -t mangle -A SING_BOX -p tcp -j TPROXY --on-port 12345 --tproxy-mark 0x1
iptables -t mangle -A SING_BOX -p udp -j TPROXY --on-port 12345 --tproxy-mark 0x1
iptables -t mangle -A PREROUTING -j SING_BOX

ip rule add fwmark 0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

نشان فرار (0x100 بالا) باید با یک fwmark متناظر روی سوکت‌های خروجی sing-box تطبیق یابد — از طریق فیلد routing_mark خروجی یا route.default_mark تنظیم شود.

نکات

  • هر دو نوع ورودی به CAP_NET_ADMIN نیاز دارند. sing-box را به‌عنوان root اجرا کنید یا با setcap این قابلیت را روی باینری تنظیم کنید.
  • tproxy برای راه‌اندازی‌های جدید ترجیح داده می‌شود چون UDP را مدیریت می‌کند و بدون ترجمهٔ NAT کار می‌کند (مقصد اصلی به‌طور تمیز از سوکت خوانده می‌شود).
  • این‌ها انواع ورودی فقط Linux هستند. در سایر پلتفرم‌ها، برای پراکسی شفاف از TUN استفاده کنید.

نکات بین‌هسته‌ای

  • Xray-core برای رسیدن به همین نتیجه از ورودی Dokodemo-door با streamSettings.sockopt.tproxy استفاده می‌کند. بنگرید به Redirect/TProxy — Xray-core.
  • mihomo همان سازوکارهای سمت هسته را زیر میانبرهای سطح بالای redir-port / tproxy-port و ورودی‌های listeners: با type: redir / type: tproxy دارد. بنگرید به Redirect/TProxy — mihomo.

منبع: option/redir.go:3-10 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment